@assistant-ui/react-google-adk 0.0.5 → 0.0.7
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/dist/AdkEventAccumulator.d.ts.map +1 -1
- package/dist/AdkEventAccumulator.js +48 -4
- package/dist/AdkEventAccumulator.js.map +1 -1
- package/dist/AdkSessionAdapter.js +2 -2
- package/dist/AdkSessionAdapter.js.map +1 -1
- package/dist/convertAdkMessages.d.ts +1 -1
- package/dist/convertAdkMessages.d.ts.map +1 -1
- package/dist/hooks.d.ts +4 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +18 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/useAdkMessages.d.ts +1 -0
- package/dist/useAdkMessages.d.ts.map +1 -1
- package/dist/useAdkMessages.js +13 -0
- package/dist/useAdkMessages.js.map +1 -1
- package/dist/useAdkRuntime.d.ts.map +1 -1
- package/dist/useAdkRuntime.js +46 -15
- package/dist/useAdkRuntime.js.map +1 -1
- package/package.json +8 -8
- package/src/AdkEventAccumulator.test.ts +521 -2
- package/src/AdkEventAccumulator.ts +49 -4
- package/src/AdkSessionAdapter.test.ts +1 -1
- package/src/AdkSessionAdapter.ts +3 -3
- package/src/convertAdkMessages.ts +1 -1
- package/src/hooks.ts +28 -1
- package/src/index.ts +1 -0
- package/src/useAdkMessages.ts +17 -0
- package/src/useAdkRuntime.test.ts +138 -0
- package/src/useAdkRuntime.ts +52 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAdkRuntime.js","sourceRoot":"","sources":["../src/useAdkRuntime.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,wBAAwB,GAMzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAW7C,OAAO,EAAE,cAAc,EAAE,4BAAyB;AAClD,OAAO,EAAE,iBAAiB,EAAE,gCAA6B;AACzD,OAAO,EAAE,sBAAsB,EAAyB,mBAAgB;AACxE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,iBAAiB,GAAG,CAAC,GAAkB,EAAE,EAAE;IAC/C,MAAM,UAAU,GAAG;QACjB,GAAG,GAAG,CAAC,OAAO;QACd,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACtD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,KAAK,OAAO;gBACV,OAAO,EAAE,IAAI,EAAE,WAAoB,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACzD,KAAK,MAAM;gBACT,OAAO;oBACL,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,UAAU,IAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;iBAC3C,CAAC;YAEJ,KAAK,WAAW;gBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE1D;
|
|
1
|
+
{"version":3,"file":"useAdkRuntime.js","sourceRoot":"","sources":["../src/useAdkRuntime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-google-adk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Google ADK adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"google-adk",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
],
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@assistant-ui/core": "^0.1.
|
|
38
|
-
"@assistant-ui/store": "^0.2.
|
|
37
|
+
"@assistant-ui/core": "^0.1.15",
|
|
38
|
+
"@assistant-ui/store": "^0.2.8",
|
|
39
39
|
"assistant-cloud": "*",
|
|
40
|
-
"assistant-stream": "^0.3.
|
|
41
|
-
"uuid": "^
|
|
40
|
+
"assistant-stream": "^0.3.12",
|
|
41
|
+
"uuid": "^14.0.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@google/adk": ">=0.5.0",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/react": "^19.2.14",
|
|
58
58
|
"@types/uuid": "^11.0.0",
|
|
59
|
-
"react": "^19.2.
|
|
60
|
-
"vitest": "^4.1.
|
|
61
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
59
|
+
"react": "^19.2.5",
|
|
60
|
+
"vitest": "^4.1.5",
|
|
61
|
+
"@assistant-ui/x-buildutils": "0.0.6"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public",
|
|
@@ -399,7 +399,7 @@ describe("AdkEventAccumulator - isFinalResponse logic", () => {
|
|
|
399
399
|
});
|
|
400
400
|
});
|
|
401
401
|
|
|
402
|
-
it("
|
|
402
|
+
it("HITL event leaves status undefined for auto-status", () => {
|
|
403
403
|
const acc = new AdkEventAccumulator();
|
|
404
404
|
const msgs = acc.processEvent(
|
|
405
405
|
makeEvent({
|
|
@@ -413,10 +413,283 @@ describe("AdkEventAccumulator - isFinalResponse logic", () => {
|
|
|
413
413
|
},
|
|
414
414
|
}),
|
|
415
415
|
);
|
|
416
|
+
expect((msgs[0] as AdkMessage & { type: "ai" }).status).toBeUndefined();
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
describe("AdkEventAccumulator - HITL requires-action", () => {
|
|
421
|
+
const makeHitlEvent = (
|
|
422
|
+
toolCallId: string,
|
|
423
|
+
overrides: Partial<AdkEvent> = {},
|
|
424
|
+
): AdkEvent =>
|
|
425
|
+
makeEvent({
|
|
426
|
+
author: "agent",
|
|
427
|
+
longRunningToolIds: [toolCallId],
|
|
428
|
+
content: {
|
|
429
|
+
parts: [
|
|
430
|
+
{
|
|
431
|
+
functionCall: {
|
|
432
|
+
id: toolCallId,
|
|
433
|
+
name: "adk_request_input",
|
|
434
|
+
args: { message: "What's the forecast period?" },
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
],
|
|
438
|
+
},
|
|
439
|
+
...overrides,
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
it("produces an AI message with tool call and no manual status", () => {
|
|
443
|
+
const acc = new AdkEventAccumulator();
|
|
444
|
+
const msgs = acc.processEvent(makeHitlEvent("tc-1"));
|
|
445
|
+
|
|
446
|
+
expect(msgs).toHaveLength(1);
|
|
447
|
+
const aiMsg = msgs[0] as AdkMessage & { type: "ai" };
|
|
448
|
+
expect(aiMsg.type).toBe("ai");
|
|
449
|
+
expect(aiMsg.tool_calls).toHaveLength(1);
|
|
450
|
+
expect(aiMsg.tool_calls![0]!.id).toBe("tc-1");
|
|
451
|
+
expect(aiMsg.tool_calls![0]!.name).toBe("adk_request_input");
|
|
452
|
+
expect(aiMsg.status).toBeUndefined();
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
it("matches tool call id to the longRunningToolIds entry", () => {
|
|
456
|
+
const acc = new AdkEventAccumulator();
|
|
457
|
+
const msgs = acc.processEvent(makeHitlEvent("tc-1"));
|
|
458
|
+
const aiMsg = msgs[0] as AdkMessage & { type: "ai" };
|
|
459
|
+
expect(aiMsg.tool_calls![0]!.id).toBe("tc-1");
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
it("stays pending across a subsequent bookkeeping event", () => {
|
|
463
|
+
const acc = new AdkEventAccumulator();
|
|
464
|
+
acc.processEvent(makeHitlEvent("tc-1", { author: "WorkflowA" }));
|
|
465
|
+
|
|
466
|
+
const msgs = acc.processEvent(
|
|
467
|
+
makeEvent({
|
|
468
|
+
id: "evt-bookkeeping",
|
|
469
|
+
author: "WorkflowA",
|
|
470
|
+
actions: { stateDelta: { waiting_for_user: true } },
|
|
471
|
+
}),
|
|
472
|
+
);
|
|
473
|
+
|
|
474
|
+
const aiMsg = msgs.find(
|
|
475
|
+
(m): m is AdkMessage & { type: "ai" } =>
|
|
476
|
+
m.type === "ai" && (m.tool_calls?.length ?? 0) > 0,
|
|
477
|
+
);
|
|
478
|
+
expect(aiMsg).toBeDefined();
|
|
479
|
+
expect(aiMsg!.tool_calls![0]!.id).toBe("tc-1");
|
|
480
|
+
expect(aiMsg!.status).toBeUndefined();
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
it("assigns manual complete status on non-HITL final event", () => {
|
|
484
|
+
const acc = new AdkEventAccumulator();
|
|
485
|
+
const msgs = acc.processEvent(
|
|
486
|
+
makeEvent({
|
|
487
|
+
author: "agent",
|
|
488
|
+
content: { role: "model", parts: [{ text: "Done." }] },
|
|
489
|
+
}),
|
|
490
|
+
);
|
|
491
|
+
|
|
416
492
|
expect(msgs[0]).toMatchObject({
|
|
417
493
|
status: { type: "complete", reason: "stop" },
|
|
418
494
|
});
|
|
419
495
|
});
|
|
496
|
+
|
|
497
|
+
it("assigns manual complete status on skipSummarization final event", () => {
|
|
498
|
+
const acc = new AdkEventAccumulator();
|
|
499
|
+
const msgs = acc.processEvent(
|
|
500
|
+
makeEvent({
|
|
501
|
+
author: "agent",
|
|
502
|
+
actions: { skipSummarization: true },
|
|
503
|
+
content: { role: "model", parts: [{ text: "skipped" }] },
|
|
504
|
+
}),
|
|
505
|
+
);
|
|
506
|
+
|
|
507
|
+
expect(msgs[0]).toMatchObject({
|
|
508
|
+
status: { type: "complete", reason: "stop" },
|
|
509
|
+
});
|
|
510
|
+
});
|
|
511
|
+
|
|
512
|
+
it("prioritizes skipSummarization over longRunningToolIds", () => {
|
|
513
|
+
const acc = new AdkEventAccumulator();
|
|
514
|
+
const msgs = acc.processEvent(
|
|
515
|
+
makeEvent({
|
|
516
|
+
author: "agent",
|
|
517
|
+
longRunningToolIds: ["lrt-both"],
|
|
518
|
+
actions: { skipSummarization: true },
|
|
519
|
+
content: {
|
|
520
|
+
role: "model",
|
|
521
|
+
parts: [
|
|
522
|
+
{ functionCall: { name: "slow_tool", id: "lrt-both", args: {} } },
|
|
523
|
+
],
|
|
524
|
+
},
|
|
525
|
+
}),
|
|
526
|
+
);
|
|
527
|
+
|
|
528
|
+
expect(msgs[0]).toMatchObject({
|
|
529
|
+
status: { type: "complete", reason: "stop" },
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
it("ignores empty longRunningToolIds array for HITL guard", () => {
|
|
534
|
+
const acc = new AdkEventAccumulator();
|
|
535
|
+
const msgs = acc.processEvent(
|
|
536
|
+
makeEvent({
|
|
537
|
+
author: "agent",
|
|
538
|
+
longRunningToolIds: [],
|
|
539
|
+
content: { role: "model", parts: [{ text: "Done." }] },
|
|
540
|
+
}),
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
expect(msgs[0]).toMatchObject({
|
|
544
|
+
status: { type: "complete", reason: "stop" },
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
it("preserves text and skips status when partial text precedes HITL event", () => {
|
|
549
|
+
const acc = new AdkEventAccumulator();
|
|
550
|
+
acc.processEvent(
|
|
551
|
+
makeEvent({
|
|
552
|
+
author: "ClarifyAgent",
|
|
553
|
+
partial: true,
|
|
554
|
+
content: {
|
|
555
|
+
role: "model",
|
|
556
|
+
parts: [{ text: "Let me ask about " }],
|
|
557
|
+
},
|
|
558
|
+
}),
|
|
559
|
+
);
|
|
560
|
+
|
|
561
|
+
const msgs = acc.processEvent(
|
|
562
|
+
makeHitlEvent("tc-1", { author: "ClarifyAgent" }),
|
|
563
|
+
);
|
|
564
|
+
|
|
565
|
+
const aiMsg = msgs.find(
|
|
566
|
+
(m): m is AdkMessage & { type: "ai" } =>
|
|
567
|
+
m.type === "ai" && (m.tool_calls?.length ?? 0) > 0,
|
|
568
|
+
);
|
|
569
|
+
expect(aiMsg).toBeDefined();
|
|
570
|
+
expect(aiMsg!.tool_calls).toHaveLength(1);
|
|
571
|
+
expect(
|
|
572
|
+
aiMsg!.content.some(
|
|
573
|
+
(c) => c.type === "text" && c.text.includes("Let me ask"),
|
|
574
|
+
),
|
|
575
|
+
).toBe(true);
|
|
576
|
+
expect(aiMsg!.status).toBeUndefined();
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
it("keeps status undefined for mixed text and functionCall content", () => {
|
|
580
|
+
const acc = new AdkEventAccumulator();
|
|
581
|
+
const msgs = acc.processEvent(
|
|
582
|
+
makeEvent({
|
|
583
|
+
author: "agent",
|
|
584
|
+
longRunningToolIds: ["mixed-tc-1"],
|
|
585
|
+
content: {
|
|
586
|
+
role: "model",
|
|
587
|
+
parts: [
|
|
588
|
+
{ text: "I need some clarification." },
|
|
589
|
+
{
|
|
590
|
+
functionCall: {
|
|
591
|
+
id: "mixed-tc-1",
|
|
592
|
+
name: "adk_request_input",
|
|
593
|
+
args: { message: "Which region?" },
|
|
594
|
+
},
|
|
595
|
+
},
|
|
596
|
+
],
|
|
597
|
+
},
|
|
598
|
+
}),
|
|
599
|
+
);
|
|
600
|
+
|
|
601
|
+
const aiMsg = msgs[0] as AdkMessage & { type: "ai" };
|
|
602
|
+
expect(aiMsg.content.some((c) => c.type === "text")).toBe(true);
|
|
603
|
+
expect(aiMsg.tool_calls).toHaveLength(1);
|
|
604
|
+
expect(aiMsg.tool_calls![0]!.id).toBe("mixed-tc-1");
|
|
605
|
+
expect(aiMsg.status).toBeUndefined();
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
it("handles multiple tool calls with partial longRunningToolIds overlap", () => {
|
|
609
|
+
const acc = new AdkEventAccumulator();
|
|
610
|
+
const msgs = acc.processEvent(
|
|
611
|
+
makeEvent({
|
|
612
|
+
author: "agent",
|
|
613
|
+
longRunningToolIds: ["tc-hitl"],
|
|
614
|
+
content: {
|
|
615
|
+
role: "model",
|
|
616
|
+
parts: [
|
|
617
|
+
{
|
|
618
|
+
functionCall: {
|
|
619
|
+
id: "tc-hitl",
|
|
620
|
+
name: "adk_request_input",
|
|
621
|
+
args: { message: "Confirm?" },
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
functionCall: {
|
|
626
|
+
id: "tc-regular",
|
|
627
|
+
name: "fetch_data",
|
|
628
|
+
args: { url: "https://example.com" },
|
|
629
|
+
},
|
|
630
|
+
},
|
|
631
|
+
],
|
|
632
|
+
},
|
|
633
|
+
}),
|
|
634
|
+
);
|
|
635
|
+
|
|
636
|
+
const aiMsg = msgs[0] as AdkMessage & { type: "ai" };
|
|
637
|
+
expect(aiMsg.tool_calls).toHaveLength(2);
|
|
638
|
+
expect(aiMsg.tool_calls!.map((tc) => tc.id).sort()).toEqual(
|
|
639
|
+
["tc-hitl", "tc-regular"].sort(),
|
|
640
|
+
);
|
|
641
|
+
expect(aiMsg.status).toBeUndefined();
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
it("does not override HITL guard with explicit finishReason", () => {
|
|
645
|
+
const acc = new AdkEventAccumulator();
|
|
646
|
+
const msgs = acc.processEvent(
|
|
647
|
+
makeHitlEvent("tc-fr", { finishReason: "STOP" }),
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
const aiMsg = msgs[0] as AdkMessage & { type: "ai" };
|
|
651
|
+
expect(aiMsg.status).toBeUndefined();
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
it("produces separate messages without status for sequential HITL events", () => {
|
|
655
|
+
const acc = new AdkEventAccumulator();
|
|
656
|
+
acc.processEvent(
|
|
657
|
+
makeHitlEvent("tc-seq-1", { id: "evt-1", author: "WorkflowA" }),
|
|
658
|
+
);
|
|
659
|
+
|
|
660
|
+
const msgs = acc.processEvent(
|
|
661
|
+
makeEvent({
|
|
662
|
+
id: "evt-2",
|
|
663
|
+
author: "WorkflowB",
|
|
664
|
+
longRunningToolIds: ["tc-seq-2"],
|
|
665
|
+
content: {
|
|
666
|
+
role: "model",
|
|
667
|
+
parts: [
|
|
668
|
+
{
|
|
669
|
+
functionCall: {
|
|
670
|
+
id: "tc-seq-2",
|
|
671
|
+
name: "adk_request_confirmation",
|
|
672
|
+
args: {
|
|
673
|
+
originalFunctionCall: { name: "delete_all", args: {} },
|
|
674
|
+
toolConfirmation: { hint: "Sure?", payload: {} },
|
|
675
|
+
},
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
],
|
|
679
|
+
},
|
|
680
|
+
}),
|
|
681
|
+
);
|
|
682
|
+
|
|
683
|
+
const hitlMsgs = msgs.filter(
|
|
684
|
+
(m): m is AdkMessage & { type: "ai" } =>
|
|
685
|
+
m.type === "ai" && (m.tool_calls?.length ?? 0) > 0,
|
|
686
|
+
);
|
|
687
|
+
expect(hitlMsgs).toHaveLength(2);
|
|
688
|
+
expect(hitlMsgs[0]!.status).toBeUndefined();
|
|
689
|
+
expect(hitlMsgs[1]!.status).toBeUndefined();
|
|
690
|
+
expect(hitlMsgs[0]!.tool_calls![0]!.id).toBe("tc-seq-1");
|
|
691
|
+
expect(hitlMsgs[1]!.tool_calls![0]!.id).toBe("tc-seq-2");
|
|
692
|
+
});
|
|
420
693
|
});
|
|
421
694
|
|
|
422
695
|
describe("AdkEventAccumulator - actions tracking", () => {
|
|
@@ -487,6 +760,44 @@ describe("AdkEventAccumulator - actions tracking", () => {
|
|
|
487
760
|
);
|
|
488
761
|
expect(acc.getLongRunningToolIds()).toEqual(["lrt-1", "lrt-2"]);
|
|
489
762
|
});
|
|
763
|
+
|
|
764
|
+
it("unions longRunningToolIds across multiple events", () => {
|
|
765
|
+
const acc = new AdkEventAccumulator();
|
|
766
|
+
acc.processEvent(
|
|
767
|
+
makeEvent({
|
|
768
|
+
longRunningToolIds: ["lrt-1"],
|
|
769
|
+
author: "agent",
|
|
770
|
+
content: { parts: [{ text: "x" }] },
|
|
771
|
+
}),
|
|
772
|
+
);
|
|
773
|
+
acc.processEvent(
|
|
774
|
+
makeEvent({
|
|
775
|
+
longRunningToolIds: ["lrt-2"],
|
|
776
|
+
author: "agent",
|
|
777
|
+
content: { parts: [{ text: "y" }] },
|
|
778
|
+
}),
|
|
779
|
+
);
|
|
780
|
+
expect(acc.getLongRunningToolIds()).toEqual(["lrt-1", "lrt-2"]);
|
|
781
|
+
});
|
|
782
|
+
|
|
783
|
+
it("deduplicates repeated longRunningToolIds", () => {
|
|
784
|
+
const acc = new AdkEventAccumulator();
|
|
785
|
+
acc.processEvent(
|
|
786
|
+
makeEvent({
|
|
787
|
+
longRunningToolIds: ["lrt-1"],
|
|
788
|
+
author: "agent",
|
|
789
|
+
content: { parts: [{ text: "x" }] },
|
|
790
|
+
}),
|
|
791
|
+
);
|
|
792
|
+
acc.processEvent(
|
|
793
|
+
makeEvent({
|
|
794
|
+
longRunningToolIds: ["lrt-1"],
|
|
795
|
+
author: "agent",
|
|
796
|
+
content: { parts: [{ text: "y" }] },
|
|
797
|
+
}),
|
|
798
|
+
);
|
|
799
|
+
expect(acc.getLongRunningToolIds()).toEqual(["lrt-1"]);
|
|
800
|
+
});
|
|
490
801
|
});
|
|
491
802
|
|
|
492
803
|
describe("AdkEventAccumulator - special function calls", () => {
|
|
@@ -576,7 +887,12 @@ describe("AdkEventAccumulator - author/agent tracking", () => {
|
|
|
576
887
|
|
|
577
888
|
it("does not track user as agent info", () => {
|
|
578
889
|
const acc = new AdkEventAccumulator();
|
|
579
|
-
acc.processEvent(
|
|
890
|
+
acc.processEvent(
|
|
891
|
+
makeEvent({
|
|
892
|
+
author: "user",
|
|
893
|
+
content: { role: "user", parts: [{ text: "hello" }] },
|
|
894
|
+
}),
|
|
895
|
+
);
|
|
580
896
|
expect(acc.getAgentInfo()).toEqual({});
|
|
581
897
|
});
|
|
582
898
|
|
|
@@ -667,3 +983,206 @@ describe("AdkEventAccumulator - initial messages", () => {
|
|
|
667
983
|
expect(msgs).toHaveLength(2);
|
|
668
984
|
});
|
|
669
985
|
});
|
|
986
|
+
|
|
987
|
+
describe("AdkEventAccumulator - user message handling", () => {
|
|
988
|
+
it("creates a human message for user-authored text events", () => {
|
|
989
|
+
const acc = new AdkEventAccumulator();
|
|
990
|
+
const msgs = acc.processEvent(
|
|
991
|
+
makeEvent({
|
|
992
|
+
author: "user",
|
|
993
|
+
content: { role: "user", parts: [{ text: "hello" }] },
|
|
994
|
+
}),
|
|
995
|
+
);
|
|
996
|
+
expect(msgs).toHaveLength(1);
|
|
997
|
+
expect(msgs[0]).toMatchObject({
|
|
998
|
+
type: "human",
|
|
999
|
+
content: "hello",
|
|
1000
|
+
});
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
it("creates separate human and AI messages for a user/agent turn", () => {
|
|
1004
|
+
const acc = new AdkEventAccumulator();
|
|
1005
|
+
acc.processEvent(
|
|
1006
|
+
makeEvent({
|
|
1007
|
+
id: "u1",
|
|
1008
|
+
author: "user",
|
|
1009
|
+
content: { role: "user", parts: [{ text: "help" }] },
|
|
1010
|
+
}),
|
|
1011
|
+
);
|
|
1012
|
+
const msgs = acc.processEvent(makeTextEvent("How can I help?"));
|
|
1013
|
+
expect(msgs).toHaveLength(2);
|
|
1014
|
+
expect(msgs[0]).toMatchObject({ type: "human", content: "help" });
|
|
1015
|
+
expect(msgs[1]).toMatchObject({
|
|
1016
|
+
type: "ai",
|
|
1017
|
+
content: [{ type: "text", text: "How can I help?" }],
|
|
1018
|
+
});
|
|
1019
|
+
});
|
|
1020
|
+
|
|
1021
|
+
it("handles multiple user/agent turns with correct message types", () => {
|
|
1022
|
+
const acc = new AdkEventAccumulator();
|
|
1023
|
+
acc.processEvent(
|
|
1024
|
+
makeEvent({
|
|
1025
|
+
id: "u1",
|
|
1026
|
+
author: "user",
|
|
1027
|
+
content: { role: "user", parts: [{ text: "hello" }] },
|
|
1028
|
+
}),
|
|
1029
|
+
);
|
|
1030
|
+
acc.processEvent(makeTextEvent("Hi there!"));
|
|
1031
|
+
acc.processEvent(
|
|
1032
|
+
makeEvent({
|
|
1033
|
+
id: "u2",
|
|
1034
|
+
author: "user",
|
|
1035
|
+
content: { role: "user", parts: [{ text: "help" }] },
|
|
1036
|
+
}),
|
|
1037
|
+
);
|
|
1038
|
+
const msgs = acc.processEvent(makeTextEvent("How can I help?"));
|
|
1039
|
+
expect(msgs).toHaveLength(4);
|
|
1040
|
+
expect(msgs[0]).toMatchObject({ type: "human", content: "hello" });
|
|
1041
|
+
expect(msgs[1]).toMatchObject({ type: "ai" });
|
|
1042
|
+
expect(msgs[2]).toMatchObject({ type: "human", content: "help" });
|
|
1043
|
+
expect(msgs[3]).toMatchObject({ type: "ai" });
|
|
1044
|
+
});
|
|
1045
|
+
|
|
1046
|
+
it("creates human message with image content", () => {
|
|
1047
|
+
const acc = new AdkEventAccumulator();
|
|
1048
|
+
const msgs = acc.processEvent(
|
|
1049
|
+
makeEvent({
|
|
1050
|
+
author: "user",
|
|
1051
|
+
content: {
|
|
1052
|
+
role: "user",
|
|
1053
|
+
parts: [{ inlineData: { mimeType: "image/png", data: "abc123" } }],
|
|
1054
|
+
},
|
|
1055
|
+
}),
|
|
1056
|
+
);
|
|
1057
|
+
expect(msgs).toHaveLength(1);
|
|
1058
|
+
expect(msgs[0]).toMatchObject({
|
|
1059
|
+
type: "human",
|
|
1060
|
+
content: [{ type: "image", mimeType: "image/png", data: "abc123" }],
|
|
1061
|
+
});
|
|
1062
|
+
});
|
|
1063
|
+
|
|
1064
|
+
it("creates human message with mixed text and image content", () => {
|
|
1065
|
+
const acc = new AdkEventAccumulator();
|
|
1066
|
+
const msgs = acc.processEvent(
|
|
1067
|
+
makeEvent({
|
|
1068
|
+
author: "user",
|
|
1069
|
+
content: {
|
|
1070
|
+
role: "user",
|
|
1071
|
+
parts: [
|
|
1072
|
+
{ text: "Look at this" },
|
|
1073
|
+
{ inlineData: { mimeType: "image/png", data: "abc123" } },
|
|
1074
|
+
],
|
|
1075
|
+
},
|
|
1076
|
+
}),
|
|
1077
|
+
);
|
|
1078
|
+
expect(msgs).toHaveLength(1);
|
|
1079
|
+
expect(msgs[0]).toMatchObject({
|
|
1080
|
+
type: "human",
|
|
1081
|
+
content: [
|
|
1082
|
+
{ type: "text", text: "Look at this" },
|
|
1083
|
+
{ type: "image", mimeType: "image/png", data: "abc123" },
|
|
1084
|
+
],
|
|
1085
|
+
});
|
|
1086
|
+
});
|
|
1087
|
+
|
|
1088
|
+
it("creates human message with fileData content", () => {
|
|
1089
|
+
const acc = new AdkEventAccumulator();
|
|
1090
|
+
const msgs = acc.processEvent(
|
|
1091
|
+
makeEvent({
|
|
1092
|
+
author: "user",
|
|
1093
|
+
content: {
|
|
1094
|
+
role: "user",
|
|
1095
|
+
parts: [{ fileData: { fileUri: "gs://bucket/image.png" } }],
|
|
1096
|
+
},
|
|
1097
|
+
}),
|
|
1098
|
+
);
|
|
1099
|
+
expect(msgs).toHaveLength(1);
|
|
1100
|
+
expect(msgs[0]).toMatchObject({
|
|
1101
|
+
type: "human",
|
|
1102
|
+
content: [{ type: "image_url", url: "gs://bucket/image.png" }],
|
|
1103
|
+
});
|
|
1104
|
+
});
|
|
1105
|
+
|
|
1106
|
+
it("tool result events (no author, role:'user') still create tool messages", () => {
|
|
1107
|
+
// Regression: the user-author check must not hijack tool events.
|
|
1108
|
+
// messageToEvent for `type:'tool'` emits events without `author`,
|
|
1109
|
+
// with content.role:'user' and a functionResponse part.
|
|
1110
|
+
const acc = new AdkEventAccumulator();
|
|
1111
|
+
const msgs = acc.processEvent(
|
|
1112
|
+
makeEvent({
|
|
1113
|
+
content: {
|
|
1114
|
+
role: "user",
|
|
1115
|
+
parts: [
|
|
1116
|
+
{
|
|
1117
|
+
functionResponse: {
|
|
1118
|
+
name: "get_weather",
|
|
1119
|
+
id: "call_1",
|
|
1120
|
+
response: { temp: 72 },
|
|
1121
|
+
},
|
|
1122
|
+
},
|
|
1123
|
+
],
|
|
1124
|
+
},
|
|
1125
|
+
}),
|
|
1126
|
+
);
|
|
1127
|
+
expect(msgs).toHaveLength(1);
|
|
1128
|
+
expect(msgs[0]).toMatchObject({
|
|
1129
|
+
type: "tool",
|
|
1130
|
+
name: "get_weather",
|
|
1131
|
+
tool_call_id: "call_1",
|
|
1132
|
+
content: JSON.stringify({ temp: 72 }),
|
|
1133
|
+
});
|
|
1134
|
+
});
|
|
1135
|
+
|
|
1136
|
+
it("session replay produces correct message types", () => {
|
|
1137
|
+
// Simulate loading a session with alternating user/agent events
|
|
1138
|
+
const acc = new AdkEventAccumulator();
|
|
1139
|
+
const events: AdkEvent[] = [
|
|
1140
|
+
makeEvent({
|
|
1141
|
+
id: "e1",
|
|
1142
|
+
author: "user",
|
|
1143
|
+
content: { role: "user", parts: [{ text: "good morning" }] },
|
|
1144
|
+
}),
|
|
1145
|
+
// Workflow state-only events (no content)
|
|
1146
|
+
makeEvent({
|
|
1147
|
+
id: "e2",
|
|
1148
|
+
author: "WorkflowAgent",
|
|
1149
|
+
actions: { stateDelta: { intent: "greeting" } },
|
|
1150
|
+
}),
|
|
1151
|
+
// Final response with content
|
|
1152
|
+
makeEvent({
|
|
1153
|
+
id: "e3",
|
|
1154
|
+
author: "WorkflowAgent",
|
|
1155
|
+
content: { role: "model", parts: [{ text: "Hello! How can I help?" }] },
|
|
1156
|
+
}),
|
|
1157
|
+
// Second turn
|
|
1158
|
+
makeEvent({
|
|
1159
|
+
id: "e4",
|
|
1160
|
+
author: "user",
|
|
1161
|
+
content: { role: "user", parts: [{ text: "help" }] },
|
|
1162
|
+
}),
|
|
1163
|
+
makeEvent({
|
|
1164
|
+
id: "e5",
|
|
1165
|
+
author: "WorkflowAgent",
|
|
1166
|
+
content: {
|
|
1167
|
+
role: "model",
|
|
1168
|
+
parts: [{ text: "What do you need help with?" }],
|
|
1169
|
+
},
|
|
1170
|
+
}),
|
|
1171
|
+
];
|
|
1172
|
+
let msgs: AdkMessage[] = [];
|
|
1173
|
+
for (const event of events) {
|
|
1174
|
+
msgs = acc.processEvent(event);
|
|
1175
|
+
}
|
|
1176
|
+
expect(msgs).toHaveLength(4);
|
|
1177
|
+
expect(msgs[0]).toMatchObject({ type: "human", content: "good morning" });
|
|
1178
|
+
expect(msgs[1]).toMatchObject({
|
|
1179
|
+
type: "ai",
|
|
1180
|
+
content: [{ type: "text", text: "Hello! How can I help?" }],
|
|
1181
|
+
});
|
|
1182
|
+
expect(msgs[2]).toMatchObject({ type: "human", content: "help" });
|
|
1183
|
+
expect(msgs[3]).toMatchObject({
|
|
1184
|
+
type: "ai",
|
|
1185
|
+
content: [{ type: "text", text: "What do you need help with?" }],
|
|
1186
|
+
});
|
|
1187
|
+
});
|
|
1188
|
+
});
|