@bolt-foundry/gambit-core 0.7.0 → 0.8.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/README.md +228 -0
- package/cards/context.card.md +9 -0
- package/cards/end.card.md +10 -0
- package/cards/respond.card.md +10 -0
- package/esm/_dnt.polyfills.d.ts +99 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +127 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/esm/mod.d.ts +26 -2
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +0 -2
- package/esm/src/builtins.d.ts +3 -0
- package/esm/src/builtins.d.ts.map +1 -0
- package/esm/src/builtins.js +26 -0
- package/esm/src/loader.d.ts.map +1 -1
- package/esm/src/loader.js +6 -3
- package/esm/src/markdown.d.ts.map +1 -1
- package/esm/src/markdown.js +25 -4
- package/esm/src/openai_compat.d.ts.map +1 -1
- package/esm/src/openai_compat.js +92 -25
- package/esm/src/openresponses.d.ts +6 -0
- package/esm/src/openresponses.d.ts.map +1 -0
- package/esm/src/openresponses.js +75 -0
- package/esm/src/runtime.d.ts.map +1 -1
- package/esm/src/runtime.js +139 -35
- package/esm/src/state.d.ts +4 -3
- package/esm/src/state.d.ts.map +1 -1
- package/esm/src/types.d.ts +306 -33
- package/esm/src/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/schemas/graders/contexts/conversation.ts +17 -0
- package/schemas/graders/contexts/turn.ts +10 -0
- package/schemas/graders/respond.ts +9 -0
- package/script/_dnt.polyfills.d.ts +99 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +128 -0
- package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/script/mod.d.ts +26 -2
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +1 -4
- package/script/src/builtins.d.ts +3 -0
- package/script/src/builtins.d.ts.map +1 -0
- package/script/src/builtins.js +63 -0
- package/script/src/loader.d.ts.map +1 -1
- package/script/src/loader.js +6 -3
- package/script/src/markdown.d.ts.map +1 -1
- package/script/src/markdown.js +25 -4
- package/script/src/openai_compat.d.ts.map +1 -1
- package/script/src/openai_compat.js +92 -25
- package/script/src/openresponses.d.ts +6 -0
- package/script/src/openresponses.d.ts.map +1 -0
- package/script/src/openresponses.js +81 -0
- package/script/src/runtime.d.ts.map +1 -1
- package/script/src/runtime.js +139 -35
- package/script/src/state.d.ts +4 -3
- package/script/src/state.d.ts.map +1 -1
- package/script/src/types.d.ts +306 -33
- package/script/src/types.d.ts.map +1 -1
- package/esm/src/providers/openrouter.d.ts +0 -8
- package/esm/src/providers/openrouter.d.ts.map +0 -1
- package/esm/src/providers/openrouter.js +0 -168
- package/script/src/providers/openrouter.d.ts +0 -8
- package/script/src/providers/openrouter.d.ts.map +0 -1
- package/script/src/providers/openrouter.js +0 -207
package/esm/src/runtime.js
CHANGED
|
@@ -156,7 +156,8 @@ function extractInitInput(state) {
|
|
|
156
156
|
return undefined;
|
|
157
157
|
for (let i = state.messages.length - 1; i >= 0; i--) {
|
|
158
158
|
const msg = state.messages[i];
|
|
159
|
-
if (msg.
|
|
159
|
+
if (msg.type === "message" && msg.role === "tool" &&
|
|
160
|
+
msg.name === GAMBIT_TOOL_INIT) {
|
|
160
161
|
const content = msg.content;
|
|
161
162
|
if (typeof content !== "string")
|
|
162
163
|
return undefined;
|
|
@@ -280,7 +281,10 @@ async function runLlmDeck(ctx) {
|
|
|
280
281
|
const systemPrompt = buildSystemPrompt(deck);
|
|
281
282
|
const refToolCallId = randomId("call");
|
|
282
283
|
const messages = ctx.state?.messages
|
|
283
|
-
? ctx.state.messages
|
|
284
|
+
? ctx.state.messages
|
|
285
|
+
.map(coerceToMessageItem)
|
|
286
|
+
.filter((item) => item !== null)
|
|
287
|
+
.map(sanitizeMessageItem)
|
|
284
288
|
: [];
|
|
285
289
|
const resumed = messages.length > 0;
|
|
286
290
|
const sendInit = Boolean(inputProvided) && input !== undefined && !resumed;
|
|
@@ -297,7 +301,7 @@ async function runLlmDeck(ctx) {
|
|
|
297
301
|
trace: ctx.trace,
|
|
298
302
|
stream: ctx.stream,
|
|
299
303
|
onStreamText: ctx.onStreamText,
|
|
300
|
-
pushMessages: (msgs) => messages.push(...msgs.map(
|
|
304
|
+
pushMessages: (msgs) => messages.push(...msgs.map(sanitizeMessageItem)),
|
|
301
305
|
});
|
|
302
306
|
let streamingBuffer = "";
|
|
303
307
|
let streamingCommitted = false;
|
|
@@ -309,7 +313,11 @@ async function runLlmDeck(ctx) {
|
|
|
309
313
|
ctx.onStreamText?.(chunk);
|
|
310
314
|
};
|
|
311
315
|
if (!resumed) {
|
|
312
|
-
messages.push(
|
|
316
|
+
messages.push(sanitizeMessageItem({
|
|
317
|
+
type: "message",
|
|
318
|
+
role: "system",
|
|
319
|
+
content: systemPrompt,
|
|
320
|
+
}));
|
|
313
321
|
if (sendInit) {
|
|
314
322
|
ctx.trace?.({
|
|
315
323
|
type: "tool.call",
|
|
@@ -319,7 +327,8 @@ async function runLlmDeck(ctx) {
|
|
|
319
327
|
args: {},
|
|
320
328
|
parentActionCallId: actionCallId,
|
|
321
329
|
});
|
|
322
|
-
messages.push(
|
|
330
|
+
messages.push(sanitizeMessageItem({
|
|
331
|
+
type: "message",
|
|
323
332
|
role: "assistant",
|
|
324
333
|
content: null,
|
|
325
334
|
tool_calls: [{
|
|
@@ -330,7 +339,8 @@ async function runLlmDeck(ctx) {
|
|
|
330
339
|
arguments: "{}",
|
|
331
340
|
},
|
|
332
341
|
}],
|
|
333
|
-
}),
|
|
342
|
+
}), sanitizeMessageItem({
|
|
343
|
+
type: "message",
|
|
334
344
|
role: "tool",
|
|
335
345
|
name: GAMBIT_TOOL_INIT,
|
|
336
346
|
tool_call_id: refToolCallId,
|
|
@@ -347,7 +357,8 @@ async function runLlmDeck(ctx) {
|
|
|
347
357
|
}
|
|
348
358
|
}
|
|
349
359
|
if (initialUserMessage !== undefined) {
|
|
350
|
-
const userMessage =
|
|
360
|
+
const userMessage = sanitizeMessageItem({
|
|
361
|
+
type: "message",
|
|
351
362
|
role: "user",
|
|
352
363
|
content: formatInputForUser(initialUserMessage),
|
|
353
364
|
});
|
|
@@ -395,44 +406,65 @@ async function runLlmDeck(ctx) {
|
|
|
395
406
|
stream: ctx.stream,
|
|
396
407
|
messageCount: messages.length,
|
|
397
408
|
toolCount: tools.length,
|
|
398
|
-
messages: messages.map(
|
|
409
|
+
messages: messages.map(sanitizeMessageItem),
|
|
399
410
|
tools,
|
|
400
411
|
stateMessages,
|
|
401
412
|
parentActionCallId: ctx.parentActionCallId,
|
|
402
413
|
});
|
|
403
|
-
const result = await modelProvider.
|
|
414
|
+
const result = await modelProvider.responses({
|
|
404
415
|
model,
|
|
405
|
-
messages,
|
|
416
|
+
input: messages,
|
|
406
417
|
tools,
|
|
407
418
|
stream: ctx.stream,
|
|
408
419
|
state: ctx.state,
|
|
409
420
|
params: toProviderParams(deck.modelParams),
|
|
410
|
-
|
|
411
|
-
?
|
|
421
|
+
onStreamEvent: (ctx.onStreamText || deck.handlers?.onIdle)
|
|
422
|
+
? (event) => {
|
|
423
|
+
switch (event.type) {
|
|
424
|
+
case "response.output_text.delta":
|
|
425
|
+
wrappedOnStreamText(event.delta);
|
|
426
|
+
break;
|
|
427
|
+
case "response.refusal.delta":
|
|
428
|
+
if (event.delta)
|
|
429
|
+
wrappedOnStreamText(event.delta);
|
|
430
|
+
break;
|
|
431
|
+
case "response.refusal.done":
|
|
432
|
+
if (event.refusal)
|
|
433
|
+
wrappedOnStreamText(event.refusal);
|
|
434
|
+
break;
|
|
435
|
+
default:
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
412
439
|
: undefined,
|
|
413
440
|
});
|
|
414
441
|
idleController.touch();
|
|
415
|
-
const message = result.
|
|
442
|
+
const message = messageItemFromResponse(result.output);
|
|
443
|
+
const toolCalls = extractToolCalls(result.output, message);
|
|
416
444
|
ctx.trace?.({
|
|
417
445
|
type: "model.result",
|
|
418
446
|
runId,
|
|
419
447
|
actionCallId,
|
|
420
448
|
deckPath: deck.path,
|
|
421
449
|
model,
|
|
422
|
-
finishReason: result.finishReason,
|
|
423
|
-
message:
|
|
424
|
-
toolCalls
|
|
450
|
+
finishReason: result.finishReason ?? "stop",
|
|
451
|
+
message: sanitizeMessageItem(message),
|
|
452
|
+
toolCalls,
|
|
425
453
|
stateMessages: result.updatedState?.messages?.length,
|
|
426
454
|
parentActionCallId: ctx.parentActionCallId,
|
|
427
455
|
});
|
|
428
456
|
const computeState = (updated) => {
|
|
429
457
|
const base = updated ??
|
|
430
|
-
{ runId, messages: messages.map(
|
|
458
|
+
{ runId, messages: messages.map(sanitizeMessageItem) };
|
|
431
459
|
const mergedMessages = base.messages && base.messages.length > 0
|
|
432
|
-
? base.messages
|
|
433
|
-
: messages.map(
|
|
460
|
+
? sanitizeResponseItems(base.messages)
|
|
461
|
+
: messages.map(sanitizeMessageItem);
|
|
434
462
|
const priorRefs = updated?.messageRefs ?? ctx.state?.messageRefs ?? [];
|
|
435
|
-
const messageRefs = mergedMessages.map((m, idx) => priorRefs[idx] ?? {
|
|
463
|
+
const messageRefs = mergedMessages.map((m, idx) => priorRefs[idx] ?? {
|
|
464
|
+
id: randomId("msg"),
|
|
465
|
+
type: m.type,
|
|
466
|
+
role: m.type === "message" ? m.role : undefined,
|
|
467
|
+
});
|
|
436
468
|
const feedback = updated?.feedback ?? ctx.state?.feedback;
|
|
437
469
|
const traces = updated?.traces ?? ctx.state?.traces;
|
|
438
470
|
return {
|
|
@@ -444,16 +476,20 @@ async function runLlmDeck(ctx) {
|
|
|
444
476
|
traces,
|
|
445
477
|
};
|
|
446
478
|
};
|
|
447
|
-
if (
|
|
479
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
448
480
|
let responded = false;
|
|
449
481
|
let respondValue;
|
|
450
482
|
let endSignal;
|
|
451
483
|
const appendedMessages = [];
|
|
452
484
|
if (!streamingCommitted && streamingBuffer) {
|
|
453
|
-
messages.push(
|
|
485
|
+
messages.push(sanitizeMessageItem({
|
|
486
|
+
type: "message",
|
|
487
|
+
role: "assistant",
|
|
488
|
+
content: streamingBuffer,
|
|
489
|
+
}));
|
|
454
490
|
streamingCommitted = true;
|
|
455
491
|
}
|
|
456
|
-
for (const call of
|
|
492
|
+
for (const call of toolCalls) {
|
|
457
493
|
if (respondEnabled && call.name === GAMBIT_TOOL_RESPOND) {
|
|
458
494
|
const status = typeof call.args?.status === "number"
|
|
459
495
|
? call.args.status
|
|
@@ -492,6 +528,7 @@ async function runLlmDeck(ctx) {
|
|
|
492
528
|
});
|
|
493
529
|
const toolContent = JSON.stringify(call.args ?? {});
|
|
494
530
|
appendedMessages.push({
|
|
531
|
+
type: "message",
|
|
495
532
|
role: "assistant",
|
|
496
533
|
content: null,
|
|
497
534
|
tool_calls: [{
|
|
@@ -504,6 +541,7 @@ async function runLlmDeck(ctx) {
|
|
|
504
541
|
}],
|
|
505
542
|
});
|
|
506
543
|
appendedMessages.push({
|
|
544
|
+
type: "message",
|
|
507
545
|
role: "tool",
|
|
508
546
|
tool_call_id: call.id,
|
|
509
547
|
name: call.name,
|
|
@@ -547,6 +585,7 @@ async function runLlmDeck(ctx) {
|
|
|
547
585
|
});
|
|
548
586
|
const toolContent = JSON.stringify(call.args ?? {});
|
|
549
587
|
appendedMessages.push({
|
|
588
|
+
type: "message",
|
|
550
589
|
role: "assistant",
|
|
551
590
|
content: null,
|
|
552
591
|
tool_calls: [{
|
|
@@ -559,6 +598,7 @@ async function runLlmDeck(ctx) {
|
|
|
559
598
|
}],
|
|
560
599
|
});
|
|
561
600
|
appendedMessages.push({
|
|
601
|
+
type: "message",
|
|
562
602
|
role: "tool",
|
|
563
603
|
tool_call_id: call.id,
|
|
564
604
|
name: call.name,
|
|
@@ -628,6 +668,7 @@ async function runLlmDeck(ctx) {
|
|
|
628
668
|
parentActionCallId: actionCallId,
|
|
629
669
|
});
|
|
630
670
|
appendedMessages.push({
|
|
671
|
+
type: "message",
|
|
631
672
|
role: "assistant",
|
|
632
673
|
content: null,
|
|
633
674
|
tool_calls: [{
|
|
@@ -640,13 +681,16 @@ async function runLlmDeck(ctx) {
|
|
|
640
681
|
}],
|
|
641
682
|
});
|
|
642
683
|
appendedMessages.push({
|
|
684
|
+
type: "message",
|
|
643
685
|
role: "tool",
|
|
644
686
|
tool_call_id: call.id,
|
|
645
687
|
name: call.name,
|
|
646
688
|
content: toolResult.toolContent,
|
|
647
689
|
});
|
|
648
690
|
if (toolResult.extraMessages?.length) {
|
|
649
|
-
appendedMessages.push(...toolResult.extraMessages
|
|
691
|
+
appendedMessages.push(...toolResult.extraMessages
|
|
692
|
+
.map(coerceToMessageItem)
|
|
693
|
+
.filter((item) => item !== null));
|
|
650
694
|
}
|
|
651
695
|
ctx.trace?.({
|
|
652
696
|
type: "action.end",
|
|
@@ -658,7 +702,7 @@ async function runLlmDeck(ctx) {
|
|
|
658
702
|
});
|
|
659
703
|
}
|
|
660
704
|
if (appendedMessages.length) {
|
|
661
|
-
messages.push(...appendedMessages.map(
|
|
705
|
+
messages.push(...appendedMessages.map(sanitizeMessageItem));
|
|
662
706
|
idleController.touch();
|
|
663
707
|
}
|
|
664
708
|
if (ctx.onStateUpdate) {
|
|
@@ -695,13 +739,13 @@ async function runLlmDeck(ctx) {
|
|
|
695
739
|
throw new Error("Model stopped early (length) with no content");
|
|
696
740
|
}
|
|
697
741
|
if (message.content !== null && message.content !== undefined) {
|
|
698
|
-
messages.push(
|
|
742
|
+
messages.push(sanitizeMessageItem(message));
|
|
699
743
|
if (ctx.onStateUpdate) {
|
|
700
744
|
const state = computeState(result.updatedState);
|
|
701
745
|
ctx.onStateUpdate(state);
|
|
702
746
|
}
|
|
703
747
|
if (ctx.parentActionCallId !== undefined &&
|
|
704
|
-
(!
|
|
748
|
+
(!toolCalls || toolCalls.length === 0)) {
|
|
705
749
|
ctx.trace?.({
|
|
706
750
|
type: "monolog",
|
|
707
751
|
runId,
|
|
@@ -828,7 +872,7 @@ async function handleToolCall(call, ctx) {
|
|
|
828
872
|
initialUserMessage: undefined,
|
|
829
873
|
});
|
|
830
874
|
if (envelope.length) {
|
|
831
|
-
extraMessages.push(...envelope.map(
|
|
875
|
+
extraMessages.push(...envelope.map(sanitizeMessageItem));
|
|
832
876
|
}
|
|
833
877
|
ctx.idle?.touch();
|
|
834
878
|
}
|
|
@@ -907,7 +951,7 @@ async function handleToolCall(call, ctx) {
|
|
|
907
951
|
initialUserMessage: undefined,
|
|
908
952
|
});
|
|
909
953
|
if (envelope.length) {
|
|
910
|
-
extraMessages.push(...envelope.map(
|
|
954
|
+
extraMessages.push(...envelope.map(sanitizeMessageItem));
|
|
911
955
|
}
|
|
912
956
|
ctx.idle?.touch();
|
|
913
957
|
}
|
|
@@ -918,6 +962,7 @@ async function handleToolCall(call, ctx) {
|
|
|
918
962
|
}
|
|
919
963
|
const completeEventId = randomId("event");
|
|
920
964
|
extraMessages.push({
|
|
965
|
+
type: "message",
|
|
921
966
|
role: "assistant",
|
|
922
967
|
content: null,
|
|
923
968
|
tool_calls: [{
|
|
@@ -929,6 +974,7 @@ async function handleToolCall(call, ctx) {
|
|
|
929
974
|
},
|
|
930
975
|
}],
|
|
931
976
|
}, {
|
|
977
|
+
type: "message",
|
|
932
978
|
role: "tool",
|
|
933
979
|
tool_call_id: completeEventId,
|
|
934
980
|
name: GAMBIT_TOOL_COMPLETE,
|
|
@@ -1003,6 +1049,7 @@ async function runBusyHandler(args) {
|
|
|
1003
1049
|
logger.log(message);
|
|
1004
1050
|
}
|
|
1005
1051
|
return [{
|
|
1052
|
+
type: "message",
|
|
1006
1053
|
role: "assistant",
|
|
1007
1054
|
content: `${message} (elapsed ${elapsedMs}ms)`,
|
|
1008
1055
|
}];
|
|
@@ -1057,8 +1104,9 @@ function createIdleController(args) {
|
|
|
1057
1104
|
stream: args.stream,
|
|
1058
1105
|
onStreamText: args.onStreamText,
|
|
1059
1106
|
});
|
|
1060
|
-
if (envelope.length)
|
|
1061
|
-
args.pushMessages(envelope.map(
|
|
1107
|
+
if (envelope.length) {
|
|
1108
|
+
args.pushMessages(envelope.map(sanitizeMessageItem));
|
|
1109
|
+
}
|
|
1062
1110
|
}
|
|
1063
1111
|
catch {
|
|
1064
1112
|
// ignore idle handler errors
|
|
@@ -1143,6 +1191,7 @@ async function runIdleHandler(args) {
|
|
|
1143
1191
|
logger.log(message);
|
|
1144
1192
|
}
|
|
1145
1193
|
return [{
|
|
1194
|
+
type: "message",
|
|
1146
1195
|
role: "assistant",
|
|
1147
1196
|
content: `${message} (idle for ${elapsedMs}ms)`,
|
|
1148
1197
|
}];
|
|
@@ -1215,6 +1264,7 @@ async function maybeHandleError(args) {
|
|
|
1215
1264
|
const callId = randomId("event");
|
|
1216
1265
|
const extraMessages = [
|
|
1217
1266
|
{
|
|
1267
|
+
type: "message",
|
|
1218
1268
|
role: "assistant",
|
|
1219
1269
|
content: null,
|
|
1220
1270
|
tool_calls: [{
|
|
@@ -1227,6 +1277,7 @@ async function maybeHandleError(args) {
|
|
|
1227
1277
|
}],
|
|
1228
1278
|
},
|
|
1229
1279
|
{
|
|
1280
|
+
type: "message",
|
|
1230
1281
|
role: "tool",
|
|
1231
1282
|
tool_call_id: callId,
|
|
1232
1283
|
name: GAMBIT_TOOL_COMPLETE,
|
|
@@ -1258,6 +1309,7 @@ async function maybeHandleError(args) {
|
|
|
1258
1309
|
const callId = randomId("event");
|
|
1259
1310
|
const extraMessages = [
|
|
1260
1311
|
{
|
|
1312
|
+
type: "message",
|
|
1261
1313
|
role: "assistant",
|
|
1262
1314
|
content: null,
|
|
1263
1315
|
tool_calls: [{
|
|
@@ -1270,6 +1322,7 @@ async function maybeHandleError(args) {
|
|
|
1270
1322
|
}],
|
|
1271
1323
|
},
|
|
1272
1324
|
{
|
|
1325
|
+
type: "message",
|
|
1273
1326
|
role: "tool",
|
|
1274
1327
|
tool_call_id: callId,
|
|
1275
1328
|
name: GAMBIT_TOOL_COMPLETE,
|
|
@@ -1302,11 +1355,62 @@ function formatInputForUser(input) {
|
|
|
1302
1355
|
return String(input);
|
|
1303
1356
|
}
|
|
1304
1357
|
}
|
|
1305
|
-
function
|
|
1306
|
-
const toolCalls =
|
|
1307
|
-
?
|
|
1358
|
+
function sanitizeMessageItem(item) {
|
|
1359
|
+
const toolCalls = item.tool_calls && item.tool_calls.length > 0
|
|
1360
|
+
? item.tool_calls
|
|
1308
1361
|
: undefined;
|
|
1309
|
-
return { ...
|
|
1362
|
+
return { ...item, tool_calls: toolCalls };
|
|
1363
|
+
}
|
|
1364
|
+
function sanitizeResponseItems(items) {
|
|
1365
|
+
return items.map((item) => item.type === "message" ? sanitizeMessageItem(item) : item);
|
|
1366
|
+
}
|
|
1367
|
+
function coerceToMessageItem(item) {
|
|
1368
|
+
if (item.type === "message")
|
|
1369
|
+
return item;
|
|
1370
|
+
if (item.type === "output_text") {
|
|
1371
|
+
return { type: "message", role: "assistant", content: item.text };
|
|
1372
|
+
}
|
|
1373
|
+
return null;
|
|
1374
|
+
}
|
|
1375
|
+
function messageItemFromResponse(output) {
|
|
1376
|
+
const messageItem = output.find((item) => item.type === "message");
|
|
1377
|
+
if (messageItem && messageItem.type === "message")
|
|
1378
|
+
return messageItem;
|
|
1379
|
+
const textItem = output.find((item) => item.type === "output_text");
|
|
1380
|
+
if (textItem && textItem.type === "output_text") {
|
|
1381
|
+
return { type: "message", role: "assistant", content: textItem.text };
|
|
1382
|
+
}
|
|
1383
|
+
return { type: "message", role: "assistant", content: null };
|
|
1384
|
+
}
|
|
1385
|
+
function safeJsonArgs(str) {
|
|
1386
|
+
try {
|
|
1387
|
+
const parsed = JSON.parse(str);
|
|
1388
|
+
if (parsed && typeof parsed === "object") {
|
|
1389
|
+
return parsed;
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
catch {
|
|
1393
|
+
// ignore bad tool args
|
|
1394
|
+
}
|
|
1395
|
+
return {};
|
|
1396
|
+
}
|
|
1397
|
+
function extractToolCalls(output, message) {
|
|
1398
|
+
const responseCalls = output.filter((item) => item.type === "function_call");
|
|
1399
|
+
if (responseCalls.length > 0) {
|
|
1400
|
+
return responseCalls.map((item) => ({
|
|
1401
|
+
id: item.call_id,
|
|
1402
|
+
name: item.name,
|
|
1403
|
+
args: safeJsonArgs(item.arguments),
|
|
1404
|
+
}));
|
|
1405
|
+
}
|
|
1406
|
+
const messageCalls = message.tool_calls ?? [];
|
|
1407
|
+
if (messageCalls.length === 0)
|
|
1408
|
+
return undefined;
|
|
1409
|
+
return messageCalls.map((call) => ({
|
|
1410
|
+
id: call.id,
|
|
1411
|
+
name: call.function.name,
|
|
1412
|
+
args: safeJsonArgs(call.function.arguments),
|
|
1413
|
+
}));
|
|
1310
1414
|
}
|
|
1311
1415
|
async function buildToolDefs(deck) {
|
|
1312
1416
|
const defs = [];
|
package/esm/src/state.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OpenResponseItem, OpenResponseMessageItem, TraceEvent } from "./types.js";
|
|
2
2
|
export type SavedState = {
|
|
3
3
|
runId: string;
|
|
4
|
-
messages: Array<
|
|
4
|
+
messages: Array<OpenResponseItem>;
|
|
5
5
|
meta?: Record<string, unknown>;
|
|
6
6
|
messageRefs?: Array<MessageRef>;
|
|
7
7
|
feedback?: Array<FeedbackEntry>;
|
|
@@ -11,7 +11,8 @@ export type SavedState = {
|
|
|
11
11
|
};
|
|
12
12
|
export type MessageRef = {
|
|
13
13
|
id: string;
|
|
14
|
-
|
|
14
|
+
type: OpenResponseItem["type"];
|
|
15
|
+
role?: OpenResponseMessageItem["role"];
|
|
15
16
|
};
|
|
16
17
|
export type FeedbackEntry = {
|
|
17
18
|
id: string;
|
package/esm/src/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,iBAAiB,CAAC,EAAE,aAAa,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAclE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,QAK5D"}
|