@copilotkit/aimock 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -0
- package/README.md +2 -1
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/bedrock-converse.cjs +110 -8
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +111 -9
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +141 -4
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +142 -5
- package/dist/bedrock.js.map +1 -1
- package/dist/cohere.cjs +89 -7
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +90 -8
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/fixture-loader.cjs +121 -20
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +121 -20
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-interactions.cjs +97 -60
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +98 -61
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +71 -6
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +72 -7
- package/dist/gemini.js.map +1 -1
- package/dist/grok-video.cjs +834 -0
- package/dist/grok-video.cjs.map +1 -0
- package/dist/grok-video.d.cts +74 -0
- package/dist/grok-video.d.cts.map +1 -0
- package/dist/grok-video.d.ts +74 -0
- package/dist/grok-video.d.ts.map +1 -0
- package/dist/grok-video.js +829 -0
- package/dist/grok-video.js.map +1 -0
- package/dist/helpers.cjs +181 -2
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +33 -3
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +33 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +181 -3
- package/dist/helpers.js.map +1 -1
- package/dist/index.cjs +11 -0
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +4 -2
- package/dist/messages.cjs +99 -10
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +100 -11
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +11 -1
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +8 -1
- package/dist/metrics.js.map +1 -1
- package/dist/ollama.cjs +74 -4
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +75 -5
- package/dist/ollama.js.map +1 -1
- package/dist/openrouter-video.cjs +19 -138
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.d.cts.map +1 -1
- package/dist/openrouter-video.d.ts.map +1 -1
- package/dist/openrouter-video.js +1 -120
- package/dist/openrouter-video.js.map +1 -1
- package/dist/recorder.cjs +12 -9
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.js +12 -9
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +136 -58
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts +2 -2
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +2 -2
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +137 -59
- package/dist/responses.js.map +1 -1
- package/dist/server.cjs +162 -20
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +4 -0
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +164 -22
- package/dist/server.js.map +1 -1
- package/dist/stream-collapse.cjs +300 -74
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +17 -1
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +17 -1
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +300 -74
- package/dist/stream-collapse.js.map +1 -1
- package/dist/types.d.cts +104 -7
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +104 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/veo-video.cjs +794 -0
- package/dist/veo-video.cjs.map +1 -0
- package/dist/veo-video.d.cts +50 -0
- package/dist/veo-video.d.cts.map +1 -0
- package/dist/veo-video.d.ts +50 -0
- package/dist/veo-video.d.ts.map +1 -0
- package/dist/veo-video.js +789 -0
- package/dist/veo-video.js.map +1 -0
- package/dist/video-proxy-shared.cjs +145 -0
- package/dist/video-proxy-shared.cjs.map +1 -0
- package/dist/video-proxy-shared.js +140 -0
- package/dist/video-proxy-shared.js.map +1 -0
- package/dist/ws-gemini-live.cjs +96 -3
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +97 -4
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +281 -4
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +282 -5
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +1 -1
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.js +1 -1
- package/dist/ws-responses.js.map +1 -1
- package/fixtures/examples/llm/blocks-tool-first.json +13 -0
- package/package.json +1 -1
- package/skills/write-fixtures/SKILL.md +19 -1
package/dist/ws-realtime.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_TEST_ID } from "./constants.js";
|
|
2
|
-
import { flattenHeaders, generateToolCallId, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse, resolveResponse, resolveStrictMode, strictNoMatchLogLine, strictNoMatchMessage, strictOverrideField } from "./helpers.js";
|
|
2
|
+
import { flattenHeaders, generateToolCallId, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse, resolveFixtureBlocks, resolveResponse, resolveStrictMode, strictNoMatchLogLine, strictNoMatchMessage, strictOverrideField } from "./helpers.js";
|
|
3
3
|
import "./journal.js";
|
|
4
4
|
import { matchFixtureDiagnostic } from "./router.js";
|
|
5
5
|
import { calculateDelay, delay } from "./sse-writer.js";
|
|
@@ -545,6 +545,10 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
545
545
|
fixture
|
|
546
546
|
}
|
|
547
547
|
});
|
|
548
|
+
if (response.blocks && response.blocks.length > 0) {
|
|
549
|
+
await streamRealtimeBlocks(ws, resolveFixtureBlocks(response.blocks), responseId, fixture, defaults, latency, chunkSize, isBeta, conversationItems, journalEntry);
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
548
552
|
sendEvent(ws, {
|
|
549
553
|
type: "response.created",
|
|
550
554
|
response: {
|
|
@@ -597,7 +601,7 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
597
601
|
text: ""
|
|
598
602
|
}
|
|
599
603
|
}, isBeta);
|
|
600
|
-
const content = response.content;
|
|
604
|
+
const content = response.content ?? "";
|
|
601
605
|
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
602
606
|
const { recordedTimings } = fixture;
|
|
603
607
|
let eventIndex = 0;
|
|
@@ -694,8 +698,9 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
694
698
|
return;
|
|
695
699
|
}
|
|
696
700
|
allOutputItems.push(textOutputItem);
|
|
697
|
-
|
|
698
|
-
|
|
701
|
+
const toolCalls = response.toolCalls ?? [];
|
|
702
|
+
for (let tcIdx = 0; tcIdx < toolCalls.length; tcIdx++) {
|
|
703
|
+
const tc = toolCalls[tcIdx];
|
|
699
704
|
const callId = tc.id ?? generateToolCallId();
|
|
700
705
|
const itemId = realtimeId("item");
|
|
701
706
|
const outputIndex = tcIdx + 1;
|
|
@@ -881,7 +886,7 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
881
886
|
text: ""
|
|
882
887
|
}
|
|
883
888
|
}, isBeta);
|
|
884
|
-
const content = response.content;
|
|
889
|
+
const content = response.content ?? "";
|
|
885
890
|
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
886
891
|
const { recordedTimings } = fixture;
|
|
887
892
|
const interruption = createInterruptionSignal(fixture);
|
|
@@ -1146,6 +1151,278 @@ async function handleResponseCreate(ws, fixtures, journal, defaults, session, co
|
|
|
1146
1151
|
});
|
|
1147
1152
|
buildErrorRealtimeEvent(ws, "Fixture response did not match any known type", isBeta, "server_error");
|
|
1148
1153
|
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Stream a content+toolCalls fixture's ordered `blocks` over the Realtime WS
|
|
1156
|
+
* surface (#274). Each block becomes its own output item, sequenced on the wire
|
|
1157
|
+
* with an incrementing `output_index` so a client observes the blocks in array
|
|
1158
|
+
* order (text and tool-call items can interleave in any order, unlike the
|
|
1159
|
+
* separate channels of chat-completions). Emits the same per-item event shapes
|
|
1160
|
+
* as the legacy text/tool branches; a blocks-only fixture therefore never
|
|
1161
|
+
* produces an empty payload.
|
|
1162
|
+
*/
|
|
1163
|
+
async function streamRealtimeBlocks(ws, blocks, responseId, fixture, defaults, latency, chunkSize, isBeta, conversationItems, journalEntry) {
|
|
1164
|
+
sendEvent(ws, {
|
|
1165
|
+
type: "response.created",
|
|
1166
|
+
response: {
|
|
1167
|
+
id: responseId,
|
|
1168
|
+
object: "realtime.response",
|
|
1169
|
+
status: "in_progress",
|
|
1170
|
+
status_details: null,
|
|
1171
|
+
output: [],
|
|
1172
|
+
usage: null
|
|
1173
|
+
}
|
|
1174
|
+
}, isBeta);
|
|
1175
|
+
const interruption = createInterruptionSignal(fixture);
|
|
1176
|
+
let interrupted = false;
|
|
1177
|
+
const allOutputItems = [];
|
|
1178
|
+
const replaySpeed = fixture.replaySpeed ?? defaults.replaySpeed;
|
|
1179
|
+
const { recordedTimings } = fixture;
|
|
1180
|
+
let eventIndex = 0;
|
|
1181
|
+
const hasToolCalls = blocks.some((b) => b.type === "toolCall");
|
|
1182
|
+
for (let outputIndex = 0; outputIndex < blocks.length; outputIndex++) {
|
|
1183
|
+
if (ws.isClosed || interrupted) break;
|
|
1184
|
+
const block = blocks[outputIndex];
|
|
1185
|
+
if (block.type === "text") {
|
|
1186
|
+
const textItemId = realtimeId("item");
|
|
1187
|
+
const contentIndex = 0;
|
|
1188
|
+
const textPhase = hasToolCalls ? "commentary" : "final_answer";
|
|
1189
|
+
const text = block.text;
|
|
1190
|
+
const textOutputItem = {
|
|
1191
|
+
id: textItemId,
|
|
1192
|
+
type: "message",
|
|
1193
|
+
role: "assistant",
|
|
1194
|
+
status: "completed",
|
|
1195
|
+
content: [{
|
|
1196
|
+
type: "output_text",
|
|
1197
|
+
text
|
|
1198
|
+
}]
|
|
1199
|
+
};
|
|
1200
|
+
sendEvent(ws, {
|
|
1201
|
+
type: "response.output_item.added",
|
|
1202
|
+
response_id: responseId,
|
|
1203
|
+
output_index: outputIndex,
|
|
1204
|
+
item: {
|
|
1205
|
+
id: textItemId,
|
|
1206
|
+
type: "message",
|
|
1207
|
+
role: "assistant",
|
|
1208
|
+
status: "in_progress",
|
|
1209
|
+
content: [],
|
|
1210
|
+
phase: textPhase
|
|
1211
|
+
}
|
|
1212
|
+
}, isBeta);
|
|
1213
|
+
sendEvent(ws, {
|
|
1214
|
+
type: "response.content_part.added",
|
|
1215
|
+
response_id: responseId,
|
|
1216
|
+
item_id: textItemId,
|
|
1217
|
+
output_index: outputIndex,
|
|
1218
|
+
content_index: contentIndex,
|
|
1219
|
+
part: {
|
|
1220
|
+
type: "output_text",
|
|
1221
|
+
text: ""
|
|
1222
|
+
}
|
|
1223
|
+
}, isBeta);
|
|
1224
|
+
for (let i = 0; i < text.length; i += chunkSize) {
|
|
1225
|
+
if (ws.isClosed) break;
|
|
1226
|
+
const chunkDelay = calculateDelay(eventIndex, void 0, latency, recordedTimings, replaySpeed);
|
|
1227
|
+
if (chunkDelay > 0) await delay(chunkDelay, interruption?.signal);
|
|
1228
|
+
if (interruption?.signal.aborted) {
|
|
1229
|
+
interrupted = true;
|
|
1230
|
+
break;
|
|
1231
|
+
}
|
|
1232
|
+
if (ws.isClosed) break;
|
|
1233
|
+
const chunk = text.slice(i, i + chunkSize);
|
|
1234
|
+
try {
|
|
1235
|
+
sendEvent(ws, {
|
|
1236
|
+
type: "response.output_text.delta",
|
|
1237
|
+
response_id: responseId,
|
|
1238
|
+
item_id: textItemId,
|
|
1239
|
+
output_index: outputIndex,
|
|
1240
|
+
content_index: contentIndex,
|
|
1241
|
+
delta: chunk
|
|
1242
|
+
}, isBeta);
|
|
1243
|
+
} catch (err) {
|
|
1244
|
+
defaults.logger.debug("[ws-realtime] send failed during block text streaming, closing", err);
|
|
1245
|
+
break;
|
|
1246
|
+
}
|
|
1247
|
+
eventIndex++;
|
|
1248
|
+
interruption?.tick();
|
|
1249
|
+
if (interruption?.signal.aborted) {
|
|
1250
|
+
interrupted = true;
|
|
1251
|
+
break;
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
if (interrupted || ws.isClosed) break;
|
|
1255
|
+
sendEvent(ws, {
|
|
1256
|
+
type: "response.output_text.done",
|
|
1257
|
+
response_id: responseId,
|
|
1258
|
+
item_id: textItemId,
|
|
1259
|
+
output_index: outputIndex,
|
|
1260
|
+
content_index: contentIndex,
|
|
1261
|
+
text
|
|
1262
|
+
}, isBeta);
|
|
1263
|
+
if (ws.isClosed) break;
|
|
1264
|
+
sendEvent(ws, {
|
|
1265
|
+
type: "response.content_part.done",
|
|
1266
|
+
response_id: responseId,
|
|
1267
|
+
item_id: textItemId,
|
|
1268
|
+
output_index: outputIndex,
|
|
1269
|
+
content_index: contentIndex,
|
|
1270
|
+
part: {
|
|
1271
|
+
type: "output_text",
|
|
1272
|
+
text
|
|
1273
|
+
}
|
|
1274
|
+
}, isBeta);
|
|
1275
|
+
if (ws.isClosed) break;
|
|
1276
|
+
sendEvent(ws, {
|
|
1277
|
+
type: "response.output_item.done",
|
|
1278
|
+
response_id: responseId,
|
|
1279
|
+
output_index: outputIndex,
|
|
1280
|
+
item: {
|
|
1281
|
+
...textOutputItem,
|
|
1282
|
+
phase: textPhase
|
|
1283
|
+
}
|
|
1284
|
+
}, isBeta);
|
|
1285
|
+
sendEvent(ws, {
|
|
1286
|
+
type: "conversation.item.done",
|
|
1287
|
+
item: {
|
|
1288
|
+
id: textItemId,
|
|
1289
|
+
object: "realtime.item",
|
|
1290
|
+
type: "message",
|
|
1291
|
+
role: "assistant",
|
|
1292
|
+
status: "completed",
|
|
1293
|
+
content: textOutputItem.content
|
|
1294
|
+
}
|
|
1295
|
+
}, isBeta);
|
|
1296
|
+
if (ws.isClosed) break;
|
|
1297
|
+
allOutputItems.push(textOutputItem);
|
|
1298
|
+
} else {
|
|
1299
|
+
const callId = block.id ?? generateToolCallId();
|
|
1300
|
+
const itemId = realtimeId("item");
|
|
1301
|
+
const args = block.arguments;
|
|
1302
|
+
const toolOutputItem = {
|
|
1303
|
+
id: itemId,
|
|
1304
|
+
type: "function_call",
|
|
1305
|
+
status: "completed",
|
|
1306
|
+
call_id: callId,
|
|
1307
|
+
name: block.name,
|
|
1308
|
+
arguments: args
|
|
1309
|
+
};
|
|
1310
|
+
sendEvent(ws, {
|
|
1311
|
+
type: "response.output_item.added",
|
|
1312
|
+
response_id: responseId,
|
|
1313
|
+
output_index: outputIndex,
|
|
1314
|
+
item: {
|
|
1315
|
+
id: itemId,
|
|
1316
|
+
type: "function_call",
|
|
1317
|
+
status: "in_progress",
|
|
1318
|
+
call_id: callId,
|
|
1319
|
+
name: block.name,
|
|
1320
|
+
arguments: "",
|
|
1321
|
+
phase: "final_answer"
|
|
1322
|
+
}
|
|
1323
|
+
}, isBeta);
|
|
1324
|
+
for (let i = 0; i < args.length; i += chunkSize) {
|
|
1325
|
+
if (ws.isClosed) break;
|
|
1326
|
+
const chunkDelay = calculateDelay(eventIndex, void 0, latency, recordedTimings, replaySpeed);
|
|
1327
|
+
if (chunkDelay > 0) await delay(chunkDelay, interruption?.signal);
|
|
1328
|
+
if (interruption?.signal.aborted) {
|
|
1329
|
+
interrupted = true;
|
|
1330
|
+
break;
|
|
1331
|
+
}
|
|
1332
|
+
if (ws.isClosed) break;
|
|
1333
|
+
const chunk = args.slice(i, i + chunkSize);
|
|
1334
|
+
try {
|
|
1335
|
+
sendEvent(ws, {
|
|
1336
|
+
type: "response.function_call_arguments.delta",
|
|
1337
|
+
response_id: responseId,
|
|
1338
|
+
item_id: itemId,
|
|
1339
|
+
output_index: outputIndex,
|
|
1340
|
+
call_id: callId,
|
|
1341
|
+
delta: chunk
|
|
1342
|
+
}, isBeta);
|
|
1343
|
+
} catch (err) {
|
|
1344
|
+
defaults.logger.debug("[ws-realtime] send failed during block tool call streaming, closing", err);
|
|
1345
|
+
break;
|
|
1346
|
+
}
|
|
1347
|
+
eventIndex++;
|
|
1348
|
+
interruption?.tick();
|
|
1349
|
+
if (interruption?.signal.aborted) {
|
|
1350
|
+
interrupted = true;
|
|
1351
|
+
break;
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
if (interrupted || ws.isClosed) break;
|
|
1355
|
+
sendEvent(ws, {
|
|
1356
|
+
type: "response.function_call_arguments.done",
|
|
1357
|
+
response_id: responseId,
|
|
1358
|
+
item_id: itemId,
|
|
1359
|
+
output_index: outputIndex,
|
|
1360
|
+
call_id: callId,
|
|
1361
|
+
arguments: args
|
|
1362
|
+
}, isBeta);
|
|
1363
|
+
if (ws.isClosed) break;
|
|
1364
|
+
sendEvent(ws, {
|
|
1365
|
+
type: "response.output_item.done",
|
|
1366
|
+
response_id: responseId,
|
|
1367
|
+
output_index: outputIndex,
|
|
1368
|
+
item: {
|
|
1369
|
+
...toolOutputItem,
|
|
1370
|
+
phase: "final_answer"
|
|
1371
|
+
}
|
|
1372
|
+
}, isBeta);
|
|
1373
|
+
sendEvent(ws, {
|
|
1374
|
+
type: "conversation.item.done",
|
|
1375
|
+
item: {
|
|
1376
|
+
id: itemId,
|
|
1377
|
+
object: "realtime.item",
|
|
1378
|
+
type: "function_call",
|
|
1379
|
+
status: "completed",
|
|
1380
|
+
call_id: callId,
|
|
1381
|
+
name: block.name,
|
|
1382
|
+
arguments: args
|
|
1383
|
+
}
|
|
1384
|
+
}, isBeta);
|
|
1385
|
+
if (ws.isClosed) break;
|
|
1386
|
+
allOutputItems.push(toolOutputItem);
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
if (interrupted) {
|
|
1390
|
+
ws.destroy();
|
|
1391
|
+
journalEntry.response.interrupted = true;
|
|
1392
|
+
journalEntry.response.interruptReason = interruption?.reason();
|
|
1393
|
+
interruption?.cleanup();
|
|
1394
|
+
return;
|
|
1395
|
+
}
|
|
1396
|
+
interruption?.cleanup();
|
|
1397
|
+
if (ws.isClosed) return;
|
|
1398
|
+
sendEvent(ws, {
|
|
1399
|
+
type: "response.done",
|
|
1400
|
+
response: {
|
|
1401
|
+
id: responseId,
|
|
1402
|
+
object: "realtime.response",
|
|
1403
|
+
status: "completed",
|
|
1404
|
+
output: allOutputItems,
|
|
1405
|
+
usage: {
|
|
1406
|
+
total_tokens: 0,
|
|
1407
|
+
input_tokens: 0,
|
|
1408
|
+
output_tokens: 0
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
}, isBeta);
|
|
1412
|
+
for (const item of allOutputItems) {
|
|
1413
|
+
const it = item;
|
|
1414
|
+
if (it.type === "message") conversationItems.push({
|
|
1415
|
+
type: "message",
|
|
1416
|
+
id: it.id,
|
|
1417
|
+
role: "assistant",
|
|
1418
|
+
content: [{
|
|
1419
|
+
type: "text",
|
|
1420
|
+
text: it.content?.[0]?.text ?? ""
|
|
1421
|
+
}]
|
|
1422
|
+
});
|
|
1423
|
+
else conversationItems.push(item);
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1149
1426
|
|
|
1150
1427
|
//#endregion
|
|
1151
1428
|
export { handleWebSocketRealtime };
|