experimental-a2 0.12.0 → 0.14.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/CHANGELOG.md +47 -0
- package/dist/{actor-DJi3RsNu.d.ts → actor-BfQSE0KC.d.ts} +4 -4
- package/dist/{actor-DJi3RsNu.d.ts.map → actor-BfQSE0KC.d.ts.map} +1 -1
- package/dist/actor-client.d.ts +1 -1
- package/dist/actor-client.js +1 -1
- package/dist/actor-react.d.ts +3 -3
- package/dist/actor-react.js +2 -2
- package/dist/{actor-shared-DI7J5upy.js → actor-shared-B5tJfzt-.js} +2 -2
- package/dist/{actor-shared-DI7J5upy.js.map → actor-shared-B5tJfzt-.js.map} +1 -1
- package/dist/actor.d.ts +1 -1
- package/dist/actor.js +3 -3
- package/dist/ai-Cai-lCbj.d.ts +580 -0
- package/dist/ai-Cai-lCbj.d.ts.map +1 -0
- package/dist/ai-control-CcD4hh3y.js +119 -0
- package/dist/ai-control-CcD4hh3y.js.map +1 -0
- package/dist/ai-server.d.ts +16 -8
- package/dist/ai-server.d.ts.map +1 -1
- package/dist/ai-server.js +1322 -475
- package/dist/ai-server.js.map +1 -1
- package/dist/ai.d.ts +2 -334
- package/dist/ai.js +838 -85
- package/dist/ai.js.map +1 -1
- package/dist/{client-P_NNNRM-.d.ts → client-BAEABRZB.d.ts} +2 -2
- package/dist/{client-P_NNNRM-.d.ts.map → client-BAEABRZB.d.ts.map} +1 -1
- package/dist/{client-Bf6uSEAk.js → client-BYzHjkwU.js} +21 -6
- package/dist/client-BYzHjkwU.js.map +1 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/{contract-48bUMgcL.js → contract-CKRg_E4q.js} +3 -26
- package/dist/contract-CKRg_E4q.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/react.d.ts +2 -2
- package/dist/react.js +1 -1
- package/dist/{reducer-DJKWm3cp.d.ts → reducer-BcS9VDKC.d.ts} +4 -1
- package/dist/{reducer-DJKWm3cp.d.ts.map → reducer-BcS9VDKC.d.ts.map} +1 -1
- package/dist/reducer-DEMjEY_O.js +29 -0
- package/dist/reducer-DEMjEY_O.js.map +1 -0
- package/dist/scheduler-qstash.d.ts +2 -2
- package/dist/scheduler-qstash.js +1 -1
- package/dist/scheduler-vercel.d.ts +2 -2
- package/dist/scheduler-vercel.js +1 -1
- package/dist/{server-DjZZa1wr.d.ts → server-Bp5Nd1pF.d.ts} +3 -3
- package/dist/{server-DjZZa1wr.d.ts.map → server-Bp5Nd1pF.d.ts.map} +1 -1
- package/dist/{server-BeNADlCI.js → server-CjJSGcF7.js} +4 -3
- package/dist/server-CjJSGcF7.js.map +1 -0
- package/dist/server.d.ts +3 -3
- package/dist/server.js +1 -1
- package/dist/{store-DtDOWLSn.d.ts → store-D_yhNdPz.d.ts} +7 -2
- package/dist/{store-DtDOWLSn.d.ts.map → store-D_yhNdPz.d.ts.map} +1 -1
- package/dist/store-N8PXxDAS.js.map +1 -1
- package/dist/store-memory.d.ts +1 -1
- package/dist/store-postgres.d.ts +1 -1
- package/dist/store-postgres.js +19 -0
- package/dist/store-postgres.js.map +1 -1
- package/dist/store-redis-http.d.ts +1 -1
- package/dist/store-redis-http.js +1 -1
- package/dist/{store-redis-notify-BUCyXOn0.js → store-redis-notify-D2EI6gwX.js} +27 -2
- package/dist/store-redis-notify-D2EI6gwX.js.map +1 -0
- package/dist/store-redis.d.ts +1 -1
- package/dist/store-redis.js +1 -1
- package/dist/store-sqlite.d.ts +1 -1
- package/docs/guides/06-ai-agents.mdx +361 -76
- package/docs/reference/01-api.mdx +159 -27
- package/examples/playground/app/agent/[agentId]/agent-client.tsx +145 -33
- package/examples/playground/app/agent/[agentId]/agent-queue.tsx +289 -0
- package/examples/playground/app/agent/[agentId]/compaction/route.ts +14 -0
- package/examples/playground/app/agent/[agentId]/compaction-event.tsx +38 -0
- package/examples/playground/app/agent/[agentId]/compaction-panel.tsx +294 -0
- package/examples/playground/app/agent/compaction-settings.test.ts +144 -0
- package/examples/playground/app/agent/compaction-settings.ts +49 -0
- package/examples/playground/app/agent/compaction-timeline.test.ts +337 -0
- package/examples/playground/app/agent/compaction-timeline.ts +198 -0
- package/examples/playground/app/agent/model.ts +56 -1
- package/examples/playground/app/agent/server.ts +9 -2
- package/examples/playground/app/chat/[chatId]/chat-client.tsx +3 -13
- package/examples/playground/app/chat/model.ts +2 -2
- package/examples/playground/app/chat/server.ts +24 -17
- package/examples/playground/app/globals.css +333 -0
- package/examples/playground/package.json +1 -1
- package/package.json +1 -1
- package/src/ai-client-state.ts +185 -0
- package/src/ai-control-server.ts +829 -0
- package/src/ai-control-state.ts +152 -0
- package/src/ai-control.ts +139 -0
- package/src/ai-coordinator.ts +99 -32
- package/src/ai-model-metadata.ts +108 -0
- package/src/ai-progress-batches.ts +68 -0
- package/src/ai-projector.ts +76 -15
- package/src/ai-sdk-step.ts +5 -2
- package/src/ai-server.ts +920 -638
- package/src/ai.ts +650 -110
- package/src/client.ts +31 -9
- package/src/licenses/Apache-2.0.txt +55 -0
- package/src/parse-partial-json.ts +441 -0
- package/src/reducer.ts +6 -0
- package/src/server.ts +8 -4
- package/src/store-postgres.ts +27 -0
- package/src/store-redis-core.ts +53 -1
- package/src/store-redis-notify.ts +1 -0
- package/src/store.ts +6 -0
- package/dist/ai.d.ts.map +0 -1
- package/dist/client-Bf6uSEAk.js.map +0 -1
- package/dist/contract-48bUMgcL.js.map +0 -1
- package/dist/server-BeNADlCI.js.map +0 -1
- package/dist/store-redis-notify-BUCyXOn0.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
//#region src/ai-control-state.ts
|
|
2
|
+
const container = (value) => typeof value === "object" && value !== null;
|
|
3
|
+
const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
|
|
4
|
+
const controlChanges = ({ before, after }) => {
|
|
5
|
+
const changes = [];
|
|
6
|
+
const visit = (left, right, path) => {
|
|
7
|
+
if (same(left, right)) return;
|
|
8
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
9
|
+
let prefix = 0;
|
|
10
|
+
while (prefix < Math.min(left.length, right.length) && same(left[prefix], right[prefix])) prefix += 1;
|
|
11
|
+
let suffix = 0;
|
|
12
|
+
while (suffix < Math.min(left.length, right.length) - prefix && same(left[left.length - 1 - suffix], right[right.length - 1 - suffix])) suffix += 1;
|
|
13
|
+
if (left.length === right.length) for (let index = prefix; index < left.length - suffix; index += 1) visit(left[index], right[index], [...path, index]);
|
|
14
|
+
else changes.push({
|
|
15
|
+
path,
|
|
16
|
+
splice: {
|
|
17
|
+
index: prefix,
|
|
18
|
+
deleteCount: left.length - prefix - suffix,
|
|
19
|
+
items: right.slice(prefix, right.length - suffix)
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (container(left) && container(right) && !Array.isArray(left) && !Array.isArray(right)) {
|
|
25
|
+
for (const key of Object.keys(left)) if (!Object.hasOwn(right, key)) changes.push({
|
|
26
|
+
path: [...path, key],
|
|
27
|
+
remove: true
|
|
28
|
+
});
|
|
29
|
+
for (const key of Object.keys(right)) visit(Object.hasOwn(left, key) ? left[key] : void 0, right[key], [...path, key]);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
changes.push({
|
|
33
|
+
path,
|
|
34
|
+
value: right
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
visit(before, after, []);
|
|
38
|
+
return changes;
|
|
39
|
+
};
|
|
40
|
+
const applyControlChanges = ({ state, changes }) => {
|
|
41
|
+
if (changes.length === 0) return state;
|
|
42
|
+
let next = structuredClone(state);
|
|
43
|
+
for (const change of changes) {
|
|
44
|
+
const path = change.path;
|
|
45
|
+
if (path.length === 0) {
|
|
46
|
+
next = structuredClone(change.value);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
let target = next;
|
|
50
|
+
for (const key of path.slice(0, -1)) {
|
|
51
|
+
if (!container(target) || !Object.hasOwn(target, key)) throw new TypeError("Invalid AI control change path");
|
|
52
|
+
target = target[key];
|
|
53
|
+
}
|
|
54
|
+
if (!container(target)) throw new TypeError("Invalid AI control change target");
|
|
55
|
+
const parent = target;
|
|
56
|
+
const key = path.at(-1);
|
|
57
|
+
if (change.remove) delete parent[key];
|
|
58
|
+
else if (change.splice) {
|
|
59
|
+
const items = parent[key];
|
|
60
|
+
Object.defineProperty(parent, key, {
|
|
61
|
+
value: [
|
|
62
|
+
...items.slice(0, change.splice.index),
|
|
63
|
+
...structuredClone(change.splice.items),
|
|
64
|
+
...items.slice(change.splice.index + change.splice.deleteCount)
|
|
65
|
+
],
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
writable: true
|
|
69
|
+
});
|
|
70
|
+
} else if (change.move) {
|
|
71
|
+
const items = parent[key];
|
|
72
|
+
const [item] = items.splice(change.move.from, 1);
|
|
73
|
+
items.splice(change.move.to, 0, item);
|
|
74
|
+
} else Object.defineProperty(parent, key, {
|
|
75
|
+
value: structuredClone(change.value),
|
|
76
|
+
enumerable: true,
|
|
77
|
+
configurable: true,
|
|
78
|
+
writable: true
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return next;
|
|
82
|
+
};
|
|
83
|
+
const controlCommit = (options) => {
|
|
84
|
+
const active = options.after.active;
|
|
85
|
+
const response = options.after.coordinator.response;
|
|
86
|
+
return {
|
|
87
|
+
changes: [...options.moves, ...controlChanges({
|
|
88
|
+
before: options.before,
|
|
89
|
+
after: options.after
|
|
90
|
+
})],
|
|
91
|
+
view: {
|
|
92
|
+
turnId: active?.turnId ?? null,
|
|
93
|
+
version: active?.version ?? null,
|
|
94
|
+
phase: active?.phase ?? null,
|
|
95
|
+
paused: options.after.inbox.paused,
|
|
96
|
+
closed: options.after.coordinator.closed,
|
|
97
|
+
requestId: response?.activeRequestId ?? null,
|
|
98
|
+
responseMessageId: response?.responseMessageId ?? null
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/ai-control.ts
|
|
104
|
+
const initialControlState = () => ({
|
|
105
|
+
reservedIds: {},
|
|
106
|
+
inbox: {
|
|
107
|
+
paused: false,
|
|
108
|
+
items: []
|
|
109
|
+
},
|
|
110
|
+
active: null,
|
|
111
|
+
coordinator: {
|
|
112
|
+
closed: false,
|
|
113
|
+
queued: []
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
//#endregion
|
|
117
|
+
export { applyControlChanges as n, controlCommit as r, initialControlState as t };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=ai-control-CcD4hh3y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-control-CcD4hh3y.js","names":[],"sources":["../src/ai-control-state.ts","../src/ai-control.ts"],"sourcesContent":["import type {\n AIControlState,\n ControlCommit,\n ControlChange,\n} from './ai-control.ts'\nimport type { UIMessage } from 'ai'\n\ntype RecordValue = Record<string, unknown> | unknown[]\nconst container = (value: unknown): value is RecordValue =>\n typeof value === 'object' && value !== null\nconst same = (left: unknown, right: unknown): boolean =>\n JSON.stringify(left) === JSON.stringify(right)\n\nexport const controlChanges = ({\n before,\n after,\n}: {\n before: unknown\n after: unknown\n}): ControlChange[] => {\n const changes: ControlChange[] = []\n const visit = (\n left: unknown,\n right: unknown,\n path: (string | number)[],\n ): void => {\n if (same(left, right)) return\n if (Array.isArray(left) && Array.isArray(right)) {\n let prefix = 0\n while (\n prefix < Math.min(left.length, right.length) &&\n same(left[prefix], right[prefix])\n )\n prefix += 1\n let suffix = 0\n while (\n suffix < Math.min(left.length, right.length) - prefix &&\n same(left[left.length - 1 - suffix], right[right.length - 1 - suffix])\n )\n suffix += 1\n if (left.length === right.length) {\n for (let index = prefix; index < left.length - suffix; index += 1)\n visit(left[index], right[index], [...path, index])\n } else\n changes.push({\n path,\n splice: {\n index: prefix,\n deleteCount: left.length - prefix - suffix,\n items: right.slice(prefix, right.length - suffix),\n },\n })\n return\n }\n if (\n container(left) &&\n container(right) &&\n !Array.isArray(left) &&\n !Array.isArray(right)\n ) {\n for (const key of Object.keys(left))\n if (!Object.hasOwn(right, key))\n changes.push({ path: [...path, key], remove: true })\n for (const key of Object.keys(right))\n visit(Object.hasOwn(left, key) ? left[key] : undefined, right[key], [\n ...path,\n key,\n ])\n return\n }\n changes.push({ path, value: right })\n }\n visit(before, after, [])\n return changes\n}\n\nexport const applyControlChanges = <T>({\n state,\n changes,\n}: {\n state: T\n changes: readonly ControlChange[]\n}): T => {\n if (changes.length === 0) return state\n let next = structuredClone(state)\n for (const change of changes) {\n const path = change.path\n if (path.length === 0) {\n next = structuredClone(change.value) as T\n continue\n }\n let target: unknown = next\n for (const key of path.slice(0, -1)) {\n if (!container(target) || !Object.hasOwn(target, key))\n throw new TypeError('Invalid AI control change path')\n target = (target as Record<string | number, unknown>)[key]\n }\n if (!container(target))\n throw new TypeError('Invalid AI control change target')\n const parent = target as Record<string | number, unknown>\n const key = path.at(-1)!\n if (change.remove) delete parent[key]\n else if (change.splice) {\n const items = parent[key] as unknown[]\n Object.defineProperty(parent, key, {\n value: [\n ...items.slice(0, change.splice.index),\n ...structuredClone(change.splice.items),\n ...items.slice(change.splice.index + change.splice.deleteCount),\n ],\n enumerable: true,\n configurable: true,\n writable: true,\n })\n } else if (change.move) {\n const items = parent[key] as unknown[]\n const [item] = items.splice(change.move.from, 1)\n items.splice(change.move.to, 0, item)\n } else\n Object.defineProperty(parent, key, {\n value: structuredClone(change.value),\n enumerable: true,\n configurable: true,\n writable: true,\n })\n }\n return next\n}\n\nexport const controlCommit = <M extends UIMessage>(options: {\n before: AIControlState<M>\n after: AIControlState<M>\n moves: ControlChange[]\n}): ControlCommit => {\n const active = options.after.active\n const response = options.after.coordinator.response\n return {\n changes: [\n ...options.moves,\n ...controlChanges({ before: options.before, after: options.after }),\n ],\n view: {\n turnId: active?.turnId ?? null,\n version: active?.version ?? null,\n phase: active?.phase ?? null,\n paused: options.after.inbox.paused,\n closed: options.after.coordinator.closed,\n requestId: response?.activeRequestId ?? null,\n responseMessageId: response?.responseMessageId ?? null,\n },\n }\n}\n","import type { UIMessage } from 'ai'\nimport type { AICoordinatorState } from './ai-coordinator.ts'\nimport type {\n ApprovalRespondedPayload,\n GenerationStartedPayload,\n InputRequestedPayload,\n InputRespondedPayload,\n MessageInterruptedPayload,\n RetryRequestedPayload,\n ToolCalledPayload,\n ToolResultPayload,\n} from './ai.ts'\n\nexport type InboxItem<M extends UIMessage = UIMessage> = {\n id: string\n revision: number\n message: M\n generate: boolean\n afterStepOf?: string\n}\n\nexport type ControlCommand<M extends UIMessage = UIMessage> =\n | { action: 'send'; message: M; generate?: boolean }\n | { action: 'edit'; message: M; expectedRevision: number }\n | { action: 'move'; inputId: string; beforeId: string | null }\n | { action: 'remove'; inputId: string }\n | {\n action: 'send-now'\n inputId: string\n turnId: string | null\n lastSeenIndex?: number\n }\n | { action: 'stop'; turnId: string; lastSeenIndex?: number }\n | { action: 'steer'; turnId: string; message: M; lastSeenIndex?: number }\n | { action: 'pause'; when: 'now' | 'after-turn' }\n | { action: 'resume' }\n | { action: 'tool-result'; result: ToolResultPayload }\n | { action: 'approval'; response: ApprovalRespondedPayload }\n | { action: 'input'; response: InputRespondedPayload }\n | { action: 'request-input'; request: InputRequestedPayload }\n | { action: 'retry'; request: RetryRequestedPayload }\n | { action: 'interrupt'; request: MessageInterruptedPayload }\n\nexport type ControlReceipt = {\n commandId: string\n work?: true\n outcome: 'applied' | 'rejected'\n reason?:\n | 'already-active'\n | 'revision-conflict'\n | 'stale-turn'\n | 'not-found'\n | 'duplicate-input'\n | 'closed'\n | 'stale-work'\n | 'not-user-input'\n}\n\nexport type ActiveTurn<M extends UIMessage = UIMessage> = {\n turnId: string\n input: InboxItem<M>\n phase:\n | 'starting'\n | 'generating'\n | 'tools'\n | 'waiting'\n | 'failed'\n | 'pausing'\n | 'paused'\n}\n\nexport type ControlWork = {\n id: string\n version: number\n settled: boolean\n attempt?: number\n facts?: string[]\n}\n\nexport type AIControlState<M extends UIMessage = UIMessage> = {\n reservedIds: Record<string, true | 'removed'>\n inbox: { paused: boolean; items: InboxItem<M>[] }\n active:\n | (ActiveTurn<M> & {\n version: number\n suspended: boolean\n model: ControlWork | null\n })\n | null\n coordinator: AICoordinatorState\n}\n\nexport type WorkFact = { type: string; id: string; payload: unknown }\nexport type WorkReport = {\n attempt: number\n workId: string\n turnId: string\n version: number\n kind: 'model' | 'tool'\n settled: boolean\n events: WorkFact[]\n}\n\nexport type ToolExecutionRequest = {\n turnId: string\n version: number\n call: ToolCalledPayload\n generation: GenerationStartedPayload\n}\n\nexport const initialControlState = <\n M extends UIMessage,\n>(): AIControlState<M> => ({\n reservedIds: {},\n inbox: { paused: false, items: [] },\n active: null,\n coordinator: { closed: false, queued: [] },\n})\n\nexport type ControlChange = {\n path: (string | number)[]\n value?: unknown\n remove?: true\n splice?: { index: number; deleteCount: number; items: unknown[] }\n move?: { from: number; to: number }\n}\n\nexport type ControlCommit = {\n changes: ControlChange[]\n view: {\n turnId: string | null\n version: number | null\n phase: ActiveTurn['phase'] | null\n paused: boolean\n closed: boolean\n requestId: string | null\n responseMessageId: string | null\n }\n}\n"],"mappings":"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"}
|
package/dist/ai-server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as ContractEvent, s as EventDefs } from "./reducer-
|
|
2
|
-
import { n as A2Server, p as ServerOptions } from "./server-
|
|
3
|
-
import {
|
|
4
|
-
import { Instructions, LanguageModel, TextStreamPart, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
|
|
1
|
+
import { a as ContractEvent, s as EventDefs } from "./reducer-BcS9VDKC.js";
|
|
2
|
+
import { n as A2Server, p as ServerOptions, s as HandlerContext } from "./server-Bp5Nd1pF.js";
|
|
3
|
+
import { l as AgentToolContext, o as AgentDefinition, r as AIState, t as AIEventDefs, u as AgentToolEventDefs } from "./ai-Cai-lCbj.js";
|
|
4
|
+
import { Instructions, LanguageModel, ModelMessage, TextStreamPart, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
|
|
5
5
|
//#region src/ai-sdk-step.d.ts
|
|
6
6
|
type StreamTextOptions<T extends ToolSet$1> = Parameters<typeof streamText<T>>[0];
|
|
7
7
|
type ModelStepTimeout<T extends ToolSet$1> = number | Omit<Exclude<StreamTextOptions<T>["timeout"], number | undefined>, "toolMs" | "tools">;
|
|
@@ -44,8 +44,9 @@ type AgentGenerateContext<M extends UIMessage, D extends AIEventDefs<M> & EventD
|
|
|
44
44
|
generationId: string;
|
|
45
45
|
responseMessageId: string;
|
|
46
46
|
messages: M[];
|
|
47
|
+
modelMessages: ModelMessage[];
|
|
47
48
|
state: AIState<M>;
|
|
48
|
-
|
|
49
|
+
session: Pick<HandlerContext<D>["session"], "state">;
|
|
49
50
|
signal: AbortSignal;
|
|
50
51
|
model: LanguageModel;
|
|
51
52
|
tools: T;
|
|
@@ -60,18 +61,25 @@ type AgentMessageMetadata<M extends UIMessage, D extends AIEventDefs<M> & EventD
|
|
|
60
61
|
type AgentResolverContext<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = {
|
|
61
62
|
event: ContractEvent<D, "ai.generation.requested">;
|
|
62
63
|
state: AIState<M>;
|
|
63
|
-
|
|
64
|
+
session: Pick<HandlerContext<D>["session"], "state">;
|
|
64
65
|
signal: AbortSignal;
|
|
65
66
|
};
|
|
66
67
|
type Resolvable<T, C> = T | ((context: C) => T | Promise<T>);
|
|
67
68
|
type CompactionPolicy<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = {
|
|
68
69
|
shouldCompact(context: AgentResolverContext<M, D> & {
|
|
69
70
|
messages: M[];
|
|
71
|
+
modelMessages: ModelMessage[];
|
|
70
72
|
}): boolean | Promise<boolean>;
|
|
71
73
|
compact(context: AgentResolverContext<M, D> & {
|
|
72
74
|
messages: M[];
|
|
75
|
+
modelMessages: ModelMessage[];
|
|
73
76
|
}): M[] | Promise<M[]>;
|
|
74
77
|
};
|
|
78
|
+
type AutomaticCompaction = {
|
|
79
|
+
thresholdTokens?: number;
|
|
80
|
+
instructions?: string;
|
|
81
|
+
};
|
|
82
|
+
type CompactionOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = false | AutomaticCompaction | CompactionPolicy<M, D>;
|
|
75
83
|
type AgentGenerationSettings<T extends ToolSet> = AISDKStepSettings<T>;
|
|
76
84
|
type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet> = {
|
|
77
85
|
agent: AgentDefinition<M, D>;
|
|
@@ -92,7 +100,7 @@ type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & Event
|
|
|
92
100
|
* The custom stream owns its metadata chunks.
|
|
93
101
|
*/
|
|
94
102
|
generate?: AgentGenerate<M, D, T>;
|
|
95
|
-
compaction?:
|
|
103
|
+
compaction?: Resolvable<CompactionOptions<M, D>, AgentResolverContext<M, D>>;
|
|
96
104
|
/** Progress is durably flushed at either limit, whichever is reached first. */
|
|
97
105
|
progress?: {
|
|
98
106
|
maxChunks?: number;
|
|
@@ -112,5 +120,5 @@ declare function createHandlers<M extends UIMessage, D extends AIEventDefs<M> &
|
|
|
112
120
|
/** Assemble an A2 server with the built-in agent handlers and app extensions. */
|
|
113
121
|
declare function createAgentServer<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet>(options: CreateAgentServerOptions<M, D, T>): A2Server<D>;
|
|
114
122
|
//#endregion
|
|
115
|
-
export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentMessageMetadata, AgentResolverContext, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolSet, createAgentServer, createHandlers, runWithHandlerContext };
|
|
123
|
+
export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentMessageMetadata, AgentResolverContext, AutomaticCompaction, CompactionOptions, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolSet, createAgentServer, createHandlers, runWithHandlerContext };
|
|
116
124
|
//# sourceMappingURL=ai-server.d.ts.map
|
package/dist/ai-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":"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"}
|