/** * Stream Convert — 流式 SSE 格式转换核心工具集 * * 处理 Anthropic Messages SSE ↔ OpenAI Chat Completions SSE 之间的双向实时转换, * 以及 OpenAI Chat SSE → Responses API SSE 的转换。 */ import { Response } from 'express'; import OpenAI from 'openai'; import type { MessageStreamEvent } from '@anthropic-ai/sdk/resources/messages/messages'; import { type AIProvider, type ChatCallParams } from './model-provider'; /** 写入标准 SSE data 行 */ export declare function writeSSE(res: Response, data: unknown): void; /** 写入命名 SSE 事件(event + data) */ export declare function writeSSEEvent(res: Response, event: string, data: unknown): void; /** * Anthropic MessageStreamEvent → OpenAI Chat Completion Chunk 转换器 * * 维护内部状态以正确处理: * - content_block_start → 初始 chunk 或 tool_calls 开始 * - content_block_delta → text_delta / input_json_delta / thinking_delta * - content_block_stop → 内容块结束 * - message_delta → finish_reason + usage * - message_start → 首 chunk(角色信息) * - 多 tool call 索引跟踪 */ export declare class AnthropicStreamConverter { private completionId; private modelName; private toolCallIndex; /** 跟踪每个内容块的类型和索引 */ private contentBlocks; private nextBlockIndex; /** 文本内容收集(用于估算 token) */ textContent: string; hasToolCalls: boolean; usage: { input_tokens?: number; output_tokens?: number; } | null; constructor(modelName?: string); /** 处理单个 Anthropic 流事件,返回 OpenAI chunk 或 null(跳过) */ processEvent(event: MessageStreamEvent): Record | null; /** 获取此 completion 的 ID */ getCompletionId(): string; private _mapStopReason; /** 根据内容块索引计算 tool call 索引 */ private _getToolCallIndex; } /** * 直接处理 OpenAI Chat SSE 流 * 转发原始 ChatCompletionChunk,收集 usage 和 token 统计 */ export declare function processChatStream(stream: AsyncIterable, res: Response, modelName: string, options?: { modelId?: number; promptTokens?: number; }): Promise; /** * Anthropic 流 → OpenAI Chat SSE 转换 + 写入 */ export declare function processAnthropicStream(provider: AIProvider, params: ChatCallParams, res: Response, options?: { modelId?: number; promptTokens?: number; }): Promise; /** * OpenAI Responses SDK 流 → Responses API SSE 事件 * * 处理原生 Responses API 的 stream,直接转发 Response Stream Events */ export declare function processOpenAIResponsesStream(provider: AIProvider, params: ChatCallParams, _originalBody: Record, res: Response, options?: { modelId?: number; }): Promise; /** * OpenAI Chat SSE → Responses API SSE 转换 * * 将 Chat Completions 流式 chunk 转换为 Responses API 的 SSE 事件序列。 * 修复了原实现中 tool_calls 被跳过的 TODO。 */ export declare function streamChatAsResponses(stream: AsyncIterable, res: Response, modelName: string, options?: { modelId?: number; promptTokens?: number; }): Promise; /** * OpenAI Chat SSE → Anthropic Messages SSE 转换 * * 将 Chat Completions 流式 chunk 实时转换为 Anthropic SSE 事件序列, * 供 /v1/messages?stream=true 端点使用。 * * Anthropic SSE 事件序列: * message_start → content_block_start (text) → content_block_delta (text_delta) * → content_block_start (tool_use) → content_block_delta (input_json_delta) * → content_block_stop → message_delta (stop_reason + usage) → message_stop */ export declare function streamChatAsAnthropicSSE(stream: AsyncIterable, res: Response, modelName: string, promptTokens?: number, modelId?: number): Promise; //# sourceMappingURL=stream-convert.d.ts.map