@anvia/core 1.9.0 → 1.11.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 +1 -1
- package/dist/agent/agent.js +10 -9
- package/dist/agent/index.d.ts +5 -5
- package/dist/agent/index.js +13 -12
- package/dist/agent/resolve-options.js +4 -4
- package/dist/agent/resolved-agent.js +11 -10
- package/dist/agent/team/agent-team.js +13 -12
- package/dist/agent/team/index.js +13 -12
- package/dist/agent/tool-catalog.js +2 -2
- package/dist/{agent-BOoZ3jbr.d.ts → agent-BUEZxrEv.d.ts} +5 -3
- package/dist/{chunk-RW32K6OO.js → chunk-547CQSO2.js} +2 -2
- package/dist/{chunk-5I2NVRHC.js → chunk-5ZM5DB3O.js} +14 -2
- package/dist/chunk-5ZM5DB3O.js.map +1 -0
- package/dist/{chunk-AGPDR6FF.js → chunk-BH7RLRLQ.js} +3 -3
- package/dist/{chunk-KL652GO5.js → chunk-EF26KTFU.js} +2 -2
- package/dist/{chunk-AGOZCYFP.js → chunk-ET5SCES6.js} +6 -6
- package/dist/{chunk-7NWFT422.js → chunk-G4ZKCVBW.js} +3 -3
- package/dist/{chunk-V5NIO3J3.js → chunk-G7NJDOT5.js} +3 -3
- package/dist/{chunk-EWTZ3IAH.js → chunk-J6O567TG.js} +4 -4
- package/dist/{chunk-7AV3PEYW.js → chunk-LQFBCC74.js} +3 -3
- package/dist/chunk-M7LU47T5.js +143 -0
- package/dist/chunk-M7LU47T5.js.map +1 -0
- package/dist/{chunk-PILUQCGV.js → chunk-MNWULFRX.js} +2 -2
- package/dist/{chunk-AKQQG3IX.js → chunk-PFSWAJTY.js} +2 -2
- package/dist/{chunk-MA3TYOKF.js → chunk-PLQAN4EO.js} +25 -1
- package/dist/chunk-PLQAN4EO.js.map +1 -0
- package/dist/{chunk-M32FTMYD.js → chunk-SHSSCEGO.js} +2 -2
- package/dist/chunk-SHSSCEGO.js.map +1 -0
- package/dist/{chunk-AO2QL2VD.js → chunk-SISGNHNO.js} +48 -13
- package/dist/chunk-SISGNHNO.js.map +1 -0
- package/dist/{chunk-WLUWRBQ4.js → chunk-SVFEG2TI.js} +4 -1
- package/dist/chunk-SVFEG2TI.js.map +1 -0
- package/dist/{chunk-3YVGQNTI.js → chunk-WGUE44ZD.js} +3 -3
- package/dist/{chunk-KLDNHX4Z.js → chunk-X4XULHDO.js} +4 -4
- package/dist/{chunk-BRGNY5ZB.js → chunk-Y4Q66NQY.js} +16 -1
- package/dist/chunk-Y4Q66NQY.js.map +1 -0
- package/dist/decision/decide.js +4 -4
- package/dist/decision/errors.js +5 -3
- package/dist/decision/index.d.ts +14 -1
- package/dist/decision/index.js +8 -6
- package/dist/decision/questions.js +3 -3
- package/dist/decision/result.js +3 -3
- package/dist/decision/validation.js +2 -2
- package/dist/embeddings/index.js +7 -7
- package/dist/evals/advanced-metrics.js +2 -2
- package/dist/evals/cli.js +3 -3
- package/dist/evals/index.d.ts +2 -2
- package/dist/evals/index.js +32 -32
- package/dist/evals/metrics.js +4 -4
- package/dist/evals/runner.js +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.js +22 -19
- package/dist/internal/agent-runtime/agent-run.js +8 -6
- package/dist/internal/agent-runtime/continuation-state.js +1 -1
- package/dist/internal/agent-runtime/execution.js +1 -1
- package/dist/internal/agent-runtime/loop-context.js +33 -0
- package/dist/internal/agent-runtime/loop-context.js.map +1 -0
- package/dist/internal/agent-runtime/memory.js +3 -1
- package/dist/internal/agent-runtime/retrieval.js +2 -2
- package/dist/internal/agent-runtime/tool-execution.js +2 -2
- package/dist/internal/agent.d.ts +46 -6
- package/dist/internal/agent.js +21 -11
- package/dist/internal/team-runtime/run.js +12 -11
- package/dist/memory/index.d.ts +2 -2
- package/dist/memory/index.js +1 -1
- package/dist/memory/options.js +1 -1
- package/dist/{middleware-BNxyEpUX.d.ts → middleware-D_WPyilQ.d.ts} +1 -1
- package/dist/observability/index.d.ts +2 -2
- package/dist/pipeline/index.d.ts +3 -3
- package/dist/redaction/index.js +19 -0
- package/dist/redaction/index.js.map +1 -1
- package/dist/skills/index.js +2 -2
- package/dist/skills/load.js +2 -2
- package/dist/skills/tools.js +2 -2
- package/dist/tool/dynamic-tools.js +2 -2
- package/dist/tool/index.d.ts +2 -2
- package/dist/tool/index.js +2 -2
- package/dist/{types-B8KBVXuH.d.ts → types-CaAiktBl.d.ts} +4 -1
- package/dist/vector-store/index.js +2 -2
- package/dist/vector-store/ingest.js +2 -2
- package/dist/vector-store/retrieve.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5I2NVRHC.js.map +0 -1
- package/dist/chunk-AO2QL2VD.js.map +0 -1
- package/dist/chunk-BRGNY5ZB.js.map +0 -1
- package/dist/chunk-M32FTMYD.js.map +0 -1
- package/dist/chunk-MA3TYOKF.js.map +0 -1
- package/dist/chunk-WLUWRBQ4.js.map +0 -1
- /package/dist/{chunk-RW32K6OO.js.map → chunk-547CQSO2.js.map} +0 -0
- /package/dist/{chunk-AGPDR6FF.js.map → chunk-BH7RLRLQ.js.map} +0 -0
- /package/dist/{chunk-KL652GO5.js.map → chunk-EF26KTFU.js.map} +0 -0
- /package/dist/{chunk-AGOZCYFP.js.map → chunk-ET5SCES6.js.map} +0 -0
- /package/dist/{chunk-7NWFT422.js.map → chunk-G4ZKCVBW.js.map} +0 -0
- /package/dist/{chunk-V5NIO3J3.js.map → chunk-G7NJDOT5.js.map} +0 -0
- /package/dist/{chunk-EWTZ3IAH.js.map → chunk-J6O567TG.js.map} +0 -0
- /package/dist/{chunk-7AV3PEYW.js.map → chunk-LQFBCC74.js.map} +0 -0
- /package/dist/{chunk-PILUQCGV.js.map → chunk-MNWULFRX.js.map} +0 -0
- /package/dist/{chunk-AKQQG3IX.js.map → chunk-PFSWAJTY.js.map} +0 -0
- /package/dist/{chunk-3YVGQNTI.js.map → chunk-WGUE44ZD.js.map} +0 -0
- /package/dist/{chunk-KLDNHX4Z.js.map → chunk-X4XULHDO.js.map} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createMemoryCompactionSummary,
|
|
3
|
+
cumulativeCompactedMessageCount
|
|
4
|
+
} from "./chunk-5CKB7RQY.js";
|
|
5
|
+
import {
|
|
6
|
+
MemoryCompactionError
|
|
7
|
+
} from "./chunk-LQJ4KHMY.js";
|
|
8
|
+
import {
|
|
9
|
+
estimateMemoryTokens
|
|
10
|
+
} from "./chunk-SVFEG2TI.js";
|
|
11
|
+
import {
|
|
12
|
+
Usage
|
|
13
|
+
} from "./chunk-HJ6KTQTZ.js";
|
|
14
|
+
import {
|
|
15
|
+
throwIfAborted
|
|
16
|
+
} from "./chunk-USRKPEQN.js";
|
|
17
|
+
|
|
18
|
+
// src/internal/agent-runtime/loop-context.ts
|
|
19
|
+
async function countContextTokens(counter, messages, signal) {
|
|
20
|
+
throwIfAborted(signal);
|
|
21
|
+
const value = await counter(structuredClone(messages));
|
|
22
|
+
throwIfAborted(signal);
|
|
23
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
24
|
+
throw new TypeError("Compaction token counter must return a nonnegative safe integer.");
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function projectLoopContext(messages, checkpoint) {
|
|
28
|
+
if (checkpoint === void 0) return [...messages];
|
|
29
|
+
return [
|
|
30
|
+
createMemoryCompactionSummary(checkpoint.summary, checkpoint.compactedMessageCount),
|
|
31
|
+
...retainedLoopMessages(messages, checkpoint.coveredMessages)
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
function retainedLoopMessages(messages, coveredMessages) {
|
|
35
|
+
const tail = messages.slice(coveredMessages);
|
|
36
|
+
let latestUser = messages.length - 1;
|
|
37
|
+
while (latestUser >= 0 && messages[latestUser].role !== "user") latestUser -= 1;
|
|
38
|
+
return latestUser >= 0 && latestUser < coveredMessages ? [messages[latestUser], ...tail] : tail;
|
|
39
|
+
}
|
|
40
|
+
async function planLoopContext(messages, checkpoint, options, signal) {
|
|
41
|
+
const counter = options.tokenCounter ?? estimateMemoryTokens;
|
|
42
|
+
const projected = projectLoopContext(messages, checkpoint);
|
|
43
|
+
const originalTokenCount = await countContextTokens(counter, projected, signal);
|
|
44
|
+
if (originalTokenCount <= options.afterTokens) return void 0;
|
|
45
|
+
const boundaries = [];
|
|
46
|
+
const pending = /* @__PURE__ */ new Set();
|
|
47
|
+
for (const [index, message] of messages.entries()) {
|
|
48
|
+
if (message.role === "assistant" && Array.isArray(message.content)) {
|
|
49
|
+
for (const part of message.content)
|
|
50
|
+
if (part.type === "tool-call") pending.add(part.toolCallId);
|
|
51
|
+
}
|
|
52
|
+
if (message.role === "tool" && pending.size > 0) {
|
|
53
|
+
for (const part of message.content)
|
|
54
|
+
if (part.type === "tool-result") pending.delete(part.toolCallId);
|
|
55
|
+
if (pending.size === 0) boundaries.push(index + 1);
|
|
56
|
+
} else if (message.role === "assistant" && pending.size === 0 && boundaries.at(-1) === index) {
|
|
57
|
+
boundaries[boundaries.length - 1] = index + 1;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const end = boundaries[boundaries.length - 1 - (options.recentToolTurns ?? 1)] ?? 0;
|
|
61
|
+
if (end <= (checkpoint?.coveredMessages ?? 0)) return void 0;
|
|
62
|
+
const prefix = checkpoint === void 0 ? messages.slice(0, end) : [
|
|
63
|
+
createMemoryCompactionSummary(checkpoint.summary, checkpoint.compactedMessageCount),
|
|
64
|
+
...messages.slice(checkpoint.coveredMessages, end)
|
|
65
|
+
];
|
|
66
|
+
const retained = retainedLoopMessages(messages, end);
|
|
67
|
+
return {
|
|
68
|
+
messages: retained,
|
|
69
|
+
prefix,
|
|
70
|
+
coveredMessages: end,
|
|
71
|
+
compactedMessageCount: cumulativeCompactedMessageCount(messages.slice(0, end)),
|
|
72
|
+
originalMessageCount: projected.length,
|
|
73
|
+
originalTokenCount,
|
|
74
|
+
compactedTokenCount: await countContextTokens(counter, prefix, signal),
|
|
75
|
+
retainedTokenCount: await countContextTokens(counter, retained, signal)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function summarizeLoopContext(plan, compactor, scope, signal) {
|
|
79
|
+
throwIfAborted(signal);
|
|
80
|
+
const result = await compactor({
|
|
81
|
+
scope,
|
|
82
|
+
messages: structuredClone(plan.prefix),
|
|
83
|
+
abortSignal: signal
|
|
84
|
+
});
|
|
85
|
+
throwIfAborted(signal);
|
|
86
|
+
const usage = result?.usage ?? Usage.empty();
|
|
87
|
+
if (typeof result?.summary !== "string" || result.summary.trim().length === 0)
|
|
88
|
+
throw new MemoryCompactionError("Memory compactor returned an empty summary.", { usage });
|
|
89
|
+
for (const value of [
|
|
90
|
+
usage.inputTokens,
|
|
91
|
+
usage.outputTokens,
|
|
92
|
+
usage.totalTokens,
|
|
93
|
+
usage.cachedInputTokens,
|
|
94
|
+
usage.cacheCreationInputTokens
|
|
95
|
+
])
|
|
96
|
+
if (!Number.isSafeInteger(value) || value < 0) throw new TypeError("Invalid compaction usage.");
|
|
97
|
+
if (usage.details !== void 0 && Object.values(usage.details).some((value) => !Number.isFinite(value)))
|
|
98
|
+
throw new TypeError("Invalid compaction usage details.");
|
|
99
|
+
return { summary: result.summary.trim(), usage };
|
|
100
|
+
}
|
|
101
|
+
async function finishLoopContext(plan, result, counter = estimateMemoryTokens, signal, attempts = 1) {
|
|
102
|
+
const checkpoint = {
|
|
103
|
+
summary: result.summary,
|
|
104
|
+
coveredMessages: plan.coveredMessages,
|
|
105
|
+
compactedMessageCount: plan.compactedMessageCount
|
|
106
|
+
};
|
|
107
|
+
const messages = [
|
|
108
|
+
createMemoryCompactionSummary(result.summary, plan.compactedMessageCount),
|
|
109
|
+
...plan.messages
|
|
110
|
+
];
|
|
111
|
+
let resultTokenCount;
|
|
112
|
+
try {
|
|
113
|
+
resultTokenCount = await countContextTokens(counter, messages, signal);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
throw new MemoryCompactionError("Memory token counter failed after summarization.", {
|
|
116
|
+
cause: error,
|
|
117
|
+
usage: result.usage
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
messages,
|
|
122
|
+
checkpoint,
|
|
123
|
+
compaction: {
|
|
124
|
+
originalMessageCount: plan.originalMessageCount,
|
|
125
|
+
compactedMessageCount: plan.prefix.length,
|
|
126
|
+
retainedMessageCount: plan.messages.length,
|
|
127
|
+
originalTokenCount: plan.originalTokenCount,
|
|
128
|
+
compactedTokenCount: plan.compactedTokenCount,
|
|
129
|
+
retainedTokenCount: plan.retainedTokenCount,
|
|
130
|
+
resultTokenCount,
|
|
131
|
+
attempts,
|
|
132
|
+
usage: result.usage
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
projectLoopContext,
|
|
139
|
+
planLoopContext,
|
|
140
|
+
summarizeLoopContext,
|
|
141
|
+
finishLoopContext
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=chunk-M7LU47T5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/agent-runtime/loop-context.ts"],"sourcesContent":["import { Usage, type Message } from \"../../completion\";\nimport {\n createMemoryCompactionSummary,\n cumulativeCompactedMessageCount,\n} from \"../../memory/compaction\";\nimport { MemoryCompactionError } from \"../../memory/errors\";\nimport { estimateMemoryTokens } from \"../../memory/options\";\nimport type {\n MemoryCompactionInfo,\n MemoryCompactor,\n MemoryScope,\n MemoryTokenCounter,\n} from \"../../memory/types\";\nimport { throwIfAborted } from \"../abort\";\n\n/** Indexes refer to the unchanged input transcript of this execution segment. */\nexport type LoopContextCheckpoint = {\n summary: string;\n coveredMessages: number;\n compactedMessageCount: number;\n};\nexport type PreparedLoopContext = {\n messages: Message[];\n checkpoint?: LoopContextCheckpoint | undefined;\n compaction?: MemoryCompactionInfo | undefined;\n};\nexport type LoopContextPlan = {\n messages: Message[];\n prefix: Message[];\n coveredMessages: number;\n compactedMessageCount: number;\n originalMessageCount: number;\n originalTokenCount: number;\n compactedTokenCount: number;\n retainedTokenCount: number;\n};\n\nasync function countContextTokens(\n counter: MemoryTokenCounter,\n messages: readonly Message[],\n signal?: AbortSignal,\n): Promise<number> {\n throwIfAborted(signal);\n const value = await counter(structuredClone(messages));\n throwIfAborted(signal);\n if (!Number.isSafeInteger(value) || value < 0)\n throw new TypeError(\"Compaction token counter must return a nonnegative safe integer.\");\n return value;\n}\n\nexport function projectLoopContext(\n messages: readonly Message[],\n checkpoint?: LoopContextCheckpoint,\n): Message[] {\n if (checkpoint === undefined) return [...messages];\n return [\n createMemoryCompactionSummary(checkpoint.summary, checkpoint.compactedMessageCount),\n ...retainedLoopMessages(messages, checkpoint.coveredMessages),\n ];\n}\n\nfunction retainedLoopMessages(messages: readonly Message[], coveredMessages: number): Message[] {\n const tail = messages.slice(coveredMessages);\n // Keep the active user request verbatim even when all completed tool rounds are summarized.\n let latestUser = messages.length - 1;\n while (latestUser >= 0 && messages[latestUser]!.role !== \"user\") latestUser -= 1;\n return latestUser >= 0 && latestUser < coveredMessages ? [messages[latestUser]!, ...tail] : tail;\n}\n\n/** Select only complete exchanges; parallel tool calls must all have results before a cut. */\nexport async function planLoopContext(\n messages: readonly Message[],\n checkpoint: LoopContextCheckpoint | undefined,\n options: {\n afterTokens: number;\n recentToolTurns?: number | undefined;\n tokenCounter?: MemoryTokenCounter | undefined;\n },\n signal?: AbortSignal,\n): Promise<LoopContextPlan | undefined> {\n const counter = options.tokenCounter ?? estimateMemoryTokens;\n const projected = projectLoopContext(messages, checkpoint);\n const originalTokenCount = await countContextTokens(counter, projected, signal);\n if (originalTokenCount <= options.afterTokens) return undefined;\n const boundaries: number[] = [];\n const pending = new Set<string>();\n for (const [index, message] of messages.entries()) {\n if (message.role === \"assistant\" && Array.isArray(message.content)) {\n for (const part of message.content)\n if (part.type === \"tool-call\") pending.add(part.toolCallId);\n }\n if (message.role === \"tool\" && pending.size > 0) {\n for (const part of message.content)\n if (part.type === \"tool-result\") pending.delete(part.toolCallId);\n if (pending.size === 0) boundaries.push(index + 1);\n } else if (message.role === \"assistant\" && pending.size === 0 && boundaries.at(-1) === index) {\n // A final answer belongs to the preceding completed round, not another retained tool round.\n boundaries[boundaries.length - 1] = index + 1;\n }\n }\n const end = boundaries[boundaries.length - 1 - (options.recentToolTurns ?? 1)] ?? 0;\n if (end <= (checkpoint?.coveredMessages ?? 0)) return undefined;\n const prefix =\n checkpoint === undefined\n ? messages.slice(0, end)\n : [\n createMemoryCompactionSummary(checkpoint.summary, checkpoint.compactedMessageCount),\n ...messages.slice(checkpoint.coveredMessages, end),\n ];\n const retained = retainedLoopMessages(messages, end);\n return {\n messages: retained,\n prefix,\n coveredMessages: end,\n compactedMessageCount: cumulativeCompactedMessageCount(messages.slice(0, end)),\n originalMessageCount: projected.length,\n originalTokenCount,\n compactedTokenCount: await countContextTokens(counter, prefix, signal),\n retainedTokenCount: await countContextTokens(counter, retained, signal),\n };\n}\n\n/** Validation is inside the summarizer boundary so durable retry budgets cover invalid results. */\nexport async function summarizeLoopContext(\n plan: LoopContextPlan,\n compactor: MemoryCompactor,\n scope: MemoryScope,\n signal?: AbortSignal,\n): Promise<{ summary: string; usage: Usage }> {\n throwIfAborted(signal);\n const result = await compactor({\n scope,\n messages: structuredClone(plan.prefix),\n abortSignal: signal,\n });\n throwIfAborted(signal);\n const usage = result?.usage ?? Usage.empty();\n if (typeof result?.summary !== \"string\" || result.summary.trim().length === 0)\n throw new MemoryCompactionError(\"Memory compactor returned an empty summary.\", { usage });\n for (const value of [\n usage.inputTokens,\n usage.outputTokens,\n usage.totalTokens,\n usage.cachedInputTokens,\n usage.cacheCreationInputTokens,\n ])\n if (!Number.isSafeInteger(value) || value < 0) throw new TypeError(\"Invalid compaction usage.\");\n if (\n usage.details !== undefined &&\n Object.values(usage.details).some((value) => !Number.isFinite(value))\n )\n throw new TypeError(\"Invalid compaction usage details.\");\n return { summary: result.summary.trim(), usage };\n}\n\nexport async function finishLoopContext(\n plan: LoopContextPlan,\n result: { summary: string; usage: Usage },\n counter: MemoryTokenCounter = estimateMemoryTokens,\n signal?: AbortSignal,\n attempts = 1,\n): Promise<PreparedLoopContext> {\n const checkpoint = {\n summary: result.summary,\n coveredMessages: plan.coveredMessages,\n compactedMessageCount: plan.compactedMessageCount,\n };\n const messages = [\n createMemoryCompactionSummary(result.summary, plan.compactedMessageCount),\n ...plan.messages,\n ];\n let resultTokenCount: number;\n try {\n resultTokenCount = await countContextTokens(counter, messages, signal);\n } catch (error) {\n throw new MemoryCompactionError(\"Memory token counter failed after summarization.\", {\n cause: error,\n usage: result.usage,\n });\n }\n return {\n messages,\n checkpoint,\n compaction: {\n originalMessageCount: plan.originalMessageCount,\n compactedMessageCount: plan.prefix.length,\n retainedMessageCount: plan.messages.length,\n originalTokenCount: plan.originalTokenCount,\n compactedTokenCount: plan.compactedTokenCount,\n retainedTokenCount: plan.retainedTokenCount,\n resultTokenCount,\n attempts,\n usage: result.usage,\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveMemoryOptions
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SVFEG2TI.js";
|
|
4
4
|
import {
|
|
5
5
|
appendGuardrailPolicies
|
|
6
6
|
} from "./chunk-6BTJC3ES.js";
|
|
@@ -109,4 +109,4 @@ export {
|
|
|
109
109
|
resolveAgentOptions,
|
|
110
110
|
markResolvedAgentOptions
|
|
111
111
|
};
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
112
|
+
//# sourceMappingURL=chunk-MNWULFRX.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertQuestion
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-547CQSO2.js";
|
|
4
4
|
|
|
5
5
|
// src/decision/questions.ts
|
|
6
6
|
function choice(options) {
|
|
@@ -30,4 +30,4 @@ export {
|
|
|
30
30
|
score,
|
|
31
31
|
check
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
33
|
+
//# sourceMappingURL=chunk-PFSWAJTY.js.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
finishLoopContext,
|
|
3
|
+
planLoopContext,
|
|
4
|
+
projectLoopContext,
|
|
5
|
+
summarizeLoopContext
|
|
6
|
+
} from "./chunk-M7LU47T5.js";
|
|
1
7
|
import {
|
|
2
8
|
createMemoryCompactionSummary,
|
|
3
9
|
cumulativeCompactedMessageCount
|
|
@@ -23,6 +29,24 @@ var AgentRunMemory = class {
|
|
|
23
29
|
agent;
|
|
24
30
|
memoryScope;
|
|
25
31
|
initialHistory;
|
|
32
|
+
async prepareLoop(messages, checkpoint, signal) {
|
|
33
|
+
const options = this.memory()?.compaction;
|
|
34
|
+
if (options === void 0 || this.memoryScope === void 0) return { messages: [...messages] };
|
|
35
|
+
const plan = await planLoopContext(
|
|
36
|
+
messages,
|
|
37
|
+
checkpoint,
|
|
38
|
+
{
|
|
39
|
+
afterTokens: options.trigger.afterTokens,
|
|
40
|
+
recentToolTurns: options.retention.recentToolTurns,
|
|
41
|
+
tokenCounter: options.tokenCounter
|
|
42
|
+
},
|
|
43
|
+
signal
|
|
44
|
+
);
|
|
45
|
+
if (plan === void 0) return { messages: projectLoopContext(messages, checkpoint) };
|
|
46
|
+
const summary = await summarizeLoopContext(plan, options.compactor, this.memoryScope, signal);
|
|
47
|
+
const prepared = await finishLoopContext(plan, summary, options.tokenCounter, signal);
|
|
48
|
+
return prepared;
|
|
49
|
+
}
|
|
26
50
|
memoryPolicy() {
|
|
27
51
|
return this.memory()?.savePolicy;
|
|
28
52
|
}
|
|
@@ -349,4 +373,4 @@ function isEmptyUsage(usage) {
|
|
|
349
373
|
export {
|
|
350
374
|
AgentRunMemory
|
|
351
375
|
};
|
|
352
|
-
//# sourceMappingURL=chunk-
|
|
376
|
+
//# sourceMappingURL=chunk-PLQAN4EO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/agent-runtime/memory.ts"],"sourcesContent":["import {\n planLoopContext,\n projectLoopContext,\n summarizeLoopContext,\n finishLoopContext,\n type LoopContextCheckpoint,\n type PreparedLoopContext,\n} from \"./loop-context\";\nimport type { Agent } from \"../../agent/agent\";\nimport type { AgentMemory } from \"../../agent/types\";\nimport { type Message as MessageType, Usage } from \"../../completion/index\";\nimport {\n createMemoryCompactionSummary,\n cumulativeCompactedMessageCount,\n} from \"../../memory/compaction\";\nimport { MemoryCompactionConflictError, MemoryCompactionError } from \"../../memory/errors\";\nimport type {\n MemoryCompactionInfo,\n MemoryCompactionResult,\n MemorySavePolicy,\n MemoryScope,\n MemoryTokenCounter,\n} from \"../../memory/types\";\nimport { throwIfAborted } from \"../abort\";\n\nexport type MemoryPreparation = {\n history: MessageType[];\n usage: ReturnType<typeof Usage.empty>;\n compaction?: MemoryCompactionInfo | undefined;\n originalTokenCount?: number | undefined;\n};\n\ntype MemoryAgent = Pick<Agent, \"memory\">;\n\nexport class AgentRunMemory {\n async prepareLoop(\n messages: readonly MessageType[],\n checkpoint: LoopContextCheckpoint | undefined,\n signal: AbortSignal,\n ): Promise<PreparedLoopContext> {\n const options = this.memory()?.compaction;\n if (options === undefined || this.memoryScope === undefined) return { messages: [...messages] };\n const plan = await planLoopContext(\n messages,\n checkpoint,\n {\n afterTokens: options.trigger.afterTokens,\n recentToolTurns: options.retention.recentToolTurns,\n tokenCounter: options.tokenCounter,\n },\n signal,\n );\n if (plan === undefined) return { messages: projectLoopContext(messages, checkpoint) };\n const summary = await summarizeLoopContext(plan, options.compactor, this.memoryScope, signal);\n const prepared = await finishLoopContext(plan, summary, options.tokenCounter, signal);\n return prepared;\n }\n\n constructor(\n private readonly agent: MemoryAgent,\n private readonly memoryScope: MemoryScope | undefined,\n private readonly initialHistory: MessageType[],\n ) {}\n\n memoryPolicy(): MemorySavePolicy | undefined {\n return this.memory()?.savePolicy;\n }\n\n pendingTurnMessages(newMessages: MessageType[]): MessageType[] {\n return this.memoryPolicy() === \"turn\" ? [...newMessages] : [];\n }\n\n async prepareHistory(\n runId: string,\n incomingMessages: readonly MessageType[],\n abortSignal?: AbortSignal | undefined,\n ): Promise<MemoryPreparation> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined) {\n return {\n history: this.initialHistory,\n usage: Usage.empty(),\n };\n }\n\n const preparation = await this.prepareStoredHistory(\n memory,\n runId,\n incomingMessages,\n abortSignal,\n );\n const memoryHistory = preparation.history;\n const chatHistory = [...memoryHistory, ...this.initialHistory];\n return {\n ...preparation,\n history: chatHistory,\n };\n }\n\n async compact(\n runId: string,\n abortSignal?: AbortSignal | undefined,\n ): Promise<MemoryCompactionResult> {\n const memory = this.memory();\n const scope = this.memoryScope;\n if (memory === undefined || scope === undefined) {\n throw new TypeError(\"Manual memory compaction requires an Agent with configured memory.\");\n }\n if (memory.compaction === undefined || memory.store.compaction === undefined) {\n throw new TypeError(\"Manual memory compaction requires a configured compaction policy.\");\n }\n const preparation = await this.prepareStoredHistory(memory, runId, [], abortSignal, true);\n if (preparation.compaction !== undefined) {\n return { type: \"compacted\", ...preparation.compaction };\n }\n return {\n type: \"skipped\",\n reason: \"nothing_to_compact\",\n originalMessageCount: preparation.history.length,\n originalTokenCount:\n preparation.originalTokenCount ??\n (await countTokens(memory.compaction.tokenCounter, preparation.history)),\n };\n }\n\n async commitAcceptedInput(runId: string, messages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryScope === undefined ||\n memory.savePolicy !== \"message\" ||\n messages.length === 0\n ) {\n return;\n }\n\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn: 1,\n messages,\n });\n }\n\n async commitMessages(\n runId: string,\n turn: number,\n messages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined || messages.length === 0) {\n return;\n }\n if (memory.savePolicy === \"message\") {\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages,\n });\n } else if (memory.savePolicy === \"turn\") {\n pendingTurnMessages.push(...messages);\n }\n }\n\n async commitCompletedTurn(\n runId: string,\n turn: number,\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryScope === undefined ||\n memory.savePolicy !== \"turn\" ||\n pendingTurnMessages.length === 0\n ) {\n return;\n }\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages: [...pendingTurnMessages],\n });\n pendingTurnMessages.length = 0;\n }\n\n async commitCompletedRun(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n await this.commitCompletedTurn(runId, turn, pendingTurnMessages);\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined || memory.savePolicy !== \"run\") {\n return;\n }\n await memory.store.append({\n scope: this.memoryScope,\n runId,\n turn,\n messages: [...newMessages],\n });\n }\n\n async recordError(runId: string, error: unknown, newMessages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryScope === undefined) {\n return;\n }\n await memory.store.recordError?.({\n scope: this.memoryScope,\n runId,\n error,\n messages: [...newMessages],\n });\n }\n\n private memory(): AgentMemory | undefined {\n return this.memoryScope === undefined ? undefined : this.agent.memory;\n }\n\n private async prepareStoredHistory(\n memory: AgentMemory,\n runId: string,\n incomingMessages: readonly MessageType[],\n abortSignal?: AbortSignal | undefined,\n force = false,\n ): Promise<MemoryPreparation> {\n const scope = this.memoryScope;\n if (scope === undefined) {\n return { history: [], usage: Usage.empty() };\n }\n const options = memory.compaction;\n const capability = memory.store.compaction;\n if (options === undefined || capability === undefined) {\n return {\n history: await memory.store.load({ scope }),\n usage: Usage.empty(),\n };\n }\n\n let usage = Usage.empty();\n const maxAttempts = options.conflictRetries === false ? 1 : options.conflictRetries.maxAttempts;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n throwIfAborted(abortSignal);\n const snapshot = await capability.snapshot({ scope });\n throwIfAborted(abortSignal);\n const selection = await selectCompactionPrefix(\n snapshot.messages,\n incomingMessages,\n options.trigger.afterTokens,\n options.retention,\n options.tokenCounter,\n force,\n );\n throwIfAborted(abortSignal);\n const compactedMessageCount = selection.compactedMessageCount;\n if (compactedMessageCount === 0) {\n return {\n history: snapshot.messages,\n usage,\n originalTokenCount: selection.originalTokenCount,\n };\n }\n\n const prefix = snapshot.messages.slice(0, compactedMessageCount);\n let result: Awaited<ReturnType<typeof options.compactor>>;\n try {\n result = await options.compactor({\n scope,\n messages: prefix,\n abortSignal,\n });\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n if (result.usage !== undefined) {\n usage = Usage.add(usage, result.usage);\n }\n if (typeof result?.summary !== \"string\") {\n throw new MemoryCompactionError(\"Memory compactor must return a summary string.\", {\n usage,\n });\n }\n const summaryText = result.summary.trim();\n if (summaryText.length === 0) {\n throw new MemoryCompactionError(\"Memory compactor returned an empty summary.\", {\n usage,\n });\n }\n const summary = createMemoryCompactionSummary(\n summaryText,\n cumulativeCompactedMessageCount(prefix),\n );\n const retained = snapshot.messages.slice(compactedMessageCount);\n let resultTokenCount: number;\n try {\n resultTokenCount = await countTokens(options.tokenCounter, [summary, ...retained]);\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n throwIfAborted(abortSignal);\n let replacement: Awaited<ReturnType<typeof capability.replacePrefix>>;\n try {\n replacement = await capability.replacePrefix({\n scope,\n revision: snapshot.revision,\n messageCount: compactedMessageCount,\n replacement: summary,\n runId: `memory-compaction:${runId}:${attempt}`,\n });\n } catch (error) {\n throw new MemoryCompactionError(\"Memory compaction prefix replacement failed.\", {\n cause: error,\n usage,\n });\n }\n if (replacement.status === \"committed\") {\n return {\n history: [summary, ...retained],\n usage,\n compaction: {\n originalMessageCount: snapshot.messages.length,\n compactedMessageCount,\n retainedMessageCount: retained.length,\n originalTokenCount: selection.originalTokenCount,\n compactedTokenCount: selection.compactedTokenCount,\n retainedTokenCount: selection.retainedTokenCount,\n resultTokenCount,\n attempts: attempt,\n usage,\n },\n };\n }\n throwIfAborted(abortSignal);\n }\n\n throw new MemoryCompactionConflictError(maxAttempts, usage);\n }\n}\n\ntype CompactionSelection = {\n compactedMessageCount: number;\n originalTokenCount: number;\n compactedTokenCount: number;\n retainedTokenCount: number;\n};\n\nasync function selectCompactionPrefix(\n messages: readonly MessageType[],\n incomingMessages: readonly MessageType[],\n afterTokens: number,\n retention:\n | { recentTurns: number; recentTokens?: undefined }\n | { recentTokens: number; recentTurns?: undefined },\n tokenCounter: MemoryTokenCounter,\n force: boolean,\n): Promise<CompactionSelection> {\n const originalTokenCount = await countTokens(tokenCounter, messages);\n const incomingTokenCount =\n incomingMessages.length === 0 ? 0 : await countTokens(tokenCounter, incomingMessages);\n const none = {\n compactedMessageCount: 0,\n originalTokenCount,\n compactedTokenCount: 0,\n retainedTokenCount: originalTokenCount,\n };\n if (!force && originalTokenCount + incomingTokenCount <= afterTokens) {\n return none;\n }\n const userMessageIndexes = messages.flatMap((message, index) =>\n message.role === \"user\" ? [index] : [],\n );\n let compactedMessageCount: number;\n let retainedTokenCount: number;\n if (retention.recentTurns !== undefined) {\n if (userMessageIndexes.length <= retention.recentTurns) {\n return none;\n }\n compactedMessageCount =\n retention.recentTurns === 0\n ? messages.length\n : (userMessageIndexes[userMessageIndexes.length - retention.recentTurns] ?? 0);\n retainedTokenCount = await countTokens(tokenCounter, messages.slice(compactedMessageCount));\n } else {\n if (userMessageIndexes.length <= 1) {\n return none;\n }\n\n // Legacy token retention still keeps complete user-led turns. The newest turn is always kept\n // even when it alone exceeds the budget. Find the earliest fitting tail logarithmically.\n const tailTokenCounts = new Map<number, number>();\n const countTail = async (messageIndex: number): Promise<number> => {\n const cached = tailTokenCounts.get(messageIndex);\n if (cached !== undefined) return cached;\n const count = await countTokens(tokenCounter, messages.slice(messageIndex));\n tailTokenCounts.set(messageIndex, count);\n return count;\n };\n let lower = 0;\n let upper = userMessageIndexes.length - 1;\n let retainedBoundary = upper;\n while (lower <= upper) {\n const middle = Math.floor((lower + upper) / 2);\n const candidate = userMessageIndexes[middle] ?? 0;\n if ((await countTail(candidate)) <= retention.recentTokens) {\n retainedBoundary = middle;\n upper = middle - 1;\n } else {\n lower = middle + 1;\n }\n }\n compactedMessageCount = userMessageIndexes[retainedBoundary] ?? 0;\n retainedTokenCount =\n tailTokenCounts.get(compactedMessageCount) ??\n (await countTokens(tokenCounter, messages.slice(compactedMessageCount)));\n }\n if (compactedMessageCount === 0) {\n return none;\n }\n const compactedTokenCount = await countTokens(\n tokenCounter,\n messages.slice(0, compactedMessageCount),\n );\n return {\n compactedMessageCount,\n originalTokenCount,\n compactedTokenCount,\n retainedTokenCount,\n };\n}\n\nasync function countTokens(\n tokenCounter: MemoryTokenCounter,\n messages: readonly MessageType[],\n): Promise<number> {\n let count: number;\n try {\n count = await tokenCounter(messages);\n } catch (error) {\n throw new MemoryCompactionError(\"Memory token counter failed.\", { cause: error });\n }\n if (!Number.isSafeInteger(count) || count < 0) {\n throw new MemoryCompactionError(\"Memory token counter must return a nonnegative safe integer.\");\n }\n return count;\n}\n\nfunction remappedCompactorError(error: unknown, usage: ReturnType<typeof Usage.empty>): Error {\n if (error instanceof MemoryCompactionError) {\n const mergedUsage =\n error.usage === undefined\n ? usage\n : isEmptyUsage(usage)\n ? error.usage\n : Usage.add(usage, error.usage);\n if (mergedUsage === error.usage || (error.usage === undefined && isEmptyUsage(usage))) {\n return error;\n }\n return new MemoryCompactionError(error.message, {\n cause: error,\n usage: mergedUsage,\n });\n }\n return new MemoryCompactionError(\"Memory compactor failed.\", {\n cause: error,\n usage,\n });\n}\n\nfunction isEmptyUsage(usage: ReturnType<typeof Usage.empty>): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/agent-runtime/execution.ts"],"sourcesContent":["import type { PreparedLoopContext, LoopContextCheckpoint } from \"./loop-context\";\nimport type {\n CompletionRequest,\n CompletionResponse,\n ToolCallPart,\n Message,\n} from \"../../completion\";\nimport type { NormalizedToolOutput, ToolCallContext } from \"../../tool\";\nimport type { AgentStreamEvent } from \"../../agent/run-types\";\n\n/** Runtime capability marker: older core versions must fail before accepting durable work. */\nexport const AGENT_RUN_EXECUTION_VERSION = 3;\n\n/** Normalized generation progress; never includes raw provider responses. */\nexport type AgentCompletionStreamEvent = Extract<\n AgentStreamEvent<unknown, unknown>,\n {\n type:\n | \"text_delta\"\n | \"reasoning_delta\"\n | \"tool_call_delta\"\n | \"tool_call\"\n | \"source\"\n | \"provider_tool_call\";\n }\n>;\n\nexport type AgentCompletionStream = AsyncGenerator<AgentCompletionStreamEvent, CompletionResponse>;\n\nexport type AgentToolExecutionResult =\n | { output: NormalizedToolOutput; failed: false }\n | { output: NormalizedToolOutput; failed: true; error: unknown };\n\n/** Internal persistence boundary used by execution runtimes. Callbacks own external effects. */\nexport interface AgentRunExecution {\n /** Persist the context selected before each model call, including skipped compaction decisions. */\n prepareMessages?(\n turn: number,\n messages: readonly Message[],\n checkpoint?: LoopContextCheckpoint,\n ): Promise<PreparedLoopContext>;\n completion(\n turn: number,\n request: CompletionRequest,\n execute: () => Promise<CompletionResponse>,\n ): Promise<CompletionResponse>;\n streamCompletion?(\n turn: number,\n request: CompletionRequest,\n execute: () => AgentCompletionStream,\n ): AgentCompletionStream;\n tool(\n call: { turn: number; toolCall: ToolCallPart; args: string },\n execute: (context?: Pick<ToolCallContext, \"operationId\">) => Promise<AgentToolExecutionResult>,\n ): Promise<AgentToolExecutionResult>;\n}\n"],"mappings":";AAWO,IAAM,8BAA8B;","names":[]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
STRUCTURED_OUTPUT_RETRY_PROMPT,
|
|
3
|
+
STRUCTURED_OUTPUT_TRUNCATED_RETRY_PROMPT,
|
|
4
|
+
normalizeStructuredOutput,
|
|
5
|
+
structuredOutputRepairPreview
|
|
6
|
+
} from "./chunk-SXE4J43E.js";
|
|
1
7
|
import {
|
|
2
8
|
ToolCallExecutor
|
|
3
9
|
} from "./chunk-DRSKZVC6.js";
|
|
@@ -6,7 +12,7 @@ import {
|
|
|
6
12
|
} from "./chunk-LAIATEUB.js";
|
|
7
13
|
import {
|
|
8
14
|
AgentRunMemory
|
|
9
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-PLQAN4EO.js";
|
|
10
16
|
import {
|
|
11
17
|
fetchContextDocuments,
|
|
12
18
|
fetchToolDefinitions
|
|
@@ -23,17 +29,11 @@ import {
|
|
|
23
29
|
addTurnToToolCallDelta,
|
|
24
30
|
isGenerationDeltaEvent
|
|
25
31
|
} from "./chunk-YWRXOPHC.js";
|
|
26
|
-
import {
|
|
27
|
-
STRUCTURED_OUTPUT_RETRY_PROMPT,
|
|
28
|
-
STRUCTURED_OUTPUT_TRUNCATED_RETRY_PROMPT,
|
|
29
|
-
normalizeStructuredOutput,
|
|
30
|
-
structuredOutputRepairPreview
|
|
31
|
-
} from "./chunk-SXE4J43E.js";
|
|
32
32
|
import {
|
|
33
33
|
parseContinuationState,
|
|
34
34
|
questionResult,
|
|
35
35
|
serializeContinuationState
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-5ZM5DB3O.js";
|
|
37
37
|
import {
|
|
38
38
|
AgentInteractionSignal,
|
|
39
39
|
ToolExecutionSuspension,
|
|
@@ -176,6 +176,7 @@ var AgentRun = class _AgentRun {
|
|
|
176
176
|
this.memoryScope = options.memoryScope;
|
|
177
177
|
this.memoryRecorder = new AgentRunMemory(agent, options.memoryScope, initialHistory);
|
|
178
178
|
this.continuationState = options.continuationState;
|
|
179
|
+
this.loopContextCheckpoint = options.continuationState?.loopContextCheckpoint;
|
|
179
180
|
this.interactionResponse = options.interactionResponse;
|
|
180
181
|
if (options.continuationState !== void 0) {
|
|
181
182
|
this.steeringMessages.push(
|
|
@@ -212,6 +213,7 @@ var AgentRun = class _AgentRun {
|
|
|
212
213
|
onSteeringApplied;
|
|
213
214
|
onInternalMemoryCompaction;
|
|
214
215
|
memoryCompaction;
|
|
216
|
+
loopContextCheckpoint;
|
|
215
217
|
requestedRunId;
|
|
216
218
|
continuationState;
|
|
217
219
|
interactionResponse;
|
|
@@ -392,7 +394,14 @@ var AgentRun = class _AgentRun {
|
|
|
392
394
|
const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];
|
|
393
395
|
await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);
|
|
394
396
|
await this.runCompletionCallHook(prompt, historyForRequest, newMessages);
|
|
395
|
-
const
|
|
397
|
+
const prepared = this.execution?.prepareMessages !== void 0 || this.agent.memory?.compaction !== void 0 ? await this.prepareTurnMessages(currentTurns, [...historyForRequest, prompt]) : { messages: [...historyForRequest, prompt] };
|
|
398
|
+
if (prepared.compaction !== void 0) {
|
|
399
|
+
usage = Usage.add(usage, prepared.compaction.usage);
|
|
400
|
+
this.memoryCompaction = prepared.compaction;
|
|
401
|
+
await this.notifyInternalMemoryCompaction(prepared.compaction);
|
|
402
|
+
await this.recordMemoryCompaction(prepared, runObservers);
|
|
403
|
+
}
|
|
404
|
+
const request = await this.createTurnRequest(prompt, prepared.messages, currentTurns);
|
|
396
405
|
let response;
|
|
397
406
|
try {
|
|
398
407
|
response = await this.runCompletion(request, currentTurns, runObservers);
|
|
@@ -702,7 +711,15 @@ var AgentRun = class _AgentRun {
|
|
|
702
711
|
};
|
|
703
712
|
await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);
|
|
704
713
|
await this.runCompletionCallHook(prompt, historyForRequest, newMessages);
|
|
705
|
-
const
|
|
714
|
+
const prepared = this.execution?.prepareMessages !== void 0 || this.agent.memory?.compaction !== void 0 ? await this.prepareTurnMessages(currentTurns, [...historyForRequest, prompt]) : { messages: [...historyForRequest, prompt] };
|
|
715
|
+
if (prepared.compaction !== void 0) {
|
|
716
|
+
usage = Usage.add(usage, prepared.compaction.usage);
|
|
717
|
+
this.memoryCompaction = prepared.compaction;
|
|
718
|
+
await this.notifyInternalMemoryCompaction(prepared.compaction);
|
|
719
|
+
await this.recordMemoryCompaction(prepared, runObservers);
|
|
720
|
+
yield { type: "memory_compaction", ...prepared.compaction };
|
|
721
|
+
}
|
|
722
|
+
const request = await this.createTurnRequest(prompt, prepared.messages, currentTurns);
|
|
706
723
|
assertCompletionRequestSupported(this.agent.model, request, { streaming: true });
|
|
707
724
|
const providerRequest = this.providerTraceRequest(request, { stream: true });
|
|
708
725
|
const generationStartArgs = this.generationStartArgs(
|
|
@@ -1024,12 +1041,28 @@ var AgentRun = class _AgentRun {
|
|
|
1024
1041
|
throw error;
|
|
1025
1042
|
}
|
|
1026
1043
|
}
|
|
1027
|
-
async
|
|
1044
|
+
async prepareTurnMessages(turn, messages) {
|
|
1045
|
+
let prepared;
|
|
1046
|
+
if (this.execution?.prepareMessages !== void 0) {
|
|
1047
|
+
prepared = await this.execution.prepareMessages(turn, messages, this.loopContextCheckpoint);
|
|
1048
|
+
} else if (turn > 1 || this.continuationState !== void 0 || messages.some((message) => message.role === "tool")) {
|
|
1049
|
+
prepared = await this.memoryRecorder.prepareLoop(
|
|
1050
|
+
messages,
|
|
1051
|
+
this.loopContextCheckpoint,
|
|
1052
|
+
this.abortController.signal
|
|
1053
|
+
);
|
|
1054
|
+
} else {
|
|
1055
|
+
prepared = { messages };
|
|
1056
|
+
}
|
|
1057
|
+
if (prepared.checkpoint !== void 0) this.loopContextCheckpoint = prepared.checkpoint;
|
|
1058
|
+
return prepared;
|
|
1059
|
+
}
|
|
1060
|
+
async createTurnRequest(prompt, messages, turn) {
|
|
1028
1061
|
const ragText = extractRagText(prompt);
|
|
1029
1062
|
const abortSignal = this.abortController.signal;
|
|
1030
1063
|
const documents = await fetchContextDocuments(this.agent, ragText, abortSignal);
|
|
1031
1064
|
const toolDefinitions = await fetchToolDefinitions(this.agent, ragText, abortSignal);
|
|
1032
|
-
const request = createCompletionRequest(providerMessages(
|
|
1065
|
+
const request = createCompletionRequest(providerMessages(messages), {
|
|
1033
1066
|
instructions: this.agent.instructions,
|
|
1034
1067
|
documents,
|
|
1035
1068
|
tools: [...toolDefinitions, ...getAgentToolState(this.agent).providerTools],
|
|
@@ -1235,6 +1268,8 @@ var AgentRun = class _AgentRun {
|
|
|
1235
1268
|
}))
|
|
1236
1269
|
};
|
|
1237
1270
|
if (this.memoryScope !== void 0) continuationState.memoryScope = this.memoryScope;
|
|
1271
|
+
if (this.loopContextCheckpoint !== void 0)
|
|
1272
|
+
continuationState.loopContextCheckpoint = this.loopContextCheckpoint;
|
|
1238
1273
|
const continuation = parseAgentContinuation({
|
|
1239
1274
|
version: 1,
|
|
1240
1275
|
agentId: this.agent.id,
|
|
@@ -2349,4 +2384,4 @@ function observerRunEnd(outcome) {
|
|
|
2349
2384
|
export {
|
|
2350
2385
|
AgentRun
|
|
2351
2386
|
};
|
|
2352
|
-
//# sourceMappingURL=chunk-
|
|
2387
|
+
//# sourceMappingURL=chunk-SISGNHNO.js.map
|