1
1
import type { OpenAiClient } from '@sentry/core' ;
2
2
3
3
export class MockOpenAi implements OpenAiClient {
4
- public chat : Record < string , unknown > ;
5
- public responses : {
6
- create : ( ...args : unknown [ ] ) => Promise < unknown > ;
7
- } ;
8
-
4
+ public chat ?: Record < string , unknown > ;
9
5
public apiKey : string ;
10
6
11
7
public constructor ( config : { apiKey : string } ) {
@@ -25,11 +21,6 @@ export class MockOpenAi implements OpenAiClient {
25
21
throw error ;
26
22
}
27
23
28
- // If stream is requested, return an async generator
29
- if ( params . stream ) {
30
- return this . createChatCompletionStream ( params ) ;
31
- }
32
-
33
24
return {
34
25
id : 'chatcmpl-mock123' ,
35
26
object : 'chat.completion' ,
@@ -55,191 +46,5 @@ export class MockOpenAi implements OpenAiClient {
55
46
} ,
56
47
} ,
57
48
} ;
58
-
59
- this . responses = {
60
- create : async ( ...args : unknown [ ] ) => {
61
- const params = args [ 0 ] as { model : string ; input : string ; instructions : string ; stream ?: boolean } ;
62
- await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
63
-
64
- // If stream is requested, return an async generator
65
- if ( params . stream ) {
66
- return this . createResponsesApiStream ( params ) ;
67
- }
68
-
69
- return {
70
- id : 'resp_mock456' ,
71
- object : 'response' ,
72
- created_at : 1677652290 ,
73
- model : params . model ,
74
- input_text : params . input ,
75
- output_text : `Response to: ${ params . input } ` ,
76
- status : 'completed' ,
77
- usage : {
78
- input_tokens : 5 ,
79
- output_tokens : 8 ,
80
- total_tokens : 13 ,
81
- } ,
82
- } ;
83
- } ,
84
- } ;
85
- }
86
-
87
- // Create a mock streaming response for chat completions
88
- public async * createChatCompletionStream ( params : { model : string } ) : AsyncGenerator < unknown > {
89
- // First chunk with basic info
90
- yield {
91
- id : 'chatcmpl-stream-123' ,
92
- object : 'chat.completion.chunk' ,
93
- created : 1677652300 ,
94
- model : params . model ,
95
- system_fingerprint : 'fp_stream_123' ,
96
- choices : [
97
- {
98
- index : 0 ,
99
- delta : {
100
- role : 'assistant' ,
101
- content : 'Hello' ,
102
- } ,
103
- finish_reason : null ,
104
- } ,
105
- ] ,
106
- } ;
107
-
108
- // Second chunk with more content
109
- yield {
110
- id : 'chatcmpl-stream-123' ,
111
- object : 'chat.completion.chunk' ,
112
- created : 1677652300 ,
113
- model : params . model ,
114
- system_fingerprint : 'fp_stream_123' ,
115
- choices : [
116
- {
117
- index : 0 ,
118
- delta : {
119
- content : ' from OpenAI streaming!' ,
120
- } ,
121
- finish_reason : 'stop' ,
122
- } ,
123
- ] ,
124
- usage : {
125
- prompt_tokens : 12 ,
126
- completion_tokens : 18 ,
127
- total_tokens : 30 ,
128
- completion_tokens_details : {
129
- accepted_prediction_tokens : 0 ,
130
- audio_tokens : 0 ,
131
- reasoning_tokens : 0 ,
132
- rejected_prediction_tokens : 0 ,
133
- } ,
134
- prompt_tokens_details : {
135
- audio_tokens : 0 ,
136
- cached_tokens : 0 ,
137
- } ,
138
- } ,
139
- } ;
140
- }
141
-
142
- // Create a mock streaming response for responses API
143
- public async * createResponsesApiStream ( params : {
144
- model : string ;
145
- input : string ;
146
- instructions : string ;
147
- } ) : AsyncGenerator < unknown > {
148
- // Response created event
149
- yield {
150
- type : 'response.created' ,
151
- response : {
152
- id : 'resp_stream_456' ,
153
- object : 'response' ,
154
- created_at : 1677652310 ,
155
- model : params . model ,
156
- status : 'in_progress' ,
157
- error : null ,
158
- incomplete_details : null ,
159
- instructions : params . instructions ,
160
- max_output_tokens : 1000 ,
161
- parallel_tool_calls : false ,
162
- previous_response_id : null ,
163
- reasoning : {
164
- effort : null ,
165
- summary : null ,
166
- } ,
167
- store : false ,
168
- temperature : 0.7 ,
169
- text : {
170
- format : {
171
- type : 'text' ,
172
- } ,
173
- } ,
174
- tool_choice : 'auto' ,
175
- top_p : 1.0 ,
176
- truncation : 'disabled' ,
177
- user : null ,
178
- metadata : { } ,
179
- output : [ ] ,
180
- output_text : '' ,
181
- usage : {
182
- input_tokens : 0 ,
183
- output_tokens : 0 ,
184
- total_tokens : 0 ,
185
- } ,
186
- } ,
187
- sequence_number : 1 ,
188
- } ;
189
-
190
- // Response in progress with output text delta
191
- yield {
192
- type : 'response.output_text.delta' ,
193
- delta : 'Streaming response to: ' ,
194
- sequence_number : 2 ,
195
- } ;
196
-
197
- yield {
198
- type : 'response.output_text.delta' ,
199
- delta : params . input ,
200
- sequence_number : 3 ,
201
- } ;
202
-
203
- // Response completed event
204
- yield {
205
- type : 'response.completed' ,
206
- response : {
207
- id : 'resp_stream_456' ,
208
- object : 'response' ,
209
- created_at : 1677652310 ,
210
- model : params . model ,
211
- status : 'completed' ,
212
- error : null ,
213
- incomplete_details : null ,
214
- instructions : params . instructions ,
215
- max_output_tokens : 1000 ,
216
- parallel_tool_calls : false ,
217
- previous_response_id : null ,
218
- reasoning : {
219
- effort : null ,
220
- summary : null ,
221
- } ,
222
- store : false ,
223
- temperature : 0.7 ,
224
- text : {
225
- format : {
226
- type : 'text' ,
227
- } ,
228
- } ,
229
- tool_choice : 'auto' ,
230
- top_p : 1.0 ,
231
- truncation : 'disabled' ,
232
- user : null ,
233
- metadata : { } ,
234
- output : [ ] ,
235
- output_text : params . input ,
236
- usage : {
237
- input_tokens : 6 ,
238
- output_tokens : 10 ,
239
- total_tokens : 16 ,
240
- } ,
241
- } ,
242
- sequence_number : 4 ,
243
- } ;
244
49
}
245
50
}
0 commit comments