@librechat/agents 3.7.22 → 3.8.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/dist/cjs/agents/AgentContext.cjs +13 -3
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +174 -53
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +15 -5
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +48 -2
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +42 -0
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/langfuseTraceShaping.cjs +7 -1
- package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -9
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +2 -7
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/contextPressureMeter.cjs +51 -10
- package/dist/cjs/llm/contextPressureMeter.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +1 -1
- package/dist/cjs/llm/invoke.cjs +2 -2
- package/dist/cjs/llm/openai/index.cjs +4 -3
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +5 -4
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/preempt.cjs +3 -2
- package/dist/cjs/llm/preempt.cjs.map +1 -1
- package/dist/cjs/llm/prepareProviderRequest.cjs +9 -7
- package/dist/cjs/llm/prepareProviderRequest.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +1 -1
- package/dist/cjs/main.cjs +11 -5
- package/dist/cjs/messages/alternation.cjs +1 -5
- package/dist/cjs/messages/alternation.cjs.map +1 -1
- package/dist/cjs/messages/budget.cjs +206 -7
- package/dist/cjs/messages/budget.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +3 -9
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +25 -37
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +131 -42
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +2 -0
- package/dist/cjs/messages/prune.cjs +12 -7
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/reasoningTypes.cjs +21 -0
- package/dist/cjs/messages/reasoningTypes.cjs.map +1 -0
- package/dist/cjs/messages/recency.cjs +15 -94
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/toolHistoryProjection.cjs +243 -0
- package/dist/cjs/messages/toolHistoryProjection.cjs.map +1 -0
- package/dist/cjs/messages/toolResultTypes.cjs +145 -4
- package/dist/cjs/messages/toolResultTypes.cjs.map +1 -1
- package/dist/cjs/run.cjs +5 -4
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +6 -4
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +3 -0
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/index.cjs +1 -1
- package/dist/cjs/session/sessionProjection.cjs +75 -0
- package/dist/cjs/session/sessionProjection.cjs.map +1 -0
- package/dist/cjs/stream.cjs +18 -17
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +18 -8
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/summarization/shared.cjs +9 -0
- package/dist/cjs/summarization/shared.cjs.map +1 -1
- package/dist/cjs/tools/ArtifactDelivery.cjs +27 -0
- package/dist/cjs/tools/ArtifactDelivery.cjs.map +1 -0
- package/dist/cjs/tools/BashExecutor.cjs +6 -1
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +6 -1
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +5 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +1 -1
- package/dist/cjs/utils/events.cjs +13 -0
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +105 -0
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +13 -3
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +176 -55
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +15 -5
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +49 -4
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +41 -1
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/langfuseTraceShaping.mjs +7 -1
- package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -9
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +2 -7
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/contextPressureMeter.mjs +52 -11
- package/dist/esm/llm/contextPressureMeter.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +1 -1
- package/dist/esm/llm/invoke.mjs +2 -2
- package/dist/esm/llm/openai/index.mjs +2 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +5 -4
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/preempt.mjs +2 -1
- package/dist/esm/llm/preempt.mjs.map +1 -1
- package/dist/esm/llm/prepareProviderRequest.mjs +9 -7
- package/dist/esm/llm/prepareProviderRequest.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +1 -1
- package/dist/esm/main.mjs +10 -7
- package/dist/esm/messages/alternation.mjs +2 -6
- package/dist/esm/messages/alternation.mjs.map +1 -1
- package/dist/esm/messages/budget.mjs +206 -8
- package/dist/esm/messages/budget.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +3 -9
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +23 -33
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +132 -43
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +2 -0
- package/dist/esm/messages/prune.mjs +12 -7
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/reasoningTypes.mjs +20 -0
- package/dist/esm/messages/reasoningTypes.mjs.map +1 -0
- package/dist/esm/messages/recency.mjs +16 -95
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/toolHistoryProjection.mjs +237 -0
- package/dist/esm/messages/toolHistoryProjection.mjs.map +1 -0
- package/dist/esm/messages/toolResultTypes.mjs +141 -4
- package/dist/esm/messages/toolResultTypes.mjs.map +1 -1
- package/dist/esm/run.mjs +5 -4
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +6 -4
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +3 -0
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/index.mjs +1 -1
- package/dist/esm/session/sessionProjection.mjs +72 -0
- package/dist/esm/session/sessionProjection.mjs.map +1 -0
- package/dist/esm/stream.mjs +15 -14
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +19 -9
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/summarization/shared.mjs +9 -1
- package/dist/esm/summarization/shared.mjs.map +1 -1
- package/dist/esm/tools/ArtifactDelivery.mjs +26 -0
- package/dist/esm/tools/ArtifactDelivery.mjs.map +1 -0
- package/dist/esm/tools/BashExecutor.mjs +6 -1
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +6 -1
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +5 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +1 -1
- package/dist/esm/utils/events.mjs +13 -0
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +105 -1
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +13 -1
- package/dist/types/graphs/Graph.d.ts +27 -0
- package/dist/types/hooks/types.d.ts +4 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/langfuse.d.ts +10 -0
- package/dist/types/langfuseToolOutputTracing.d.ts +2 -0
- package/dist/types/llm/contextPressureMeter.d.ts +2 -1
- package/dist/types/llm/prepareProviderRequest.d.ts +7 -1
- package/dist/types/messages/budget.d.ts +15 -10
- package/dist/types/messages/core.d.ts +8 -17
- package/dist/types/messages/format.d.ts +3 -2
- package/dist/types/messages/index.d.ts +1 -1
- package/dist/types/messages/prune.d.ts +1 -1
- package/dist/types/messages/reasoningTypes.d.ts +7 -0
- package/dist/types/messages/recency.d.ts +3 -0
- package/dist/types/messages/toolHistoryProjection.d.ts +65 -0
- package/dist/types/messages/toolResultTypes.d.ts +31 -1
- package/dist/types/session/sessionProjection.d.ts +10 -0
- package/dist/types/summarization/index.d.ts +2 -1
- package/dist/types/summarization/node.d.ts +1 -0
- package/dist/types/summarization/shared.d.ts +12 -0
- package/dist/types/tools/ArtifactDelivery.d.ts +4 -0
- package/dist/types/types/graph.d.ts +28 -0
- package/dist/types/types/run.d.ts +4 -0
- package/dist/types/types/summarize.d.ts +4 -1
- package/dist/types/types/tools.d.ts +11 -0
- package/dist/types/utils/tokens.d.ts +2 -1
- package/package.json +1 -1
- package/src/agents/AgentContext.ts +34 -3
- package/src/graphs/Graph.ts +465 -147
- package/src/graphs/MultiAgentGraph.ts +28 -6
- package/src/hooks/types.ts +4 -1
- package/src/index.ts +1 -0
- package/src/langfuse.ts +84 -11
- package/src/langfuseToolOutputTracing.ts +91 -0
- package/src/langfuseTraceShaping.ts +17 -4
- package/src/llm/anthropic/utils/message_inputs.ts +5 -10
- package/src/llm/bedrock/utils/message_inputs.ts +2 -8
- package/src/llm/contextPressureMeter.ts +80 -12
- package/src/llm/openai/utils/index.ts +5 -4
- package/src/llm/prepareProviderRequest.ts +21 -16
- package/src/messages/alternation.ts +2 -15
- package/src/messages/budget.ts +439 -23
- package/src/messages/cache.ts +8 -9
- package/src/messages/core.ts +65 -95
- package/src/messages/format.ts +262 -78
- package/src/messages/index.ts +1 -1
- package/src/messages/prune.ts +31 -12
- package/src/messages/reasoningTypes.ts +23 -0
- package/src/messages/recency.ts +35 -179
- package/src/messages/toolHistoryProjection.ts +460 -0
- package/src/messages/toolResultTypes.ts +331 -100
- package/src/run.ts +10 -2
- package/src/session/AgentSession.ts +33 -16
- package/src/session/JsonlSessionStore.ts +6 -0
- package/src/session/sessionProjection.ts +126 -0
- package/src/stream.ts +14 -19
- package/src/summarization/index.ts +2 -0
- package/src/summarization/node.ts +62 -13
- package/src/summarization/shared.ts +23 -0
- package/src/tools/ArtifactDelivery.ts +50 -0
- package/src/tools/BashExecutor.ts +18 -1
- package/src/tools/CodeExecutor.ts +18 -1
- package/src/tools/ProgrammaticToolCalling.ts +15 -1
- package/src/types/graph.ts +28 -0
- package/src/types/run.ts +4 -0
- package/src/types/summarize.ts +4 -1
- package/src/types/tools.ts +12 -0
- package/src/utils/events.ts +19 -0
- package/src/utils/tokens.ts +183 -0
|
@@ -8,90 +8,10 @@ function resolveIntraTurnRetainTokens({ tokens, maxContextTokens }) {
|
|
|
8
8
|
if (maxContextTokens == null || !Number.isFinite(maxContextTokens) || maxContextTokens <= 0) return;
|
|
9
9
|
return Math.max(1, Math.floor(maxContextTokens * DEFAULT_INTRA_TURN_RETAIN_RATIO));
|
|
10
10
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
15
|
-
return descriptor != null && "value" in descriptor && typeof descriptor.value === "string" && descriptor.value !== "" && descriptor.value.length <= 512 ? descriptor.value : void 0;
|
|
16
|
-
} catch {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function readOwnValue(value, key) {
|
|
21
|
-
if (value == null || typeof value !== "object" || Array.isArray(value)) return;
|
|
22
|
-
try {
|
|
23
|
-
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
24
|
-
return descriptor != null && "value" in descriptor ? descriptor.value : void 0;
|
|
25
|
-
} catch {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const LEGACY_FUNCTION_CALL_PREFIX = "legacy_function:";
|
|
30
|
-
function getLegacyFunctionCallId(name) {
|
|
31
|
-
const callId = `${LEGACY_FUNCTION_CALL_PREFIX}${name}`;
|
|
32
|
-
return callId.length <= 512 ? callId : void 0;
|
|
33
|
-
}
|
|
34
|
-
function getRawToolCallDescriptor(toolCall) {
|
|
35
|
-
const callId = readOwnString(toolCall, "id");
|
|
36
|
-
if (callId == null) return;
|
|
37
|
-
let name;
|
|
38
|
-
if (toolCall != null && typeof toolCall === "object") try {
|
|
39
|
-
const property = Object.getOwnPropertyDescriptor(toolCall, "function");
|
|
40
|
-
name = property != null && "value" in property ? readOwnString(property.value, "name") : void 0;
|
|
41
|
-
} catch {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
callId,
|
|
46
|
-
kind: "tool",
|
|
47
|
-
sourceType: "raw_tool_calls",
|
|
48
|
-
...name == null ? {} : { name }
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
function appendMessageToolCalls(message, calls) {
|
|
52
|
-
const messageRole = message.role;
|
|
53
|
-
if (message.getType() !== "ai" && messageRole !== "assistant") return;
|
|
54
|
-
for (const toolCall of message.tool_calls ?? []) {
|
|
55
|
-
const descriptor = require_toolResultTypes.getProviderAIMessageToolCallDescriptor(toolCall);
|
|
56
|
-
if (descriptor != null) require_toolResultTypes.appendProviderToolCallDescriptor(calls, descriptor);
|
|
57
|
-
}
|
|
58
|
-
const rawToolCalls = require_toolResultTypes.getBoundedProviderPairingArrayProperty(message.additional_kwargs, "tool_calls");
|
|
59
|
-
if (rawToolCalls != null) for (const toolCall of rawToolCalls) {
|
|
60
|
-
const descriptor = getRawToolCallDescriptor(toolCall);
|
|
61
|
-
if (descriptor != null) require_toolResultTypes.appendProviderToolCallDescriptor(calls, descriptor);
|
|
62
|
-
}
|
|
63
|
-
const legacyFunctionName = readOwnString(readOwnValue(message.additional_kwargs, "function_call"), "name");
|
|
64
|
-
const legacyFunctionCallId = legacyFunctionName == null ? void 0 : getLegacyFunctionCallId(legacyFunctionName);
|
|
65
|
-
if (legacyFunctionCallId != null) require_toolResultTypes.appendProviderToolCallDescriptor(calls, {
|
|
66
|
-
callId: legacyFunctionCallId,
|
|
67
|
-
kind: "tool",
|
|
68
|
-
name: legacyFunctionName,
|
|
69
|
-
sourceType: "legacy_function_call"
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
function getToolMessageResultDescriptor(message) {
|
|
73
|
-
if (message.getType() === "function" && message.name != null) {
|
|
74
|
-
const toolCallId = getLegacyFunctionCallId(message.name);
|
|
75
|
-
return toolCallId == null ? void 0 : {
|
|
76
|
-
type: "function_message",
|
|
77
|
-
toolCallId,
|
|
78
|
-
compatibleCallKinds: ["tool"],
|
|
79
|
-
expectedToolNames: [message.name]
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
if (message.getType() !== "tool") return;
|
|
83
|
-
const toolMessage = message;
|
|
84
|
-
const toolCallId = typeof toolMessage.tool_call_id === "string" ? toolMessage.tool_call_id : toolMessage.toolCallId;
|
|
85
|
-
return typeof toolCallId === "string" && toolCallId !== "" && toolCallId.length <= 512 ? {
|
|
86
|
-
type: "tool_message",
|
|
87
|
-
toolCallId,
|
|
88
|
-
compatibleCallKinds: ["tool"]
|
|
89
|
-
} : void 0;
|
|
90
|
-
}
|
|
91
|
-
function inspectMessagePairing(message, calls) {
|
|
92
|
-
const isHuman = message.getType() === "human";
|
|
11
|
+
function inspectMessagePairing(message, calls, provider) {
|
|
12
|
+
const isHuman = require_toolResultTypes.getProviderMessageRole(message, provider) === "user";
|
|
93
13
|
const candidateCalls = isHuman ? new Map(calls) : calls;
|
|
94
|
-
if (!isHuman)
|
|
14
|
+
if (!isHuman) require_toolResultTypes.appendProviderMessageToolCalls(message, candidateCalls, provider);
|
|
95
15
|
const content = require_toolResultTypes.getBoundedProviderPairingArray(message.content);
|
|
96
16
|
let completedToolCalls = 0;
|
|
97
17
|
let resultPartCount = 0;
|
|
@@ -111,7 +31,7 @@ function inspectMessagePairing(message, calls) {
|
|
|
111
31
|
previousPart = part;
|
|
112
32
|
}
|
|
113
33
|
}
|
|
114
|
-
const toolMessageResult =
|
|
34
|
+
const toolMessageResult = require_toolResultTypes.getProviderToolMessageResultDescriptor(message, provider);
|
|
115
35
|
if (toolMessageResult != null && require_toolResultTypes.consumeProviderToolResultPair(toolMessageResult, candidateCalls)) completedToolCalls += 1;
|
|
116
36
|
const trustedHumanToolResult = everyPartIsTrustedHumanResult && resultPartCount > 0 && resultPartCount === content?.length;
|
|
117
37
|
if (trustedHumanToolResult) {
|
|
@@ -120,16 +40,17 @@ function inspectMessagePairing(message, calls) {
|
|
|
120
40
|
}
|
|
121
41
|
return {
|
|
122
42
|
completedToolCalls: isHuman && !trustedHumanToolResult ? 0 : completedToolCalls,
|
|
123
|
-
trustedHumanToolResult
|
|
43
|
+
trustedHumanToolResult,
|
|
44
|
+
userMessage: isHuman
|
|
124
45
|
};
|
|
125
46
|
}
|
|
126
|
-
function findTurnStarts(messages) {
|
|
47
|
+
function findTurnStarts(messages, provider) {
|
|
127
48
|
const turnStarts = [];
|
|
128
49
|
const calls = /* @__PURE__ */ new Map();
|
|
129
50
|
for (let i = 0; i < messages.length; i++) {
|
|
130
51
|
const message = messages[i];
|
|
131
|
-
const pairing = inspectMessagePairing(message, calls);
|
|
132
|
-
if (
|
|
52
|
+
const pairing = inspectMessagePairing(message, calls, provider);
|
|
53
|
+
if (!pairing.userMessage || pairing.trustedHumanToolResult) continue;
|
|
133
54
|
turnStarts.push(i);
|
|
134
55
|
calls.clear();
|
|
135
56
|
}
|
|
@@ -141,7 +62,7 @@ function getCoverageSourceIds(message) {
|
|
|
141
62
|
const messageId = message.id?.trim();
|
|
142
63
|
return messageId != null && messageId !== "" ? [messageId] : [];
|
|
143
64
|
}
|
|
144
|
-
function findIntraTurnBoundary(messages, countMessageAt, retainTokens, earliestRetainedTurnEndIndex) {
|
|
65
|
+
function findIntraTurnBoundary(messages, countMessageAt, retainTokens, earliestRetainedTurnEndIndex, provider) {
|
|
145
66
|
let remainingTokens = 0;
|
|
146
67
|
for (let i = 0; i < messages.length; i++) remainingTokens += countMessageAt(i);
|
|
147
68
|
if (remainingTokens <= retainTokens) return;
|
|
@@ -160,13 +81,13 @@ function findIntraTurnBoundary(messages, countMessageAt, retainTokens, earliestR
|
|
|
160
81
|
for (let i = 0; i <= boundarySearchEnd; i++) {
|
|
161
82
|
const message = messages[i];
|
|
162
83
|
remainingTokens -= countMessageAt(i);
|
|
163
|
-
const pairing = inspectMessagePairing(message, pendingToolCalls);
|
|
84
|
+
const pairing = inspectMessagePairing(message, pendingToolCalls, provider);
|
|
164
85
|
completedToolCalls += pairing.completedToolCalls;
|
|
165
|
-
if (
|
|
86
|
+
if (pairing.userMessage && !pairing.trustedHumanToolResult) pendingToolCalls.clear();
|
|
166
87
|
for (const sourceId of sourceIdsByIndex[i]) if (lastIndexBySourceId.get(sourceId) === i) straddlingSourceIds.delete(sourceId);
|
|
167
88
|
else straddlingSourceIds.add(sourceId);
|
|
168
89
|
if (remainingTokens < retainTokens) break;
|
|
169
|
-
if (completedToolCalls > 0 && pendingToolCalls.size === 0 && straddlingSourceIds.size === 0 && (
|
|
90
|
+
if (completedToolCalls > 0 && pendingToolCalls.size === 0 && straddlingSourceIds.size === 0 && (!pairing.userMessage || pairing.trustedHumanToolResult)) boundary = i + 1;
|
|
170
91
|
}
|
|
171
92
|
return boundary;
|
|
172
93
|
}
|
|
@@ -179,7 +100,7 @@ function splitAtRecencyBoundary(messages, options = {}) {
|
|
|
179
100
|
tailStartIndex: messages.length,
|
|
180
101
|
usedIntraTurnFallback: false
|
|
181
102
|
};
|
|
182
|
-
const turnStarts = findTurnStarts(messages);
|
|
103
|
+
const turnStarts = findTurnStarts(messages, options.provider);
|
|
183
104
|
if (turnStarts.length === 0) return {
|
|
184
105
|
head: messages,
|
|
185
106
|
tail: [],
|
|
@@ -219,7 +140,7 @@ function splitAtRecencyBoundary(messages, options = {}) {
|
|
|
219
140
|
if (tailStartIndex === turnStarts[0]) {
|
|
220
141
|
const intraTurnTokens = options.intraTurnTokens;
|
|
221
142
|
if (intraTurnTokens != null && Number.isFinite(intraTurnTokens) && intraTurnTokens > 0 && tokenCounter != null) {
|
|
222
|
-
const intraTurnBoundary = findIntraTurnBoundary(messages, countMessageAt, intraTurnTokens, turnStarts[1] ?? messages.length);
|
|
143
|
+
const intraTurnBoundary = findIntraTurnBoundary(messages, countMessageAt, intraTurnTokens, turnStarts[1] ?? messages.length, options.provider);
|
|
223
144
|
if (intraTurnBoundary != null) return {
|
|
224
145
|
head: messages.slice(0, intraTurnBoundary),
|
|
225
146
|
tail: messages.slice(intraTurnBoundary),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recency.cjs","names":["
|
|
1
|
+
{"version":3,"file":"recency.cjs","names":["getProviderMessageRole","getBoundedProviderPairingArray","getProviderToolCallPartDescriptor","getProviderToolResultPartDescriptor","consumeProviderToolResultPair","getProviderToolMessageResultDescriptor","getProviderSourceMessageIds"],"sources":["../../../src/messages/recency.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
const require_toolContent = require("../utils/toolContent.cjs");
|
|
2
|
+
const require_toolResultTypes = require("./toolResultTypes.cjs");
|
|
3
|
+
let node_util_types = require("node:util/types");
|
|
4
|
+
//#region src/messages/toolHistoryProjection.ts
|
|
5
|
+
function recordToolHistoryCallMirror(mirrors, block) {
|
|
6
|
+
const descriptor = require_toolResultTypes.getProviderToolCallPartDescriptor(block);
|
|
7
|
+
if (descriptor == null) return;
|
|
8
|
+
if (mirrors.has(descriptor.callId)) {
|
|
9
|
+
mirrors.set(descriptor.callId, null);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const call = readData(block, "tool_call") ?? readData(block, "toolUse") ?? readData(block, "toolCall") ?? block;
|
|
13
|
+
const serialized = require_toolContent.serializeStructuredValueBounded(readData(call, "args") ?? readData(call, "input"), 8e3);
|
|
14
|
+
mirrors.set(descriptor.callId, serialized.truncated ? null : {
|
|
15
|
+
name: descriptor.name,
|
|
16
|
+
arguments: serialized.content
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function isToolHistoryCallMirror(mirrors, id, name, args) {
|
|
20
|
+
if (typeof id !== "string") return false;
|
|
21
|
+
const mirror = mirrors?.get(id);
|
|
22
|
+
if (mirror == null || mirror.name !== name) return false;
|
|
23
|
+
const serialized = require_toolContent.serializeStructuredValueBounded(args, 8e3);
|
|
24
|
+
return !serialized.truncated && serialized.content === mirror.arguments;
|
|
25
|
+
}
|
|
26
|
+
const OPENAI_RESPONSES_REPLAY_POSITIONS_KEY = "__openai_responses_replay_positions__";
|
|
27
|
+
function isResponsesReplayPosition(value) {
|
|
28
|
+
const kind = readData(value, "kind");
|
|
29
|
+
const itemId = readData(value, "itemId");
|
|
30
|
+
const outputIndex = readData(value, "outputIndex");
|
|
31
|
+
const contentIndex = readData(value, "contentIndex");
|
|
32
|
+
return (kind === "message" || kind === "output" || kind === "reasoning" || kind === "text") && typeof itemId === "string" && itemId.length > 0 && typeof outputIndex === "number" && Number.isSafeInteger(outputIndex) && outputIndex >= 0 && (contentIndex == null || typeof contentIndex === "number" && Number.isSafeInteger(contentIndex) && contentIndex >= 0);
|
|
33
|
+
}
|
|
34
|
+
function createToolHistoryPreparation() {
|
|
35
|
+
const projections = /* @__PURE__ */ new WeakMap();
|
|
36
|
+
let remainingWork = 1e5;
|
|
37
|
+
return { get(message) {
|
|
38
|
+
const cached = projections.get(message);
|
|
39
|
+
if (cached != null) return cached;
|
|
40
|
+
const source = getResponsesHistorySource(message);
|
|
41
|
+
if (source == null || source.items.length === 0) return;
|
|
42
|
+
const contributions = [];
|
|
43
|
+
let hasToolContent = false;
|
|
44
|
+
let truncated = false;
|
|
45
|
+
for (const contribution of projectResponsesHistory(source, () => {
|
|
46
|
+
if (remainingWork <= 0) {
|
|
47
|
+
truncated = true;
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
remainingWork--;
|
|
51
|
+
return true;
|
|
52
|
+
})) {
|
|
53
|
+
contributions.push(contribution);
|
|
54
|
+
hasToolContent ||= contribution.kind !== "text" && !(contribution.kind === "provider-item" && contribution.providerType === "reasoning");
|
|
55
|
+
}
|
|
56
|
+
const projection = {
|
|
57
|
+
source,
|
|
58
|
+
contributions,
|
|
59
|
+
hasToolContent: hasToolContent || truncated,
|
|
60
|
+
truncated
|
|
61
|
+
};
|
|
62
|
+
projections.set(message, projection);
|
|
63
|
+
return projection;
|
|
64
|
+
} };
|
|
65
|
+
}
|
|
66
|
+
function readData(value, key) {
|
|
67
|
+
if (value == null || typeof value !== "object" || (0, node_util_types.isProxy)(value)) return;
|
|
68
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
69
|
+
return descriptor != null && "value" in descriptor ? descriptor.value : void 0;
|
|
70
|
+
}
|
|
71
|
+
function readArray(value) {
|
|
72
|
+
return Array.isArray(value) && !(0, node_util_types.isProxy)(value) ? value : void 0;
|
|
73
|
+
}
|
|
74
|
+
function getResponsesHistorySource(message) {
|
|
75
|
+
const output = readArray(readData(message.response_metadata, "output"));
|
|
76
|
+
if (output != null && output.length > 0) return {
|
|
77
|
+
coverage: "complete-output",
|
|
78
|
+
items: output,
|
|
79
|
+
message
|
|
80
|
+
};
|
|
81
|
+
const sidecar = readArray(readData(message.additional_kwargs, "tool_outputs"));
|
|
82
|
+
return sidecar != null ? {
|
|
83
|
+
coverage: "tool-sidecar",
|
|
84
|
+
items: sidecar,
|
|
85
|
+
message
|
|
86
|
+
} : void 0;
|
|
87
|
+
}
|
|
88
|
+
function getGeneratedImageMimeType(data) {
|
|
89
|
+
const bytes = Buffer.from(data.slice(0, 16), "base64");
|
|
90
|
+
if (bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255) return "image/jpeg";
|
|
91
|
+
if (bytes[0] === 82 && bytes[1] === 73 && bytes[2] === 70 && bytes[3] === 70 && bytes[8] === 87 && bytes[9] === 69 && bytes[10] === 66 && bytes[11] === 80) return "image/webp";
|
|
92
|
+
return "image/png";
|
|
93
|
+
}
|
|
94
|
+
function* projectResponsesItems(source, consumeWork) {
|
|
95
|
+
for (let outputIndex = 0; outputIndex < source.items.length; outputIndex++) {
|
|
96
|
+
if (!consumeWork()) return;
|
|
97
|
+
const item = readData(source.items, String(outputIndex));
|
|
98
|
+
const type = readData(item, "type");
|
|
99
|
+
if (typeof type !== "string") continue;
|
|
100
|
+
const id = readData(item, "id");
|
|
101
|
+
const position = {
|
|
102
|
+
outputIndex,
|
|
103
|
+
...typeof id === "string" && { itemId: id }
|
|
104
|
+
};
|
|
105
|
+
if (type === "message") {
|
|
106
|
+
const content = readArray(readData(item, "content"));
|
|
107
|
+
if (content == null) continue;
|
|
108
|
+
for (let contentIndex = 0; contentIndex < content.length; contentIndex++) {
|
|
109
|
+
if (!consumeWork()) return;
|
|
110
|
+
const part = readData(content, String(contentIndex));
|
|
111
|
+
const text = readData(part, readData(part, "type") === "refusal" ? "refusal" : "text");
|
|
112
|
+
if (typeof text === "string" && text.length > 0) yield {
|
|
113
|
+
...position,
|
|
114
|
+
contentIndex,
|
|
115
|
+
kind: "text",
|
|
116
|
+
actor: "model",
|
|
117
|
+
text
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (type === "computer_call") {
|
|
123
|
+
const callId = readData(item, "call_id");
|
|
124
|
+
yield {
|
|
125
|
+
...position,
|
|
126
|
+
kind: "call",
|
|
127
|
+
actor: "model",
|
|
128
|
+
name: "computer",
|
|
129
|
+
arguments: readData(item, "action"),
|
|
130
|
+
...typeof callId === "string" && { callId }
|
|
131
|
+
};
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (type === "function_call" || type === "custom_tool_call") {
|
|
135
|
+
const name = readData(item, "name");
|
|
136
|
+
const args = readData(item, type === "custom_tool_call" ? "input" : "arguments");
|
|
137
|
+
const callId = readData(item, "call_id");
|
|
138
|
+
yield {
|
|
139
|
+
...position,
|
|
140
|
+
kind: "call",
|
|
141
|
+
actor: "model",
|
|
142
|
+
name: typeof name === "string" ? name : "",
|
|
143
|
+
arguments: typeof args === "string" ? args : "",
|
|
144
|
+
...typeof callId === "string" && { callId }
|
|
145
|
+
};
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (type === "image_generation_call") {
|
|
149
|
+
const data = readData(item, "result");
|
|
150
|
+
if (readData(item, "status") === "completed" && typeof data === "string" && data) yield {
|
|
151
|
+
...position,
|
|
152
|
+
kind: "image",
|
|
153
|
+
actor: "tool",
|
|
154
|
+
image: {
|
|
155
|
+
type: "image",
|
|
156
|
+
mimeType: getGeneratedImageMimeType(data),
|
|
157
|
+
data,
|
|
158
|
+
...typeof id === "string" && { id },
|
|
159
|
+
metadata: { status: "completed" }
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
if (readData(item, "status") !== "completed" || typeof data !== "string" || !data) yield {
|
|
163
|
+
...position,
|
|
164
|
+
kind: "provider-item",
|
|
165
|
+
actor: "tool",
|
|
166
|
+
providerType: type,
|
|
167
|
+
value: {
|
|
168
|
+
type,
|
|
169
|
+
status: readData(item, "status"),
|
|
170
|
+
result: "[image unavailable]"
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
yield {
|
|
176
|
+
...position,
|
|
177
|
+
kind: "provider-item",
|
|
178
|
+
actor: type === "reasoning" || type === "mcp_approval_request" ? "model" : "tool",
|
|
179
|
+
providerType: type,
|
|
180
|
+
value: item
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function* projectResponsesHistory(source, consumeWork) {
|
|
185
|
+
if (source.coverage === "complete-output" || source.message == null) {
|
|
186
|
+
yield* projectResponsesItems(source, consumeWork);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const positions = readArray(readData(source.message.additional_kwargs, OPENAI_RESPONSES_REPLAY_POSITIONS_KEY));
|
|
190
|
+
const outputPositions = /* @__PURE__ */ new Map();
|
|
191
|
+
const textPositions = [];
|
|
192
|
+
const seenPositions = /* @__PURE__ */ new Set();
|
|
193
|
+
for (let index = 0; positions != null && index < positions.length; index++) {
|
|
194
|
+
if (!consumeWork()) return;
|
|
195
|
+
const position = readData(positions, String(index));
|
|
196
|
+
if (!isResponsesReplayPosition(position)) continue;
|
|
197
|
+
if (position.kind === "output") outputPositions.set(position.itemId, position.outputIndex);
|
|
198
|
+
else if (position.kind === "text") {
|
|
199
|
+
const key = `${position.itemId}:${position.outputIndex}:${position.contentIndex ?? 0}`;
|
|
200
|
+
if (!seenPositions.has(key)) {
|
|
201
|
+
seenPositions.add(key);
|
|
202
|
+
textPositions.push(position);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
textPositions.sort((left, right) => left.outputIndex - right.outputIndex || (left.contentIndex ?? 0) - (right.contentIndex ?? 0));
|
|
207
|
+
const text = [];
|
|
208
|
+
const content = source.message.content;
|
|
209
|
+
if (typeof content === "string" && content) text.push(content);
|
|
210
|
+
else if (Array.isArray(content)) for (let index = 0; index < content.length; index++) {
|
|
211
|
+
if (!consumeWork()) return;
|
|
212
|
+
const value = readData(readData(content, String(index)), "text");
|
|
213
|
+
if (typeof value === "string" && value) text.push(value);
|
|
214
|
+
}
|
|
215
|
+
const contributions = [];
|
|
216
|
+
for (let index = 0; index < text.length; index++) {
|
|
217
|
+
const position = text.length === textPositions.length ? textPositions[index] : void 0;
|
|
218
|
+
contributions.push({
|
|
219
|
+
kind: "text",
|
|
220
|
+
actor: "model",
|
|
221
|
+
text: text[index],
|
|
222
|
+
outputIndex: position?.outputIndex ?? -1,
|
|
223
|
+
contentIndex: position?.contentIndex ?? index,
|
|
224
|
+
...position != null && { itemId: position.itemId }
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
for (const contribution of projectResponsesItems(source, consumeWork)) contributions.push({
|
|
228
|
+
...contribution,
|
|
229
|
+
outputIndex: contribution.itemId != null ? outputPositions.get(contribution.itemId) ?? Number.MAX_SAFE_INTEGER : Number.MAX_SAFE_INTEGER
|
|
230
|
+
});
|
|
231
|
+
contributions.sort((left, right) => left.outputIndex - right.outputIndex || (left.contentIndex ?? 0) - (right.contentIndex ?? 0));
|
|
232
|
+
for (const contribution of contributions) yield contribution;
|
|
233
|
+
}
|
|
234
|
+
//#endregion
|
|
235
|
+
exports.OPENAI_RESPONSES_REPLAY_POSITIONS_KEY = OPENAI_RESPONSES_REPLAY_POSITIONS_KEY;
|
|
236
|
+
exports.createToolHistoryPreparation = createToolHistoryPreparation;
|
|
237
|
+
exports.getGeneratedImageMimeType = getGeneratedImageMimeType;
|
|
238
|
+
exports.getResponsesHistorySource = getResponsesHistorySource;
|
|
239
|
+
exports.isResponsesReplayPosition = isResponsesReplayPosition;
|
|
240
|
+
exports.isToolHistoryCallMirror = isToolHistoryCallMirror;
|
|
241
|
+
exports.recordToolHistoryCallMirror = recordToolHistoryCallMirror;
|
|
242
|
+
|
|
243
|
+
//# sourceMappingURL=toolHistoryProjection.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolHistoryProjection.cjs","names":["getProviderToolCallPartDescriptor","serializeStructuredValueBounded"],"sources":["../../../src/messages/toolHistoryProjection.ts"],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const require_providerRegistry = require("../llm/providerRegistry.cjs");
|
|
2
|
+
require("../llm/providers.cjs");
|
|
1
3
|
let node_util_types = require("node:util/types");
|
|
2
4
|
const PROVIDER_TOOL_PAIRING_MAX_OUTER_PARTS = 4096;
|
|
3
5
|
const TOOL_CALL_KINDS = ["tool"];
|
|
@@ -403,6 +405,21 @@ function getProviderToolResultPartDescriptor(part) {
|
|
|
403
405
|
} : void 0;
|
|
404
406
|
}
|
|
405
407
|
}
|
|
408
|
+
const PROVIDER_TOOL_CALL_CONTENT_TYPES = new Set([
|
|
409
|
+
"tool_call",
|
|
410
|
+
"tool_use",
|
|
411
|
+
"server_tool_use",
|
|
412
|
+
"mcp_tool_use",
|
|
413
|
+
"server_tool_call",
|
|
414
|
+
"toolCall",
|
|
415
|
+
"toolUse",
|
|
416
|
+
"executableCode"
|
|
417
|
+
]);
|
|
418
|
+
function isProviderToolContentPart(part) {
|
|
419
|
+
const record = getRecord(part);
|
|
420
|
+
const type = record == null ? void 0 : readString(record, "type");
|
|
421
|
+
return type != null && (PROVIDER_TOOL_CALL_CONTENT_TYPES.has(type) || Object.prototype.hasOwnProperty.call(TOOL_RESULT_ENVELOPE_FIELDS, type));
|
|
422
|
+
}
|
|
406
423
|
function optionalName(record) {
|
|
407
424
|
const property = readDataProperty(record, "name");
|
|
408
425
|
if (!property.found || property.value === void 0) return {};
|
|
@@ -621,9 +638,10 @@ function appendProviderToolCallDescriptor(index, descriptor) {
|
|
|
621
638
|
return;
|
|
622
639
|
}
|
|
623
640
|
if (existing === null) return;
|
|
624
|
-
const
|
|
625
|
-
if (existing.descriptor.kind === descriptor.kind && existing.descriptor.name === descriptor.name &&
|
|
626
|
-
|
|
641
|
+
const sourceTypes = existing.secondarySourceTypes ?? new Set([existing.descriptor.sourceType]);
|
|
642
|
+
if (existing.descriptor.kind === descriptor.kind && existing.descriptor.name === descriptor.name && !sourceTypes.has(descriptor.sourceType)) {
|
|
643
|
+
sourceTypes.add(descriptor.sourceType);
|
|
644
|
+
existing.secondarySourceTypes = sourceTypes;
|
|
627
645
|
return;
|
|
628
646
|
}
|
|
629
647
|
index.set(descriptor.callId, null);
|
|
@@ -651,14 +669,137 @@ function consumeProviderToolResultPair(descriptor, calls, previousPart) {
|
|
|
651
669
|
calls.delete(descriptor.toolCallId);
|
|
652
670
|
return true;
|
|
653
671
|
}
|
|
672
|
+
function readOwnString(value, key) {
|
|
673
|
+
if (value == null || typeof value !== "object" || Array.isArray(value)) return;
|
|
674
|
+
try {
|
|
675
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
676
|
+
return descriptor != null && "value" in descriptor && typeof descriptor.value === "string" && descriptor.value !== "" && descriptor.value.length <= 512 ? descriptor.value : void 0;
|
|
677
|
+
} catch {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
function readOwnValue(value, key) {
|
|
682
|
+
if (value == null || typeof value !== "object" || Array.isArray(value)) return;
|
|
683
|
+
try {
|
|
684
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
685
|
+
return descriptor != null && "value" in descriptor ? descriptor.value : void 0;
|
|
686
|
+
} catch {
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
const LEGACY_FUNCTION_CALL_PREFIX = "legacy_function:";
|
|
691
|
+
function getLegacyFunctionCallId(name) {
|
|
692
|
+
const callId = `${LEGACY_FUNCTION_CALL_PREFIX}${name}`;
|
|
693
|
+
return callId.length <= 512 ? callId : void 0;
|
|
694
|
+
}
|
|
695
|
+
const GENERIC_MESSAGE_ROLES = {
|
|
696
|
+
assistant: "assistant",
|
|
697
|
+
ai: "assistant",
|
|
698
|
+
model: "assistant",
|
|
699
|
+
supervisor: "assistant",
|
|
700
|
+
user: "user",
|
|
701
|
+
human: "user",
|
|
702
|
+
system: "system",
|
|
703
|
+
developer: "system",
|
|
704
|
+
tool: "tool",
|
|
705
|
+
function: "function"
|
|
706
|
+
};
|
|
707
|
+
function getProviderMessageRole(message, provider) {
|
|
708
|
+
switch (message.getType()) {
|
|
709
|
+
case "ai": return "assistant";
|
|
710
|
+
case "human": return "user";
|
|
711
|
+
case "system": return "system";
|
|
712
|
+
case "tool": return "tool";
|
|
713
|
+
case "function": return "function";
|
|
714
|
+
case "generic": {
|
|
715
|
+
if (provider != null && require_providerRegistry.getProviderFamily(provider) === "bedrock") return "user";
|
|
716
|
+
const role = message.role;
|
|
717
|
+
return typeof role === "string" ? GENERIC_MESSAGE_ROLES[role] : void 0;
|
|
718
|
+
}
|
|
719
|
+
default: return;
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
function getRawToolCallDescriptor(toolCall) {
|
|
723
|
+
const callId = readOwnString(toolCall, "id");
|
|
724
|
+
if (callId == null) return;
|
|
725
|
+
let name;
|
|
726
|
+
if (toolCall != null && typeof toolCall === "object") try {
|
|
727
|
+
const property = Object.getOwnPropertyDescriptor(toolCall, "function");
|
|
728
|
+
name = property != null && "value" in property ? readOwnString(property.value, "name") : void 0;
|
|
729
|
+
} catch {
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
return {
|
|
733
|
+
callId,
|
|
734
|
+
kind: "tool",
|
|
735
|
+
sourceType: "raw_tool_calls",
|
|
736
|
+
...name == null ? {} : { name }
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
function appendProviderMessageToolCalls(message, calls, provider) {
|
|
740
|
+
if (getProviderMessageRole(message, provider) !== "assistant") return 0;
|
|
741
|
+
let recognized = 0;
|
|
742
|
+
const toolCalls = getBoundedProviderPairingArrayProperty(message, "tool_calls");
|
|
743
|
+
if (toolCalls != null) for (let index = 0; index < toolCalls.length; index++) {
|
|
744
|
+
const descriptor = getProviderAIMessageToolCallDescriptor(toolCalls[index]);
|
|
745
|
+
if (descriptor != null) {
|
|
746
|
+
appendProviderToolCallDescriptor(calls, descriptor);
|
|
747
|
+
recognized += 1;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
const rawToolCalls = getBoundedProviderPairingArrayProperty(message.additional_kwargs, "tool_calls");
|
|
751
|
+
if (rawToolCalls != null) for (let index = 0; index < rawToolCalls.length; index++) {
|
|
752
|
+
const descriptor = getRawToolCallDescriptor(rawToolCalls[index]);
|
|
753
|
+
if (descriptor != null) {
|
|
754
|
+
appendProviderToolCallDescriptor(calls, descriptor);
|
|
755
|
+
recognized += 1;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
const legacyFunctionName = readOwnString(readOwnValue(message.additional_kwargs, "function_call"), "name");
|
|
759
|
+
const legacyFunctionCallId = legacyFunctionName == null ? void 0 : getLegacyFunctionCallId(legacyFunctionName);
|
|
760
|
+
if (legacyFunctionCallId != null) {
|
|
761
|
+
appendProviderToolCallDescriptor(calls, {
|
|
762
|
+
callId: legacyFunctionCallId,
|
|
763
|
+
kind: "tool",
|
|
764
|
+
name: legacyFunctionName,
|
|
765
|
+
sourceType: "legacy_function_call"
|
|
766
|
+
});
|
|
767
|
+
recognized += 1;
|
|
768
|
+
}
|
|
769
|
+
return recognized;
|
|
770
|
+
}
|
|
771
|
+
function getProviderToolMessageResultDescriptor(message, provider) {
|
|
772
|
+
const role = getProviderMessageRole(message, provider);
|
|
773
|
+
if (role === "function" && message.name != null) {
|
|
774
|
+
const toolCallId = getLegacyFunctionCallId(message.name);
|
|
775
|
+
return toolCallId == null ? void 0 : {
|
|
776
|
+
type: "function_message",
|
|
777
|
+
toolCallId,
|
|
778
|
+
compatibleCallKinds: ["tool"],
|
|
779
|
+
expectedToolNames: [message.name]
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
if (role !== "tool") return;
|
|
783
|
+
const toolMessage = message;
|
|
784
|
+
const toolCallId = typeof toolMessage.tool_call_id === "string" ? toolMessage.tool_call_id : toolMessage.toolCallId;
|
|
785
|
+
return typeof toolCallId === "string" && toolCallId !== "" && toolCallId.length <= 512 ? {
|
|
786
|
+
type: "tool_message",
|
|
787
|
+
toolCallId,
|
|
788
|
+
compatibleCallKinds: ["tool"]
|
|
789
|
+
} : void 0;
|
|
790
|
+
}
|
|
654
791
|
//#endregion
|
|
792
|
+
exports.appendProviderMessageToolCalls = appendProviderMessageToolCalls;
|
|
655
793
|
exports.appendProviderToolCallDescriptor = appendProviderToolCallDescriptor;
|
|
656
794
|
exports.consumeProviderToolResultPair = consumeProviderToolResultPair;
|
|
657
795
|
exports.getBoundedProviderPairingArray = getBoundedProviderPairingArray;
|
|
658
796
|
exports.getBoundedProviderPairingArrayProperty = getBoundedProviderPairingArrayProperty;
|
|
659
|
-
exports.
|
|
797
|
+
exports.getProviderMessageRole = getProviderMessageRole;
|
|
660
798
|
exports.getProviderToolCallPartDescriptor = getProviderToolCallPartDescriptor;
|
|
799
|
+
exports.getProviderToolMessageResultDescriptor = getProviderToolMessageResultDescriptor;
|
|
661
800
|
exports.getProviderToolResultPartDescriptor = getProviderToolResultPartDescriptor;
|
|
662
801
|
exports.hasStructurallyValidAnthropicWebSearchResultContent = hasStructurallyValidAnthropicWebSearchResultContent;
|
|
802
|
+
exports.isExecutableCodePart = isExecutableCodePart;
|
|
803
|
+
exports.isProviderToolContentPart = isProviderToolContentPart;
|
|
663
804
|
|
|
664
805
|
//# sourceMappingURL=toolResultTypes.cjs.map
|