@librechat/agents 3.8.0 → 3.8.2
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 +176 -55
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +16 -6
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/hitl/approvalReview.cjs +89 -0
- package/dist/cjs/hitl/approvalReview.cjs.map +1 -0
- package/dist/cjs/langfuse.cjs +42 -0
- 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 +6 -10
- 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 +14 -8
- 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 +26 -38
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +132 -43
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +2 -0
- package/dist/cjs/messages/prune.cjs +14 -9
- 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 +22 -10
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +7 -5
- 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 +20 -19
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +19 -9
- 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/ToolNode.cjs +256 -84
- package/dist/cjs/tools/ToolNode.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/tools/subagent/SubagentExecutor.cjs +24 -9
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentReplay.cjs +2 -0
- package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
- package/dist/cjs/tools/toolBatchReplay.cjs +187 -0
- package/dist/cjs/tools/toolBatchReplay.cjs.map +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +12 -0
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/types/hitl.cjs +4 -0
- package/dist/cjs/types/hitl.cjs.map +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 +178 -57
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +16 -6
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/hitl/approvalReview.mjs +83 -0
- package/dist/esm/hitl/approvalReview.mjs.map +1 -0
- package/dist/esm/langfuse.mjs +43 -2
- 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 +6 -10
- 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 +13 -10
- 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 +24 -34
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +133 -44
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +2 -0
- package/dist/esm/messages/prune.mjs +14 -9
- 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 +23 -11
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +7 -5
- 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 +17 -16
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +20 -10
- 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/ToolNode.mjs +256 -84
- package/dist/esm/tools/ToolNode.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/tools/subagent/SubagentExecutor.mjs +24 -9
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
- package/dist/esm/tools/toolBatchReplay.mjs +176 -0
- package/dist/esm/tools/toolBatchReplay.mjs.map +1 -0
- package/dist/esm/tools/toolOutputReferences.mjs +12 -0
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/types/hitl.mjs +4 -1
- package/dist/esm/types/hitl.mjs.map +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/hitl/approvalReview.d.ts +32 -0
- package/dist/types/hooks/types.d.ts +4 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/langfuse.d.ts +5 -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/ToolNode.d.ts +12 -6
- package/dist/types/tools/subagent/SubagentReplay.d.ts +2 -0
- package/dist/types/tools/toolBatchReplay.d.ts +54 -0
- package/dist/types/tools/toolOutputReferences.d.ts +2 -0
- package/dist/types/types/graph.d.ts +20 -0
- package/dist/types/types/run.d.ts +4 -0
- package/dist/types/types/summarize.d.ts +4 -1
- 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/hitl/approvalReview.ts +209 -0
- package/src/hooks/types.ts +4 -1
- package/src/index.ts +1 -0
- package/src/langfuse.ts +67 -9
- 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 +44 -22
- 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/ToolNode.ts +518 -184
- package/src/tools/subagent/SubagentExecutor.ts +35 -6
- package/src/tools/subagent/SubagentReplay.ts +2 -2
- package/src/tools/toolBatchReplay.ts +395 -0
- package/src/tools/toolOutputReferences.ts +16 -0
- package/src/types/graph.ts +20 -0
- package/src/types/run.ts +4 -0
- package/src/types/summarize.ts +4 -1
- package/src/utils/events.ts +19 -0
- package/src/utils/tokens.ts +183 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getProviderSourceMessageIds } from "./provenance.mjs";
|
|
2
|
-
import { appendProviderToolCallDescriptor, consumeProviderToolResultPair, getBoundedProviderPairingArray,
|
|
2
|
+
import { appendProviderMessageToolCalls, appendProviderToolCallDescriptor, consumeProviderToolResultPair, getBoundedProviderPairingArray, getProviderMessageRole, getProviderToolCallPartDescriptor, getProviderToolMessageResultDescriptor, getProviderToolResultPartDescriptor } from "./toolResultTypes.mjs";
|
|
3
3
|
//#region src/messages/recency.ts
|
|
4
4
|
const DEFAULT_RETAIN_RECENT_TURNS = 2;
|
|
5
5
|
const DEFAULT_INTRA_TURN_RETAIN_RATIO = .16;
|
|
@@ -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 = getProviderAIMessageToolCallDescriptor(toolCall);
|
|
56
|
-
if (descriptor != null) appendProviderToolCallDescriptor(calls, descriptor);
|
|
57
|
-
}
|
|
58
|
-
const rawToolCalls = getBoundedProviderPairingArrayProperty(message.additional_kwargs, "tool_calls");
|
|
59
|
-
if (rawToolCalls != null) for (const toolCall of rawToolCalls) {
|
|
60
|
-
const descriptor = getRawToolCallDescriptor(toolCall);
|
|
61
|
-
if (descriptor != null) 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) 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 = getProviderMessageRole(message, provider) === "user";
|
|
93
13
|
const candidateCalls = isHuman ? new Map(calls) : calls;
|
|
94
|
-
if (!isHuman)
|
|
14
|
+
if (!isHuman) appendProviderMessageToolCalls(message, candidateCalls, provider);
|
|
95
15
|
const content = 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 = getProviderToolMessageResultDescriptor(message, provider);
|
|
115
35
|
if (toolMessageResult != null && 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.mjs","names":[],"sources":["../../../src/messages/recency.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"recency.mjs","names":[],"sources":["../../../src/messages/recency.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { serializeStructuredValueBounded } from "../utils/toolContent.mjs";
|
|
2
|
+
import { getProviderToolCallPartDescriptor } from "./toolResultTypes.mjs";
|
|
3
|
+
import { isProxy } from "node:util/types";
|
|
4
|
+
//#region src/messages/toolHistoryProjection.ts
|
|
5
|
+
function recordToolHistoryCallMirror(mirrors, block) {
|
|
6
|
+
const descriptor = 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 = 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 = 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" || 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) && !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
|
+
export { OPENAI_RESPONSES_REPLAY_POSITIONS_KEY, createToolHistoryPreparation, getGeneratedImageMimeType, getResponsesHistorySource, isResponsesReplayPosition, isToolHistoryCallMirror, recordToolHistoryCallMirror };
|
|
236
|
+
|
|
237
|
+
//# sourceMappingURL=toolHistoryProjection.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolHistoryProjection.mjs","names":[],"sources":["../../../src/messages/toolHistoryProjection.ts"],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getProviderFamily } from "../llm/providerRegistry.mjs";
|
|
2
|
+
import "../llm/providers.mjs";
|
|
1
3
|
import { isProxy } from "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,7 +669,126 @@ 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 && 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
|
|
655
|
-
export { appendProviderToolCallDescriptor, consumeProviderToolResultPair, getBoundedProviderPairingArray, getBoundedProviderPairingArrayProperty,
|
|
792
|
+
export { appendProviderMessageToolCalls, appendProviderToolCallDescriptor, consumeProviderToolResultPair, getBoundedProviderPairingArray, getBoundedProviderPairingArrayProperty, getProviderMessageRole, getProviderToolCallPartDescriptor, getProviderToolMessageResultDescriptor, getProviderToolResultPartDescriptor, hasStructurallyValidAnthropicWebSearchResultContent, isExecutableCodePart, isProviderToolContentPart };
|
|
656
793
|
|
|
657
794
|
//# sourceMappingURL=toolResultTypes.mjs.map
|