@assistant-ui/react-google-adk 0.0.1
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/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/AdkClient.d.ts +45 -0
- package/dist/AdkClient.d.ts.map +1 -0
- package/dist/AdkClient.js +204 -0
- package/dist/AdkClient.js.map +1 -0
- package/dist/AdkEventAccumulator.d.ts +45 -0
- package/dist/AdkEventAccumulator.d.ts.map +1 -0
- package/dist/AdkEventAccumulator.js +508 -0
- package/dist/AdkEventAccumulator.js.map +1 -0
- package/dist/AdkSessionAdapter.d.ts +61 -0
- package/dist/AdkSessionAdapter.d.ts.map +1 -0
- package/dist/AdkSessionAdapter.js +159 -0
- package/dist/AdkSessionAdapter.js.map +1 -0
- package/dist/convertAdkMessages.d.ts +4 -0
- package/dist/convertAdkMessages.d.ts.map +1 -0
- package/dist/convertAdkMessages.js +75 -0
- package/dist/convertAdkMessages.js.map +1 -0
- package/dist/hooks.d.ts +50 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +173 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/server/adkEventStream.d.ts +42 -0
- package/dist/server/adkEventStream.d.ts.map +1 -0
- package/dist/server/adkEventStream.js +135 -0
- package/dist/server/adkEventStream.js.map +1 -0
- package/dist/server/createAdkApiRoute.d.ts +47 -0
- package/dist/server/createAdkApiRoute.d.ts.map +1 -0
- package/dist/server/createAdkApiRoute.js +41 -0
- package/dist/server/createAdkApiRoute.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +4 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parseAdkRequest.d.ts +56 -0
- package/dist/server/parseAdkRequest.d.ts.map +1 -0
- package/dist/server/parseAdkRequest.js +93 -0
- package/dist/server/parseAdkRequest.js.map +1 -0
- package/dist/structuredEvents.d.ts +7 -0
- package/dist/structuredEvents.d.ts.map +1 -0
- package/dist/structuredEvents.js +79 -0
- package/dist/structuredEvents.js.map +1 -0
- package/dist/types.d.ts +253 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/useAdkMessages.d.ts +28 -0
- package/dist/useAdkMessages.d.ts.map +1 -0
- package/dist/useAdkMessages.js +198 -0
- package/dist/useAdkMessages.js.map +1 -0
- package/dist/useAdkRuntime.d.ts +36 -0
- package/dist/useAdkRuntime.d.ts.map +1 -0
- package/dist/useAdkRuntime.js +252 -0
- package/dist/useAdkRuntime.js.map +1 -0
- package/package.json +83 -0
- package/server/package.json +4 -0
- package/src/AdkClient.test.ts +662 -0
- package/src/AdkClient.ts +274 -0
- package/src/AdkEventAccumulator.test.ts +591 -0
- package/src/AdkEventAccumulator.ts +602 -0
- package/src/AdkSessionAdapter.test.ts +362 -0
- package/src/AdkSessionAdapter.ts +245 -0
- package/src/convertAdkMessages.test.ts +209 -0
- package/src/convertAdkMessages.ts +93 -0
- package/src/hooks.ts +217 -0
- package/src/index.ts +66 -0
- package/src/server/adkEventStream.test.ts +78 -0
- package/src/server/adkEventStream.ts +161 -0
- package/src/server/createAdkApiRoute.test.ts +370 -0
- package/src/server/createAdkApiRoute.ts +86 -0
- package/src/server/index.ts +6 -0
- package/src/server/parseAdkRequest.test.ts +152 -0
- package/src/server/parseAdkRequest.ts +122 -0
- package/src/structuredEvents.ts +81 -0
- package/src/types.ts +265 -0
- package/src/useAdkMessages.ts +259 -0
- package/src/useAdkRuntime.ts +398 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const convertSdkPart = (part) => {
|
|
2
|
+
const result = {};
|
|
3
|
+
if ("text" in part && typeof part.text === "string")
|
|
4
|
+
result.text = part.text;
|
|
5
|
+
if ("thought" in part && typeof part.thought === "boolean")
|
|
6
|
+
result.thought = part.thought;
|
|
7
|
+
if ("functionCall" in part && part.functionCall)
|
|
8
|
+
result.functionCall = part.functionCall;
|
|
9
|
+
if ("functionResponse" in part && part.functionResponse)
|
|
10
|
+
result.functionResponse = part.functionResponse;
|
|
11
|
+
if ("executableCode" in part && part.executableCode)
|
|
12
|
+
result.executableCode = part.executableCode;
|
|
13
|
+
if ("codeExecutionResult" in part && part.codeExecutionResult)
|
|
14
|
+
result.codeExecutionResult = part.codeExecutionResult;
|
|
15
|
+
if ("inlineData" in part && part.inlineData)
|
|
16
|
+
result.inlineData = part.inlineData;
|
|
17
|
+
if ("fileData" in part && part.fileData)
|
|
18
|
+
result.fileData = part.fileData;
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
const convertSdkActions = (actions) => {
|
|
22
|
+
const result = {};
|
|
23
|
+
if (actions.stateDelta != null)
|
|
24
|
+
result.stateDelta = actions.stateDelta;
|
|
25
|
+
if (actions.artifactDelta != null)
|
|
26
|
+
result.artifactDelta = actions.artifactDelta;
|
|
27
|
+
if (actions.transferToAgent != null)
|
|
28
|
+
result.transferToAgent = actions.transferToAgent;
|
|
29
|
+
if (actions.escalate != null)
|
|
30
|
+
result.escalate = actions.escalate;
|
|
31
|
+
if (actions.skipSummarization != null)
|
|
32
|
+
result.skipSummarization = actions.skipSummarization;
|
|
33
|
+
if (actions.requestedAuthConfigs != null)
|
|
34
|
+
result.requestedAuthConfigs = actions.requestedAuthConfigs;
|
|
35
|
+
if (actions.requestedToolConfirmations != null)
|
|
36
|
+
result.requestedToolConfirmations = actions.requestedToolConfirmations;
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
const convertSdkEvent = (event) => {
|
|
40
|
+
const result = { id: event.id ?? "" };
|
|
41
|
+
if (event.invocationId != null)
|
|
42
|
+
result.invocationId = event.invocationId;
|
|
43
|
+
if (event.author != null)
|
|
44
|
+
result.author = event.author;
|
|
45
|
+
if (event.branch != null)
|
|
46
|
+
result.branch = event.branch;
|
|
47
|
+
if (event.partial != null)
|
|
48
|
+
result.partial = event.partial;
|
|
49
|
+
if (event.turnComplete != null)
|
|
50
|
+
result.turnComplete = event.turnComplete;
|
|
51
|
+
if (event.interrupted != null)
|
|
52
|
+
result.interrupted = event.interrupted;
|
|
53
|
+
if (event.finishReason != null)
|
|
54
|
+
result.finishReason = event.finishReason;
|
|
55
|
+
if (event.timestamp != null)
|
|
56
|
+
result.timestamp = event.timestamp;
|
|
57
|
+
if (event.content) {
|
|
58
|
+
const content = {};
|
|
59
|
+
if (event.content.role != null)
|
|
60
|
+
content.role = event.content.role;
|
|
61
|
+
if (event.content.parts)
|
|
62
|
+
content.parts = event.content.parts.map(convertSdkPart);
|
|
63
|
+
result.content = content;
|
|
64
|
+
}
|
|
65
|
+
if (event.actions)
|
|
66
|
+
result.actions = convertSdkActions(event.actions);
|
|
67
|
+
if (event.longRunningToolIds)
|
|
68
|
+
result.longRunningToolIds = event.longRunningToolIds;
|
|
69
|
+
if (event.errorCode != null)
|
|
70
|
+
result.errorCode = event.errorCode;
|
|
71
|
+
if (event.errorMessage != null)
|
|
72
|
+
result.errorMessage = event.errorMessage;
|
|
73
|
+
if (event.groundingMetadata != null)
|
|
74
|
+
result.groundingMetadata = event.groundingMetadata;
|
|
75
|
+
if (event.citationMetadata != null)
|
|
76
|
+
result.citationMetadata = event.citationMetadata;
|
|
77
|
+
if (event.usageMetadata != null)
|
|
78
|
+
result.usageMetadata = event.usageMetadata;
|
|
79
|
+
if (event.customMetadata != null)
|
|
80
|
+
result.customMetadata = event.customMetadata;
|
|
81
|
+
return result;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Converts an AsyncGenerator of ADK SDK Events into an SSE Response.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* import { adkEventStream } from '@assistant-ui/react-google-adk/server';
|
|
89
|
+
* const events = runner.runAsync({ userId, sessionId, newMessage });
|
|
90
|
+
* return adkEventStream(events);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export const adkEventStream = (events, options) => {
|
|
94
|
+
const encoder = new TextEncoder();
|
|
95
|
+
let cancelled = false;
|
|
96
|
+
const stream = new ReadableStream({
|
|
97
|
+
async start(controller) {
|
|
98
|
+
// Initial SSE comment to keep connection alive through proxies
|
|
99
|
+
controller.enqueue(encoder.encode(":ok\n\n"));
|
|
100
|
+
try {
|
|
101
|
+
for await (const event of events) {
|
|
102
|
+
if (cancelled)
|
|
103
|
+
break;
|
|
104
|
+
const wireEvent = convertSdkEvent(event);
|
|
105
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(wireEvent)}\n\n`));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
if (!cancelled) {
|
|
110
|
+
options?.onError?.(e);
|
|
111
|
+
const errorEvent = {
|
|
112
|
+
id: "",
|
|
113
|
+
errorCode: "STREAM_ERROR",
|
|
114
|
+
errorMessage: e instanceof Error ? e.message : "Unknown stream error",
|
|
115
|
+
};
|
|
116
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(errorEvent)}\n\n`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
controller.close();
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
async cancel() {
|
|
124
|
+
cancelled = true;
|
|
125
|
+
await events.return?.(undefined);
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
return new Response(stream, {
|
|
129
|
+
headers: {
|
|
130
|
+
"Content-Type": "text/event-stream",
|
|
131
|
+
"Cache-Control": "no-cache",
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=adkEventStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adkEventStream.js","sourceRoot":"","sources":["../../src/server/adkEventStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type AdkEventStreamOptions } from "./adkEventStream.js";
|
|
2
|
+
/**
|
|
3
|
+
* Loose runner type matching the ADK SDK's Runner interface.
|
|
4
|
+
* Avoids requiring `@google/adk` as a dependency.
|
|
5
|
+
*/
|
|
6
|
+
type AdkRunner = {
|
|
7
|
+
runAsync(options: Record<string, unknown>): AsyncGenerator<any, void, undefined>;
|
|
8
|
+
};
|
|
9
|
+
export type CreateAdkApiRouteOptions = {
|
|
10
|
+
/**
|
|
11
|
+
* ADK Runner instance.
|
|
12
|
+
*/
|
|
13
|
+
runner: AdkRunner;
|
|
14
|
+
/**
|
|
15
|
+
* User ID to use for the ADK session. Can be a static string
|
|
16
|
+
* or a function that extracts it from the request.
|
|
17
|
+
*/
|
|
18
|
+
userId: string | ((req: Request) => string | Promise<string>);
|
|
19
|
+
/**
|
|
20
|
+
* Session ID to use. Can be a static string or a function
|
|
21
|
+
* that extracts it from the request (e.g. from query params or headers).
|
|
22
|
+
*/
|
|
23
|
+
sessionId: string | ((req: Request) => string | Promise<string>);
|
|
24
|
+
/**
|
|
25
|
+
* Error handler for stream errors.
|
|
26
|
+
*/
|
|
27
|
+
onError?: AdkEventStreamOptions["onError"];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,
|
|
31
|
+
* and `adkEventStream` into a single function.
|
|
32
|
+
*
|
|
33
|
+
* @example Next.js App Router
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { createAdkApiRoute } from '@assistant-ui/react-google-adk/server';
|
|
36
|
+
* import { runner } from './agent';
|
|
37
|
+
*
|
|
38
|
+
* export const POST = createAdkApiRoute({
|
|
39
|
+
* runner,
|
|
40
|
+
* userId: "default-user",
|
|
41
|
+
* sessionId: (req) => new URL(req.url).searchParams.get("sessionId") ?? "default",
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createAdkApiRoute(options: CreateAdkApiRouteOptions): (req: Request) => Promise<Response>;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=createAdkApiRoute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdkApiRoute.d.ts","sourceRoot":"","sources":["../../src/server/createAdkApiRoute.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,4BAAyB;AAE9E;;;GAGG;AACH,KAAK,SAAS,GAAG;IACf,QAAQ,CACN,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9D;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjE;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8BrC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
|
|
2
|
+
import { adkEventStream } from "./adkEventStream.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,
|
|
5
|
+
* and `adkEventStream` into a single function.
|
|
6
|
+
*
|
|
7
|
+
* @example Next.js App Router
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { createAdkApiRoute } from '@assistant-ui/react-google-adk/server';
|
|
10
|
+
* import { runner } from './agent';
|
|
11
|
+
*
|
|
12
|
+
* export const POST = createAdkApiRoute({
|
|
13
|
+
* runner,
|
|
14
|
+
* userId: "default-user",
|
|
15
|
+
* sessionId: (req) => new URL(req.url).searchParams.get("sessionId") ?? "default",
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function createAdkApiRoute(options) {
|
|
20
|
+
return async (req) => {
|
|
21
|
+
const parsed = await parseAdkRequest(req);
|
|
22
|
+
const newMessage = toAdkContent(parsed);
|
|
23
|
+
const userId = typeof options.userId === "function"
|
|
24
|
+
? await options.userId(req)
|
|
25
|
+
: options.userId;
|
|
26
|
+
const sessionId = typeof options.sessionId === "function"
|
|
27
|
+
? await options.sessionId(req)
|
|
28
|
+
: options.sessionId;
|
|
29
|
+
const events = options.runner.runAsync({
|
|
30
|
+
userId,
|
|
31
|
+
sessionId,
|
|
32
|
+
newMessage,
|
|
33
|
+
...(parsed.stateDelta != null && { stateDelta: parsed.stateDelta }),
|
|
34
|
+
...(parsed.config.runConfig != null && {
|
|
35
|
+
runConfig: parsed.config.runConfig,
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
return adkEventStream(events, options.onError ? { onError: options.onError } : undefined);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=createAdkApiRoute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdkApiRoute.js","sourceRoot":"","sources":["../../src/server/createAdkApiRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,6BAA0B;AAClE,OAAO,EAAE,cAAc,EAA8B,4BAAyB;AAoC9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiC;IAEjC,OAAO,KAAK,EAAE,GAAY,EAAqB,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,MAAM,GACV,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YAClC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAErB,MAAM,SAAS,GACb,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU;YACrC,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAExB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,MAAM;YACN,SAAS;YACT,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YACnE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI;gBACrC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;aACnC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,cAAc,CACnB,MAAM,EACN,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { adkEventStream, type AdkEventStreamOptions } from "./adkEventStream.js";
|
|
2
|
+
export { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
|
|
3
|
+
export { createAdkApiRoute, type CreateAdkApiRouteOptions, } from "./createAdkApiRoute.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,4BAAyB;AAC9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,6BAA0B;AAClE,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,+BAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,4BAAyB;AAC9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,6BAA0B;AAClE,OAAO,EACL,iBAAiB,GAElB,+BAA4B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AdkSendMessageConfig } from "../types.js";
|
|
2
|
+
type ParsedAdkRequest = {
|
|
3
|
+
type: "message";
|
|
4
|
+
text: string;
|
|
5
|
+
parts?: Array<Record<string, unknown>> | undefined;
|
|
6
|
+
config: AdkSendMessageConfig;
|
|
7
|
+
stateDelta?: Record<string, unknown> | undefined;
|
|
8
|
+
} | {
|
|
9
|
+
type: "tool-result";
|
|
10
|
+
toolCallId: string;
|
|
11
|
+
toolName: string;
|
|
12
|
+
result: unknown;
|
|
13
|
+
isError: boolean;
|
|
14
|
+
config: AdkSendMessageConfig;
|
|
15
|
+
stateDelta?: Record<string, unknown> | undefined;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Parses an incoming HTTP request into a structured ADK request.
|
|
19
|
+
*
|
|
20
|
+
* Supports two request shapes:
|
|
21
|
+
*
|
|
22
|
+
* 1. User message:
|
|
23
|
+
* ```json
|
|
24
|
+
* { "message": "Hello", "runConfig": {}, "stateDelta": {} }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* 2. Tool result:
|
|
28
|
+
* ```json
|
|
29
|
+
* {
|
|
30
|
+
* "type": "tool-result",
|
|
31
|
+
* "toolCallId": "call_123",
|
|
32
|
+
* "toolName": "search",
|
|
33
|
+
* "result": { ... },
|
|
34
|
+
* "isError": false
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare const parseAdkRequest: (request: Request) => Promise<ParsedAdkRequest>;
|
|
39
|
+
/**
|
|
40
|
+
* Converts a parsed ADK request into a Google GenAI Content object
|
|
41
|
+
* suitable for `Runner.runAsync({ newMessage })`.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const parsed = await parseAdkRequest(req);
|
|
46
|
+
* const newMessage = toAdkContent(parsed);
|
|
47
|
+
* const events = runner.runAsync({ userId, sessionId, newMessage, stateDelta: parsed.stateDelta });
|
|
48
|
+
* return adkEventStream(events);
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare const toAdkContent: (parsed: ParsedAdkRequest) => {
|
|
52
|
+
role: string;
|
|
53
|
+
parts: Array<Record<string, unknown>>;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=parseAdkRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAdkRequest.d.ts","sourceRoot":"","sources":["../../src/server/parseAdkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAiB;AAErD,KAAK,gBAAgB,GACjB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClD,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClD,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,OAAO,KACf,OAAO,CAAC,gBAAgB,CAwC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,gBAAgB,KACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAsBvD,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses an incoming HTTP request into a structured ADK request.
|
|
3
|
+
*
|
|
4
|
+
* Supports two request shapes:
|
|
5
|
+
*
|
|
6
|
+
* 1. User message:
|
|
7
|
+
* ```json
|
|
8
|
+
* { "message": "Hello", "runConfig": {}, "stateDelta": {} }
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* 2. Tool result:
|
|
12
|
+
* ```json
|
|
13
|
+
* {
|
|
14
|
+
* "type": "tool-result",
|
|
15
|
+
* "toolCallId": "call_123",
|
|
16
|
+
* "toolName": "search",
|
|
17
|
+
* "result": { ... },
|
|
18
|
+
* "isError": false
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const parseAdkRequest = async (request) => {
|
|
23
|
+
let body;
|
|
24
|
+
try {
|
|
25
|
+
body = (await request.json());
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error("Invalid JSON in request body");
|
|
29
|
+
}
|
|
30
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
31
|
+
throw new Error("Request body must be a JSON object");
|
|
32
|
+
}
|
|
33
|
+
const config = {};
|
|
34
|
+
if (body.runConfig !== undefined)
|
|
35
|
+
config.runConfig = body.runConfig;
|
|
36
|
+
if (body.checkpointId !== undefined)
|
|
37
|
+
config.checkpointId = body.checkpointId;
|
|
38
|
+
const stateDelta = body.stateDelta;
|
|
39
|
+
if (body.type === "tool-result") {
|
|
40
|
+
return {
|
|
41
|
+
type: "tool-result",
|
|
42
|
+
toolCallId: body.toolCallId ?? "",
|
|
43
|
+
toolName: body.toolName ?? "",
|
|
44
|
+
result: body.result,
|
|
45
|
+
isError: body.isError ?? false,
|
|
46
|
+
config,
|
|
47
|
+
...(stateDelta != null && { stateDelta }),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
type: "message",
|
|
52
|
+
text: body.message ?? "",
|
|
53
|
+
...(body.parts != null && {
|
|
54
|
+
parts: body.parts,
|
|
55
|
+
}),
|
|
56
|
+
config,
|
|
57
|
+
...(stateDelta != null && { stateDelta }),
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Converts a parsed ADK request into a Google GenAI Content object
|
|
62
|
+
* suitable for `Runner.runAsync({ newMessage })`.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const parsed = await parseAdkRequest(req);
|
|
67
|
+
* const newMessage = toAdkContent(parsed);
|
|
68
|
+
* const events = runner.runAsync({ userId, sessionId, newMessage, stateDelta: parsed.stateDelta });
|
|
69
|
+
* return adkEventStream(events);
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export const toAdkContent = (parsed) => {
|
|
73
|
+
if (parsed.type === "tool-result") {
|
|
74
|
+
return {
|
|
75
|
+
role: "user",
|
|
76
|
+
parts: [
|
|
77
|
+
{
|
|
78
|
+
functionResponse: {
|
|
79
|
+
name: parsed.toolName,
|
|
80
|
+
id: parsed.toolCallId,
|
|
81
|
+
response: parsed.result,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// If raw parts are provided (multimodal), use them directly
|
|
88
|
+
if (parsed.parts?.length) {
|
|
89
|
+
return { role: "user", parts: parsed.parts };
|
|
90
|
+
}
|
|
91
|
+
return { role: "user", parts: [{ text: parsed.text }] };
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=parseAdkRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseAdkRequest.js","sourceRoot":"","sources":["../../src/server/parseAdkRequest.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,OAAgB,EACW,EAAE;IAC7B,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACpE,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QACjC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAsB,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAiD,CAAC;IAE1E,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,EAAE;YAC7C,QAAQ,EAAG,IAAI,CAAC,QAAmB,IAAI,EAAE;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAG,IAAI,CAAC,OAAmB,IAAI,KAAK;YAC3C,MAAM;YACN,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAG,IAAI,CAAC,OAAkB,IAAI,EAAE;QACpC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI;YACxB,KAAK,EAAE,IAAI,CAAC,KAAuC;SACpD,CAAC;QACF,MAAM;QACN,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAwB,EACiC,EAAE;IAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,gBAAgB,EAAE;wBAChB,IAAI,EAAE,MAAM,CAAC,QAAQ;wBACrB,EAAE,EAAE,MAAM,CAAC,UAAU;wBACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;qBACxB;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdkEvent, AdkStructuredEvent } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a raw `AdkEvent` into an array of structured, typed events.
|
|
4
|
+
* Useful for building custom event renderers.
|
|
5
|
+
*/
|
|
6
|
+
export declare function toAdkStructuredEvents(event: AdkEvent): AdkStructuredEvent[];
|
|
7
|
+
//# sourceMappingURL=structuredEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredEvents.d.ts","sourceRoot":"","sources":["../src/structuredEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAgB;AAG5D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAyE3E"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isFinalResponse } from "./AdkEventAccumulator.js";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a raw `AdkEvent` into an array of structured, typed events.
|
|
4
|
+
* Useful for building custom event renderers.
|
|
5
|
+
*/
|
|
6
|
+
export function toAdkStructuredEvents(event) {
|
|
7
|
+
const result = [];
|
|
8
|
+
if (event.errorCode || event.errorMessage) {
|
|
9
|
+
const err = { type: "error" };
|
|
10
|
+
if (event.errorCode != null)
|
|
11
|
+
err.errorCode = event.errorCode;
|
|
12
|
+
if (event.errorMessage != null)
|
|
13
|
+
err.errorMessage = event.errorMessage;
|
|
14
|
+
result.push(err);
|
|
15
|
+
}
|
|
16
|
+
const parts = event.content?.parts;
|
|
17
|
+
if (parts) {
|
|
18
|
+
for (const part of parts) {
|
|
19
|
+
if (part.text != null) {
|
|
20
|
+
if (part.thought) {
|
|
21
|
+
result.push({ type: "thought", content: part.text });
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
result.push({ type: "content", content: part.text });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (part.functionCall) {
|
|
28
|
+
const call = {
|
|
29
|
+
type: "tool_call",
|
|
30
|
+
call: { name: part.functionCall.name, args: part.functionCall.args },
|
|
31
|
+
};
|
|
32
|
+
if (part.functionCall.id != null)
|
|
33
|
+
call.call.id = part.functionCall.id;
|
|
34
|
+
result.push(call);
|
|
35
|
+
}
|
|
36
|
+
if (part.functionResponse) {
|
|
37
|
+
const tr = {
|
|
38
|
+
type: "tool_result",
|
|
39
|
+
result: {
|
|
40
|
+
name: part.functionResponse.name,
|
|
41
|
+
response: part.functionResponse.response,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
if (part.functionResponse.id != null)
|
|
45
|
+
tr.result.id = part.functionResponse.id;
|
|
46
|
+
result.push(tr);
|
|
47
|
+
}
|
|
48
|
+
if (part.executableCode) {
|
|
49
|
+
const ce = {
|
|
50
|
+
type: "call_code",
|
|
51
|
+
code: { code: part.executableCode.code },
|
|
52
|
+
};
|
|
53
|
+
if (part.executableCode.language != null)
|
|
54
|
+
ce.code.language = part.executableCode.language;
|
|
55
|
+
result.push(ce);
|
|
56
|
+
}
|
|
57
|
+
if (part.codeExecutionResult) {
|
|
58
|
+
const cr = {
|
|
59
|
+
type: "code_result",
|
|
60
|
+
result: { output: part.codeExecutionResult.output },
|
|
61
|
+
};
|
|
62
|
+
if (part.codeExecutionResult.outcome != null)
|
|
63
|
+
cr.result.outcome = part.codeExecutionResult.outcome;
|
|
64
|
+
result.push(cr);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (event.actions?.requestedToolConfirmations) {
|
|
69
|
+
result.push({
|
|
70
|
+
type: "tool_confirmation",
|
|
71
|
+
confirmations: event.actions.requestedToolConfirmations,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (isFinalResponse(event) && result.length === 0) {
|
|
75
|
+
result.push({ type: "finished" });
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=structuredEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredEvents.js","sourceRoot":"","sources":["../src/structuredEvents.ts"],"names":[],"mappings":"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"}
|