@@ -19,7 +19,6 @@ import {
19
19
randomChoice ,
20
20
formatErrorResponse
21
21
} from '../utils/helpers' ;
22
-
23
22
/**
24
23
* Get model list
25
24
*/
@@ -59,7 +58,7 @@ export function createChatCompletion(request: ChatCompletionRequest): ChatComple
59
58
60
59
// Select test case
61
60
const testCase = selectTestCase ( model , lastUserMessage . content || '' ) ;
62
-
61
+
63
62
const id = generateChatCompletionId ( ) ;
64
63
const timestamp = getCurrentTimestamp ( ) ;
65
64
@@ -147,7 +146,7 @@ export function* createChatCompletionStream(request: ChatCompletionRequest): Gen
147
146
148
147
// Select test case
149
148
const testCase = selectTestCase ( model , lastUserMessage . content || '' ) ;
150
-
149
+
151
150
const id = generateChatCompletionId ( ) ;
152
151
const timestamp = getCurrentTimestamp ( ) ;
153
152
const systemFingerprint = `fp_${ Math . random ( ) . toString ( 36 ) . substr ( 2 , 10 ) } _prod0425fp8` ;
@@ -158,7 +157,7 @@ export function* createChatCompletionStream(request: ChatCompletionRequest): Gen
158
157
// Handle tool calls first (tool-calls model type)
159
158
if ( model . type === 'tool-calls' && testCase . toolCall ) {
160
159
// 第一阶段:发送tool call
161
-
160
+
162
161
// Send first chunk - role and empty content
163
162
const firstChunk : ChatCompletionStreamChunk = {
164
163
id,
@@ -269,7 +268,7 @@ export function* createChatCompletionStream(request: ChatCompletionRequest): Gen
269
268
270
269
if ( model . type === 'thinking' ) {
271
270
// Thinking mode: output reasoning_content first, then content
272
-
271
+
273
272
// Send first chunk - role and empty reasoning_content
274
273
const firstChunk : ChatCompletionStreamChunk = {
275
274
id,
@@ -613,8 +612,8 @@ export function* createChatCompletionStream(request: ChatCompletionRequest): Gen
613
612
* 这个函数处理tool call执行后的第二阶段流式响应
614
613
*/
615
614
export function * createToolCallResponseStream (
616
- request : ChatCompletionRequest ,
617
- toolCallId : string ,
615
+ request : ChatCompletionRequest ,
616
+ toolCallId : string ,
618
617
toolResult : string
619
618
) : Generator < string , void , unknown > {
620
619
// Validate model
@@ -639,7 +638,7 @@ export function* createToolCallResponseStream(
639
638
640
639
// Select test case
641
640
const testCase = selectTestCase ( model , lastUserMessage . content || '' ) ;
642
-
641
+
643
642
const id = generateChatCompletionId ( ) ;
644
643
const timestamp = getCurrentTimestamp ( ) ;
645
644
const systemFingerprint = `fp_${ Math . random ( ) . toString ( 36 ) . substr ( 2 , 10 ) } _prod0425fp8` ;
@@ -756,11 +755,11 @@ export function generateImage(request: ImageGenerationRequest): ImageGenerationR
756
755
const n = request . n || 1 ;
757
756
const timestamp = getCurrentTimestamp ( ) ;
758
757
const size = request . size || '1024x1024' ;
759
-
758
+
760
759
// Choose different images based on model
761
760
const model = request . model || 'gpt-4o-image' ;
762
761
let imageUrls = mockImageUrls ;
763
-
762
+
764
763
// If gpt-4o-image model is specified, use higher quality placeholder images
765
764
if ( model === 'gpt-4o-image' ) {
766
765
imageUrls = [
@@ -774,14 +773,14 @@ export function generateImage(request: ImageGenerationRequest): ImageGenerationR
774
773
`https://placehold.co/${ size } /FFA07A/000000?text=GPT-4O+Image+8`
775
774
] ;
776
775
}
777
-
776
+
778
777
const data = Array . from ( { length : n } , ( ) => {
779
778
const imageUrl = randomChoice ( imageUrls ) ;
780
-
779
+
781
780
if ( request . response_format === 'b64_json' ) {
782
781
// Simulate base64 encoded image (in actual applications this would be real base64)
783
782
return {
784
- b64_json : 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='
783
+ b64_json : 'data:image/png;base64,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'
785
784
} ;
786
785
} else {
787
786
return {
0 commit comments