11import { Router , Request , Response } from 'express' ;
22import { type Config } from '@google/gemini-cli-core' ;
33import { createOpenAIStreamTransformer } from './stream-transformer.js' ;
4- import { WritableStream } from 'node:stream/web' ;
54import { GeminiApiClient } from '../gemini-client.js' ; // <-- 引入新类
65import { type OpenAIChatCompletionRequest } from '../types.js' ; // <-- 引入新类型
76
@@ -44,15 +43,10 @@ export function createOpenAIRouter(config: Config, debugMode = false): Router {
4443 tool_choice : body . tool_choice ,
4544 } ) ;
4645
47- // 3. 创建转换器和写入器
4846 const openAIStream = createOpenAIStreamTransformer ( body . model , debugMode ) ;
49- const writer = new WritableStream ( {
50- write ( chunk ) {
51- res . write ( chunk ) ;
52- } ,
53- } ) ;
5447
55- // 4. 创建 ReadableStream 并通过管道连接
48+ // --- 修正的核心逻辑 ---
49+ // 1. 创建一个 ReadableStream 来包装我们的 Gemini 事件流
5650 const readableStream = new ReadableStream ( {
5751 async start ( controller ) {
5852 for await ( const value of geminiStream ) {
@@ -62,7 +56,24 @@ export function createOpenAIRouter(config: Config, debugMode = false): Router {
6256 } ,
6357 } ) ;
6458
65- await readableStream . pipeThrough ( openAIStream ) . pipeTo ( writer ) ;
59+ // 2. 将我们的流通过转换器
60+ const transformedStream = readableStream . pipeThrough ( openAIStream ) ;
61+ const reader = transformedStream . getReader ( ) ;
62+
63+ // 3. 手动读取每个转换后的块并立即写入响应
64+ try {
65+ while ( true ) {
66+ const { done, value } = await reader . read ( ) ;
67+ if ( done ) {
68+ break ;
69+ }
70+ res . write ( value ) ;
71+ }
72+ } finally {
73+ reader . releaseLock ( ) ;
74+ }
75+ // --- 修正结束 ---
76+
6677 res . end ( ) ;
6778 } catch ( error ) {
6879 console . error ( '[OpenAI Bridge] Error:' , error ) ;
0 commit comments