跳到内容

@mfui/openai-responses

@mfui/openai-responses 把 OpenAI Responses SSE 流转换成 MFUI 语义 SSE 流。

当上游 stream 输出 response.output_text.deltaresponse.completed 等 Responses API 事件时,使用这个包。

createMFUIResponse()

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

Import

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

Signature

ts
function createMFUIResponse(
  source: OpenAIResponsesStreamSource,
  mfui: MFUIManifest,
  options?: OpenAIResponsesMFUIResponseOptions,
): Response

入参

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

返回值

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

示例

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

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

return createMFUIResponse(upstream, mfui);

注意事项

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

OpenAIResponsesStreamSource

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

结构

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

OpenAIResponsesMFUIResponseOptions

createMFUIResponse() 的选项。

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

readStream()

读取 OpenAI Responses SSE 事件,并产出标准化 JSON event。

Import

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

Signature

ts
function readStream(
  source: OpenAIResponsesStreamSource,
): AsyncIterable<OpenAIResponsesStreamEvent>

入参

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

返回值

类型描述
AsyncIterable<OpenAIResponsesStreamEvent>解析后的 provider events。type 优先来自 SSE event name,否则来自 data.type

OpenAIResponsesStreamEvent

writeMFUIStream() 消费的 provider event 结构。

字段类型是否必填默认值描述
typestringProvider event 类型。MFUI 会读取 response.output_text.deltaresponse.completed
deltastringtyperesponse.output_text.delta 时使用的文本增量。
responseRecord<string, unknown>完成后的 response 对象。response.usage.input_tokensresponse.usage.output_tokens 会映射到 MFUI usage。
[key]unknownMFUI 会忽略额外 provider 字段。

writeMFUIStream()

把解析后的 Responses events 写入 MFUI block parser。

Import

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

Signature

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

入参

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

返回值

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

OpenAIResponsesMFUIStreamOptions

writeMFUIStream()pipeMFUIStream() 的选项。

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

pipeMFUIStream()

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

Import

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

Signature

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

入参

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

返回值

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