@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
package/src/utils/tokens.ts
CHANGED
|
@@ -16,6 +16,7 @@ export type UnsafeTokenMeasurementReason =
|
|
|
16
16
|
| 'content_proxy'
|
|
17
17
|
| 'metadata_proxy'
|
|
18
18
|
| 'metadata_accessor'
|
|
19
|
+
| 'metadata_limit'
|
|
19
20
|
| 'invalid_count';
|
|
20
21
|
|
|
21
22
|
export class UnsafeTokenMeasurementError extends Error {
|
|
@@ -121,6 +122,7 @@ const MAX_STRUCTURED_TOKENIZATION_CHARS = 200_000;
|
|
|
121
122
|
/** One UTF-16 character can encode to several tokenizer pieces. */
|
|
122
123
|
const MAX_TOKENS_PER_OMITTED_STRUCTURED_CHAR = 4;
|
|
123
124
|
const MAX_STRUCTURED_SAFETY_INSPECTION_WORK = 10_000;
|
|
125
|
+
const MAX_RAW_TOOL_CALLS = MAX_STRUCTURED_SAFETY_INSPECTION_WORK;
|
|
124
126
|
/** Bounds BPE work per plain-text segment without omitting any text. */
|
|
125
127
|
const MAX_TEXT_TOKENIZATION_CHARS = 8_192;
|
|
126
128
|
/** Covers tokenizer segmentation changes on both sides of a chunk boundary. */
|
|
@@ -946,6 +948,63 @@ function getBoundedStructuredTokenCount(
|
|
|
946
948
|
);
|
|
947
949
|
}
|
|
948
950
|
|
|
951
|
+
export function readTokenMetadataProperty(
|
|
952
|
+
value: object,
|
|
953
|
+
key: PropertyKey,
|
|
954
|
+
path: string
|
|
955
|
+
): unknown {
|
|
956
|
+
const seen = new Set<object>();
|
|
957
|
+
let current: object | null = value;
|
|
958
|
+
for (let depth = 0; current != null && depth < 100; depth++) {
|
|
959
|
+
if (isProxy(current)) {
|
|
960
|
+
throw new UnsafeTokenMeasurementError({
|
|
961
|
+
reason: 'metadata_proxy',
|
|
962
|
+
path,
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
if (seen.has(current)) {
|
|
966
|
+
throw new UnsafeTokenMeasurementError({
|
|
967
|
+
reason: 'metadata_accessor',
|
|
968
|
+
path,
|
|
969
|
+
});
|
|
970
|
+
}
|
|
971
|
+
seen.add(current);
|
|
972
|
+
let descriptor: PropertyDescriptor | undefined;
|
|
973
|
+
try {
|
|
974
|
+
descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
975
|
+
} catch {
|
|
976
|
+
throw new UnsafeTokenMeasurementError({
|
|
977
|
+
reason: 'metadata_accessor',
|
|
978
|
+
path,
|
|
979
|
+
});
|
|
980
|
+
}
|
|
981
|
+
if (descriptor != null) {
|
|
982
|
+
if (!('value' in descriptor)) {
|
|
983
|
+
throw new UnsafeTokenMeasurementError({
|
|
984
|
+
reason: 'metadata_accessor',
|
|
985
|
+
path,
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
return descriptor.value;
|
|
989
|
+
}
|
|
990
|
+
try {
|
|
991
|
+
current = Object.getPrototypeOf(current) as object | null;
|
|
992
|
+
} catch {
|
|
993
|
+
throw new UnsafeTokenMeasurementError({
|
|
994
|
+
reason: 'metadata_accessor',
|
|
995
|
+
path,
|
|
996
|
+
});
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
if (current != null) {
|
|
1000
|
+
throw new UnsafeTokenMeasurementError({
|
|
1001
|
+
reason: 'metadata_accessor',
|
|
1002
|
+
path,
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
return undefined;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
949
1008
|
export function getTokenCountForMessage(
|
|
950
1009
|
message: BaseMessage,
|
|
951
1010
|
getTokenCount: (text: string) => number,
|
|
@@ -1187,6 +1246,130 @@ export function getTokenCountForMessage(
|
|
|
1187
1246
|
: getBoundedStructuredTokenCount(args, countText);
|
|
1188
1247
|
}
|
|
1189
1248
|
}
|
|
1249
|
+
const rawCalls =
|
|
1250
|
+
toolCalls.length > 0 || additionalKwargs == null
|
|
1251
|
+
? undefined
|
|
1252
|
+
: readTokenMetadataProperty(
|
|
1253
|
+
additionalKwargs,
|
|
1254
|
+
'tool_calls',
|
|
1255
|
+
'additional_kwargs.tool_calls'
|
|
1256
|
+
);
|
|
1257
|
+
if (rawCalls != null) {
|
|
1258
|
+
if (isProxy(rawCalls)) {
|
|
1259
|
+
throw new UnsafeTokenMeasurementError({
|
|
1260
|
+
reason: 'metadata_proxy',
|
|
1261
|
+
path: 'additional_kwargs.tool_calls',
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
if (!Array.isArray(rawCalls)) {
|
|
1265
|
+
throw new UnsafeTokenMeasurementError({
|
|
1266
|
+
reason: 'metadata_accessor',
|
|
1267
|
+
path: 'additional_kwargs.tool_calls',
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
if (rawCalls.length > MAX_RAW_TOOL_CALLS) {
|
|
1271
|
+
throw new UnsafeTokenMeasurementError({
|
|
1272
|
+
reason: 'metadata_limit',
|
|
1273
|
+
path: 'additional_kwargs.tool_calls',
|
|
1274
|
+
});
|
|
1275
|
+
}
|
|
1276
|
+
for (let i = 0; i < rawCalls.length; i++) {
|
|
1277
|
+
const rawCall = readTokenMetadataProperty(
|
|
1278
|
+
rawCalls,
|
|
1279
|
+
String(i),
|
|
1280
|
+
`additional_kwargs.tool_calls[${i}]`
|
|
1281
|
+
);
|
|
1282
|
+
if (
|
|
1283
|
+
rawCall == null ||
|
|
1284
|
+
typeof rawCall !== 'object' ||
|
|
1285
|
+
isProxy(rawCall)
|
|
1286
|
+
) {
|
|
1287
|
+
throw new UnsafeTokenMeasurementError({
|
|
1288
|
+
reason: 'metadata_proxy',
|
|
1289
|
+
path: `additional_kwargs.tool_calls[${i}]`,
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
const callPath = `additional_kwargs.tool_calls[${i}]`;
|
|
1293
|
+
if (hasUnsafeStructuredSerialization(rawCall)) {
|
|
1294
|
+
throw new UnsafeTokenMeasurementError({
|
|
1295
|
+
reason: 'metadata_accessor',
|
|
1296
|
+
path: callPath,
|
|
1297
|
+
});
|
|
1298
|
+
}
|
|
1299
|
+
const callId = readTokenMetadataProperty(
|
|
1300
|
+
rawCall,
|
|
1301
|
+
'id',
|
|
1302
|
+
`${callPath}.id`
|
|
1303
|
+
);
|
|
1304
|
+
const callType = readTokenMetadataProperty(
|
|
1305
|
+
rawCall,
|
|
1306
|
+
'type',
|
|
1307
|
+
`${callPath}.type`
|
|
1308
|
+
);
|
|
1309
|
+
const rawFunction = readTokenMetadataProperty(
|
|
1310
|
+
rawCall,
|
|
1311
|
+
'function',
|
|
1312
|
+
`${callPath}.function`
|
|
1313
|
+
);
|
|
1314
|
+
const rawCustom = readTokenMetadataProperty(
|
|
1315
|
+
rawCall,
|
|
1316
|
+
'custom',
|
|
1317
|
+
`${callPath}.custom`
|
|
1318
|
+
);
|
|
1319
|
+
let projectedFunction = rawFunction;
|
|
1320
|
+
if (rawFunction != null && typeof rawFunction === 'object') {
|
|
1321
|
+
if (hasUnsafeStructuredSerialization(rawFunction)) {
|
|
1322
|
+
throw new UnsafeTokenMeasurementError({
|
|
1323
|
+
reason: 'metadata_accessor',
|
|
1324
|
+
path: `${callPath}.function`,
|
|
1325
|
+
});
|
|
1326
|
+
}
|
|
1327
|
+
const name = readTokenMetadataProperty(
|
|
1328
|
+
rawFunction,
|
|
1329
|
+
'name',
|
|
1330
|
+
`${callPath}.function.name`
|
|
1331
|
+
);
|
|
1332
|
+
const args = readTokenMetadataProperty(
|
|
1333
|
+
rawFunction,
|
|
1334
|
+
'arguments',
|
|
1335
|
+
`${callPath}.function.arguments`
|
|
1336
|
+
);
|
|
1337
|
+
projectedFunction = { name, arguments: args };
|
|
1338
|
+
}
|
|
1339
|
+
let projectedCustom = rawCustom;
|
|
1340
|
+
if (rawCustom != null && typeof rawCustom === 'object') {
|
|
1341
|
+
if (hasUnsafeStructuredSerialization(rawCustom)) {
|
|
1342
|
+
throw new UnsafeTokenMeasurementError({
|
|
1343
|
+
reason: 'metadata_accessor',
|
|
1344
|
+
path: `${callPath}.custom`,
|
|
1345
|
+
});
|
|
1346
|
+
}
|
|
1347
|
+
const name = readTokenMetadataProperty(
|
|
1348
|
+
rawCustom,
|
|
1349
|
+
'name',
|
|
1350
|
+
`${callPath}.custom.name`
|
|
1351
|
+
);
|
|
1352
|
+
const input = readTokenMetadataProperty(
|
|
1353
|
+
rawCustom,
|
|
1354
|
+
'input',
|
|
1355
|
+
`${callPath}.custom.input`
|
|
1356
|
+
);
|
|
1357
|
+
projectedCustom = { name, input };
|
|
1358
|
+
}
|
|
1359
|
+
if (typeof callId === 'string' && representedToolCallIds.has(callId)) {
|
|
1360
|
+
continue;
|
|
1361
|
+
}
|
|
1362
|
+
numTokens += getBoundedStructuredTokenCount(
|
|
1363
|
+
{
|
|
1364
|
+
id: callId,
|
|
1365
|
+
type: callType,
|
|
1366
|
+
custom: projectedCustom,
|
|
1367
|
+
function: projectedFunction,
|
|
1368
|
+
},
|
|
1369
|
+
countText
|
|
1370
|
+
);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1190
1373
|
let legacyFunctionCall: PropertyDescriptor | undefined;
|
|
1191
1374
|
try {
|
|
1192
1375
|
legacyFunctionCall =
|