跳到内容

@mfui/openai-compatible

@mfui/openai-compatible 把兼容 Chat Completions 的 SSE 流转换成 MFUI 语义 SSE 流。

当 provider 返回 choices[].delta.content 这种 OpenAI Chat Completions 风格的 chunk 时,使用这个包。

createMFUIResponse()

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

Import

ts
import { createMFUIResponse } from '@mfui/openai-compatible';

Signature

ts
function createMFUIResponse(
  source: OpenAICompatibleStreamSource,
  mfui: MFUIManifest,
  options?: OpenAICompatibleMFUIResponseOptions,
): Response

入参

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

返回值

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

示例

ts
import { createMFUIPrompt } from '@mfui/server';
import { createMFUIResponse } from '@mfui/openai-compatible';

const upstream = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    model: 'gpt-4o-mini',
    messages: [
      {
        role: 'system',
        content: [
          'You are a helpful assistant.',
          createMFUIPrompt(mfui),
        ].join('\n\n'),
      },
      ...messages,
    ],
    stream: true,
  }),
});

return createMFUIResponse(upstream, mfui, {
  onMessage(message) {
    saveAssistantMessage(message);
  },
});

注意事项

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

OpenAICompatibleStreamSource

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

结构

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

OpenAICompatibleMFUIResponseOptions

createMFUIResponse() 的选项。

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

readStream()

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

Import

ts
import { readStream } from '@mfui/openai-compatible';

Signature

ts
function readStream(
  source: OpenAICompatibleStreamSource,
): AsyncIterable<OpenAICompatibleStreamChunk>

入参

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

返回值

类型描述
AsyncIterable<OpenAICompatibleStreamChunk>解析后的 provider chunks。[DONE] 哨兵事件会被跳过。

OpenAICompatibleStreamChunk

writeMFUIStream() 消费的 provider chunk 结构。

字段类型是否必填默认值描述
choicesArray<{ delta?: Record<string, unknown> }>Chat Completions choices。delta.content 字符串会追加到 MFUI block parser。
usageRecord<string, unknown>Token 用量。prompt_tokens 映射为 inputTokenscompletion_tokens 映射为 outputTokens
[key]unknownMFUI 会忽略额外 provider 字段。

writeMFUIStream()

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

Import

ts
import { writeMFUIStream } from '@mfui/openai-compatible';

Signature

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

入参

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

返回值

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

OpenAICompatibleMFUIStreamOptions

writeMFUIStream()pipeMFUIStream() 的选项。

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

pipeMFUIStream()

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

Import

ts
import { pipeMFUIStream } from '@mfui/openai-compatible';

Signature

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

入参

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

返回值

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