跳到内容

@mfui/gemini

@mfui/gemini 把 Gemini SSE 流转换成 MFUI 语义 SSE 流。

当上游 stream 输出 text,或输出 candidates[].content.parts[].text 时, 使用这个包。

createMFUIResponse()

根据上游 Gemini 流创建 MFUI 语义 SSE Response

Import

ts
import { createMFUIResponse } from '@mfui/gemini';

Signature

ts
function createMFUIResponse(
  source: GeminiStreamSource,
  mfui: MFUIManifest,
  options?: GeminiMFUIResponseOptions,
): Response

入参

名称类型是否必填默认值描述
sourceGeminiStreamSourceProvider Response、response body stream,或 null
mfuiMFUIManifest当前请求可用的组件。
optionsGeminiMFUIResponseOptions{}Response、parser、writer 和生命周期选项。

返回值

类型描述
Response输出 MFUI 语义 SSE 事件的 text/event-stream response。

示例

ts
import { createMFUIPrompt } from '@mfui/server';
import { createMFUIResponse } from '@mfui/gemini';

const upstream = await fetch(
  'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      systemInstruction: {
        parts: [
          {
            text: [
              'You are a helpful assistant.',
              createMFUIPrompt(mfui),
            ].join('\n\n'),
          },
        ],
      },
      contents,
    }),
  },
);

return createMFUIResponse(upstream, mfui);

注意事项

Provider 处理失败时,返回的 MFUI stream 会输出 error 事件并关闭。传入 onError 时会调用它。

GeminiStreamSource

createMFUIResponse()readStream()pipeMFUIStream() 接受的 source。

结构

ts
type GeminiStreamSource =
  | Response
  | ReadableStream<Uint8Array>
  | null

GeminiMFUIResponseOptions

createMFUIResponse() 的选项。

字段类型是否必填默认值描述
closebooleantrueProvider stream 结束时是否关闭 MFUI parser 和 writer。
parserMFUIBlockParserOptions{}传给 createMFUIBlockParser() 的选项。
writerMFUIStreamWriterOptions{}传给 createMFUIStreamWriter() 的选项。
responseInitResponseInit{}传给返回 Response 的 init 对象。
onMessageMFUIMessageHandlerMFUI response 完成后,使用最终投影消息调用。
onErrorMFUIErrorHandlerProvider stream 处理或 MFUI block 解析失败时调用。

readStream()

读取 Gemini SSE 事件,并产出 JSON chunk。

Import

ts
import { readStream } from '@mfui/gemini';

Signature

ts
function readStream(
  source: GeminiStreamSource,
): AsyncIterable<GeminiStreamChunk>

入参

名称类型是否必填默认值描述
sourceGeminiStreamSourceProvider SSE source。

返回值

类型描述
AsyncIterable<GeminiStreamChunk>解析后的 provider chunks。

GeminiStreamChunk

writeMFUIStream() 消费的 provider chunk 结构。

字段类型是否必填默认值描述
textstring直接文本 chunk。存在时优先使用。
candidatesArray<Record<string, unknown>>Candidate 对象。文本会从 candidate.content.parts[].text 读取。
usageMetadataGeminiUsageMetadataToken 用量元数据。
[key]unknownMFUI 会忽略额外 provider 字段。

GeminiUsageMetadata

从 Gemini chunk 中读取的用量元数据。

字段类型是否必填默认值描述
promptTokenCountnumber映射为 MFUI inputTokens
candidatesTokenCountnumber映射为 MFUI outputTokens
[key]unknownMFUI 会忽略额外 usage 字段。

writeMFUIStream()

把解析后的 Gemini chunks 写入 MFUI block parser。

Import

ts
import { writeMFUIStream } from '@mfui/gemini';

Signature

ts
function writeMFUIStream(
  stream: AsyncIterable<GeminiStreamChunk>,
  parser: MFUIBlockParser,
  options?: GeminiMFUIStreamOptions,
): Promise<void>

入参

名称类型是否必填默认值描述
streamAsyncIterable<GeminiStreamChunk>解析后的 provider chunks。
parserMFUIBlockParser接收 provider 文本增量的 MFUI block parser。
optionsGeminiMFUIStreamOptions{}写入选项。

返回值

类型描述
Promise<void>Provider stream 完全消费,且 parser flush 或 close 后 resolve。

GeminiMFUIStreamOptions

writeMFUIStream()pipeMFUIStream() 的选项。

字段类型是否必填默认值描述
closebooleantrueProvider stream 结束时是否调用 parser.close()。为 false 时会改为调用 parser.flush()

pipeMFUIStream()

读取 provider SSE source,并写入 MFUI block parser。

Import

ts
import { pipeMFUIStream } from '@mfui/gemini';

Signature

ts
function pipeMFUIStream(
  source: GeminiStreamSource,
  parser: MFUIBlockParser,
  options?: GeminiMFUIStreamOptions,
): Promise<void>

入参

名称类型是否必填默认值描述
sourceGeminiStreamSourceProvider SSE source。
parserMFUIBlockParser接收 provider 文本增量的 MFUI block parser。
optionsGeminiMFUIStreamOptions{}写入选项。

返回值

类型描述
Promise<void>Provider stream 消费完成后 resolve。