@truefoundry/trueforge-core 0.1.0 → 0.1.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/README.md +27 -0
- package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -1
- package/dist/agent-session/TurnResourceResolver.js +6 -2
- package/dist/agent-session/TurnResourceResolver.js.map +1 -1
- package/dist/agent-session/TurnResourceResolver.mjs +6 -2
- package/dist/agent-session/TurnResourceResolver.mjs.map +1 -1
- package/dist/agent-session/schemas/turn.d.ts.map +1 -1
- package/dist/agent-session/schemas/turn.js +3 -1
- package/dist/agent-session/schemas/turn.js.map +1 -1
- package/dist/agent-session/schemas/turn.mjs +3 -1
- package/dist/agent-session/schemas/turn.mjs.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.js +24 -8
- package/dist/agent-session/store/InMemorySessionStore.js.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.mjs +24 -8
- package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -1
- package/dist/agent-session/store/OffsetPageToken.d.ts.map +1 -1
- package/dist/agent-session/store/OffsetPageToken.js +3 -1
- package/dist/agent-session/store/OffsetPageToken.js.map +1 -1
- package/dist/agent-session/store/OffsetPageToken.mjs +3 -1
- package/dist/agent-session/store/OffsetPageToken.mjs.map +1 -1
- package/dist/agent-session/store/SessionListPageToken.d.ts.map +1 -1
- package/dist/agent-session/store/SessionListPageToken.js +3 -1
- package/dist/agent-session/store/SessionListPageToken.js.map +1 -1
- package/dist/agent-session/store/SessionListPageToken.mjs +3 -1
- package/dist/agent-session/store/SessionListPageToken.mjs.map +1 -1
- package/dist/core/InstructionBuilder.d.ts.map +1 -1
- package/dist/core/InstructionBuilder.js +12 -4
- package/dist/core/InstructionBuilder.js.map +1 -1
- package/dist/core/InstructionBuilder.mjs +12 -4
- package/dist/core/InstructionBuilder.mjs.map +1 -1
- package/dist/core/capabilities/builtins/AskUserQuestion.d.ts.map +1 -1
- package/dist/core/capabilities/builtins/AskUserQuestion.js +5 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.js.map +1 -1
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs +5 -0
- package/dist/core/capabilities/builtins/AskUserQuestion.mjs.map +1 -1
- package/dist/core/capabilities/builtins/LargeToolResponse.d.ts.map +1 -1
- package/dist/core/capabilities/builtins/LargeToolResponse.js +6 -2
- package/dist/core/capabilities/builtins/LargeToolResponse.js.map +1 -1
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs +6 -2
- package/dist/core/capabilities/builtins/LargeToolResponse.mjs.map +1 -1
- package/dist/core/llm/VercelAILLM.d.ts.map +1 -1
- package/dist/core/llm/VercelAILLM.js +6 -2
- package/dist/core/llm/VercelAILLM.js.map +1 -1
- package/dist/core/llm/VercelAILLM.mjs +6 -2
- package/dist/core/llm/VercelAILLM.mjs.map +1 -1
- package/dist/core/mcp/RemoteMCP.d.ts.map +1 -1
- package/dist/core/mcp/RemoteMCP.js +15 -5
- package/dist/core/mcp/RemoteMCP.js.map +1 -1
- package/dist/core/mcp/RemoteMCP.mjs +15 -5
- package/dist/core/mcp/RemoteMCP.mjs.map +1 -1
- package/dist/core/mcp/ToolSelectorPolicy.d.ts.map +1 -1
- package/dist/core/mcp/ToolSelectorPolicy.js +3 -1
- package/dist/core/mcp/ToolSelectorPolicy.js.map +1 -1
- package/dist/core/mcp/ToolSelectorPolicy.mjs +3 -1
- package/dist/core/mcp/ToolSelectorPolicy.mjs.map +1 -1
- package/dist/core/mcp/ToolSet.d.ts.map +1 -1
- package/dist/core/mcp/ToolSet.js +9 -3
- package/dist/core/mcp/ToolSet.js.map +1 -1
- package/dist/core/mcp/ToolSet.mjs +9 -3
- package/dist/core/mcp/ToolSet.mjs.map +1 -1
- package/dist/core/mcp/convertMCPServers.d.ts.map +1 -1
- package/dist/core/mcp/convertMCPServers.js +6 -2
- package/dist/core/mcp/convertMCPServers.js.map +1 -1
- package/dist/core/mcp/convertMCPServers.mjs +6 -2
- package/dist/core/mcp/convertMCPServers.mjs.map +1 -1
- package/dist/core/mcp/remoteMcpClient.d.ts.map +1 -1
- package/dist/core/mcp/remoteMcpClient.js +21 -7
- package/dist/core/mcp/remoteMcpClient.js.map +1 -1
- package/dist/core/mcp/remoteMcpClient.mjs +21 -7
- package/dist/core/mcp/remoteMcpClient.mjs.map +1 -1
- package/dist/core/mcp/toolSelectors.d.ts.map +1 -1
- package/dist/core/mcp/toolSelectors.js +18 -6
- package/dist/core/mcp/toolSelectors.js.map +1 -1
- package/dist/core/mcp/toolSelectors.mjs +18 -6
- package/dist/core/mcp/toolSelectors.mjs.map +1 -1
- package/dist/core/runtime/AgentThread.d.ts.map +1 -1
- package/dist/core/runtime/AgentThread.js +42 -14
- package/dist/core/runtime/AgentThread.js.map +1 -1
- package/dist/core/runtime/AgentThread.mjs +42 -14
- package/dist/core/runtime/AgentThread.mjs.map +1 -1
- package/dist/core/runtime/AgentThreadOrchestrator.d.ts.map +1 -1
- package/dist/core/runtime/AgentThreadOrchestrator.js +27 -9
- package/dist/core/runtime/AgentThreadOrchestrator.js.map +1 -1
- package/dist/core/runtime/AgentThreadOrchestrator.mjs +27 -9
- package/dist/core/runtime/AgentThreadOrchestrator.mjs.map +1 -1
- package/dist/core/runtime/DeferredTool.d.ts.map +1 -1
- package/dist/core/runtime/DeferredTool.js +15 -5
- package/dist/core/runtime/DeferredTool.js.map +1 -1
- package/dist/core/runtime/DeferredTool.mjs +15 -5
- package/dist/core/runtime/DeferredTool.mjs.map +1 -1
- package/dist/core/runtime/contextUtils.d.ts.map +1 -1
- package/dist/core/runtime/contextUtils.js +3 -1
- package/dist/core/runtime/contextUtils.js.map +1 -1
- package/dist/core/runtime/contextUtils.mjs +3 -1
- package/dist/core/runtime/contextUtils.mjs.map +1 -1
- package/dist/core/sandbox/Sandbox.d.ts.map +1 -1
- package/dist/core/sandbox/Sandbox.js +12 -4
- package/dist/core/sandbox/Sandbox.js.map +1 -1
- package/dist/core/sandbox/Sandbox.mjs +12 -4
- package/dist/core/sandbox/Sandbox.mjs.map +1 -1
- package/dist/core/sandbox/codeMode/CodeModeDispatcher.d.ts.map +1 -1
- package/dist/core/sandbox/codeMode/CodeModeDispatcher.js +9 -3
- package/dist/core/sandbox/codeMode/CodeModeDispatcher.js.map +1 -1
- package/dist/core/sandbox/codeMode/CodeModeDispatcher.mjs +9 -3
- package/dist/core/sandbox/codeMode/CodeModeDispatcher.mjs.map +1 -1
- package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.d.ts.map +1 -1
- package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.js +9 -3
- package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.js.map +1 -1
- package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.mjs +9 -3
- package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.mjs.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts +17 -0
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.js +83 -17
- package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.mjs +83 -17
- package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.js +12 -4
- package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +12 -4
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.js +3 -1
- package/dist/core/sandbox/skills/SkillMounter.js.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.mjs +3 -1
- package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -1
- package/dist/core/util/abort.d.ts.map +1 -1
- package/dist/core/util/abort.js +3 -1
- package/dist/core/util/abort.js.map +1 -1
- package/dist/core/util/abort.mjs +3 -1
- package/dist/core/util/abort.mjs.map +1 -1
- package/package.json +10 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LargeToolResponse.d.ts","sourceRoot":"","sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGnG,eAAO,MAAM,uCAAuC,OAAO,CAAC;AAC5D,eAAO,MAAM,kCAAkC,QAAQ,CAAC;AACxD,eAAO,MAAM,oCAAoC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LargeToolResponse.d.ts","sourceRoot":"","sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGnG,eAAO,MAAM,uCAAuC,OAAO,CAAC;AAC5D,eAAO,MAAM,kCAAkC,QAAQ,CAAC;AACxD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAgCxD,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,OAAO,CAAC,uBAAuB,CAAU;IACzC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,KAAK,EAAE;QACjB,uBAAuB,EAAE,OAAO,CAAC;QACjC,wBAAwB,EAAE,MAAM,CAAC;QACjC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,yBAAyB,EAAE,MAAM,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC;KAChB,EAWA;IAED,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,WAAW;YA4BL,iCAAiC;YA2BjC,mBAAmB;IAO3B,OAAO,CACX,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAC/C,OAAO,CAAC,2BAA2B,CAAC,CA8BtC;CACF;AAED,MAAM,WAAW,yBAAyB;IACxC,wBAAwB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,uBAAuB,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,eAAe,CAYlB"}
|
|
@@ -47,11 +47,15 @@ var DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 1e4;
|
|
|
47
47
|
var DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;
|
|
48
48
|
var FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;
|
|
49
49
|
function categorize(result, sandbox) {
|
|
50
|
-
if (result.failure)
|
|
50
|
+
if (result.failure) {
|
|
51
|
+
return "failure";
|
|
52
|
+
}
|
|
51
53
|
if (!result.info) {
|
|
52
54
|
throw new Error(`Unreachable`);
|
|
53
55
|
}
|
|
54
|
-
if (sandbox && result.info.toolSet === sandbox)
|
|
56
|
+
if (sandbox && result.info.toolSet === sandbox) {
|
|
57
|
+
return "sandbox";
|
|
58
|
+
}
|
|
55
59
|
return "mcp";
|
|
56
60
|
}
|
|
57
61
|
function createContentPreview(content, previewChars) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"sourcesContent":["import dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { estimateTokensForString } from '../../llm/usage';\nimport type { ToolCallResult } from '../../mcp/executeToolCalls';\nimport type { Sandbox, SandboxInfo } from '../../sandbox/Sandbox';\nimport { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from '../../sandbox/Sandbox';\nimport { extractErrorLogFields } from '../../util/errorLogFields';\nimport type { AgentCapability } from '../AgentCapability';\nimport type { AgentThreadExecutionContext } from '../AgentContextProcessor';\nimport type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';\nimport { createDynamicSubAgentLargeToolResponseGuidance } from './DynamicSubAgents';\n\nexport const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;\nexport const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;\nexport const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;\nconst FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;\n\ntype ResultCategory = 'failure' | 'sandbox' | 'mcp';\n\ninterface ToolResultWithInfo {\n toolCallResult: ToolCallResult;\n originalContent: string;\n originalTokens: number;\n category: ResultCategory;\n}\n\nfunction categorize(result: ToolCallResult, sandbox: Sandbox | undefined): ResultCategory {\n if (result.failure) return 'failure';\n if (!result.info) {\n throw new Error(`Unreachable`);\n }\n if (sandbox && result.info.toolSet === sandbox) return 'sandbox';\n return 'mcp';\n}\n\nfunction createContentPreview(content: string, previewChars: number): string {\n if (content.length <= previewChars * 2) {\n return content;\n }\n return `${content.slice(0, previewChars)}\\n...\\n${content.slice(-previewChars)}`;\n}\n\nexport class LargeToolResponseProcessor implements ToolResponseProcessor {\n private dynamicSubAgentsPresent: boolean;\n private individualTokenThreshold: number;\n private totalTokenThreshold: number;\n private previewNumberOfCharacters: number;\n private readonly logger: Logger;\n\n constructor(param: {\n dynamicSubAgentsPresent: boolean;\n individualTokenThreshold: number;\n totalTokenThreshold: number;\n previewNumberOfCharacters: number;\n logger: Logger;\n }) {\n if (param.individualTokenThreshold > param.totalTokenThreshold) {\n throw new Error(\n `individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`,\n );\n }\n this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;\n this.individualTokenThreshold = param.individualTokenThreshold;\n this.totalTokenThreshold = param.totalTokenThreshold;\n this.previewNumberOfCharacters = param.previewNumberOfCharacters;\n this.logger = param.logger.child({ module: 'LargeToolResponse' });\n }\n\n private createLargeToolResponseGuidance(sandbox: Sandbox | undefined): string {\n const steps = ['Check if some parameter can be passed in order to reduce the output size.'];\n\n if (sandbox) {\n steps.push(createSandboxLargeToolResponseGuidance());\n }\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(createDynamicSubAgentLargeToolResponseGuidance());\n }\n\n return `Content too big. To handle a large tool call the Agent can do the following:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n }\n\n private createFileDumpMessage(params: { filePath: string; preview: string }): string {\n const { filePath, preview } = params;\n const steps: string[] = [\n dedent`Use sandbox to read parts of the file or extract data.\n Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`,\n ];\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(\n `${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`,\n );\n }\n\n const guidance = `The Agent can do the following to handle it:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n\n return `Content too large. Result saved to: ${filePath}.\\n\\n${guidance}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n }\n\n private buildResultsWithInfo(results: ToolCallResult[], sandbox: Sandbox | undefined): ToolResultWithInfo[] {\n return results.map(toolCallResult => ({\n toolCallResult,\n originalContent: toolCallResult.message.content,\n originalTokens: estimateTokensForString(toolCallResult.message.content),\n category: categorize(toolCallResult, sandbox),\n }));\n }\n\n private blockResult(\n entry: ToolResultWithInfo,\n pendingSandboxDumps: ToolResultWithInfo[],\n sandbox: Sandbox | undefined,\n ): number {\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n\n let newContent: string;\n switch (entry.category) {\n case 'failure':\n newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);\n break;\n case 'sandbox':\n newContent = `Content too big. The Agent should write to a file if required and use grep and sed.\\n\\nPreview:\\n${preview}`;\n break;\n case 'mcp':\n newContent = `${this.createLargeToolResponseGuidance(sandbox)}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n if (sandbox) {\n pendingSandboxDumps.push(entry);\n }\n break;\n }\n\n entry.toolCallResult.message.content = newContent;\n entry.toolCallResult.isStructuredContent = false;\n return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));\n }\n\n private async uploadToSandboxAndPrependFilePath(\n entry: ToolResultWithInfo,\n index: number,\n sandbox: Sandbox,\n ): Promise<SandboxInfo | undefined> {\n if (!entry.toolCallResult.info) {\n throw new Error(`Unreachable`);\n }\n const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);\n const epoch = Date.now();\n const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;\n try {\n const stored = await sandbox.writeArtifact({\n fileName,\n content: Buffer.from(entry.originalContent),\n sourceTool: entry.toolCallResult.info,\n });\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });\n entry.toolCallResult.isStructuredContent = false;\n return stored.sandboxCreated;\n } catch (error) {\n this.logger.error('Failed to upload to sandbox', extractErrorLogFields(error));\n return undefined;\n }\n }\n\n private async executeSandboxDumps(entries: ToolResultWithInfo[], sandbox: Sandbox): Promise<SandboxInfo | undefined> {\n const results = await Promise.all(\n entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox)),\n );\n return results.find(r => r !== undefined);\n }\n\n async process(\n results: ToolCallResult[],\n execution: Readonly<AgentThreadExecutionContext>,\n ): Promise<ToolResponseProcessorResult> {\n const sandbox = execution.sandbox;\n const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);\n let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);\n\n if (runningTotal < this.individualTokenThreshold) {\n return {};\n }\n\n const pendingSandboxDumps: ToolResultWithInfo[] = [];\n\n const unblocked: ToolResultWithInfo[] = [];\n for (const entry of resultsWithInfo) {\n if (entry.originalTokens >= this.individualTokenThreshold) {\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n } else {\n unblocked.push(entry);\n }\n }\n\n const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);\n for (const entry of sortedUnblocked) {\n if (runningTotal < this.totalTokenThreshold) {\n break;\n }\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n }\n\n const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : undefined;\n return sandboxCreated !== undefined ? { sandboxCreated } : {};\n }\n}\n\nexport interface LargeToolResponseSettings {\n individualTokenThreshold?: number | undefined;\n totalTokenThreshold?: number | undefined;\n previewNumberOfCharacters?: number | undefined;\n}\n\nexport function largeToolResponse(options: {\n dynamicSubAgentsPresent: boolean;\n settings?: LargeToolResponseSettings | undefined;\n logger: Logger;\n}): AgentCapability {\n return {\n toolResponseProcessors: [\n new LargeToolResponseProcessor({\n dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,\n individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n logger: options.logger,\n }),\n ],\n };\n}\n"],"mappings":"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","names":["dedent"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"sourcesContent":["import dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { estimateTokensForString } from '../../llm/usage';\nimport type { ToolCallResult } from '../../mcp/executeToolCalls';\nimport type { Sandbox, SandboxInfo } from '../../sandbox/Sandbox';\nimport { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from '../../sandbox/Sandbox';\nimport { extractErrorLogFields } from '../../util/errorLogFields';\nimport type { AgentCapability } from '../AgentCapability';\nimport type { AgentThreadExecutionContext } from '../AgentContextProcessor';\nimport type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';\nimport { createDynamicSubAgentLargeToolResponseGuidance } from './DynamicSubAgents';\n\nexport const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;\nexport const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;\nexport const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;\nconst FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;\n\ntype ResultCategory = 'failure' | 'sandbox' | 'mcp';\n\ninterface ToolResultWithInfo {\n toolCallResult: ToolCallResult;\n originalContent: string;\n originalTokens: number;\n category: ResultCategory;\n}\n\nfunction categorize(result: ToolCallResult, sandbox: Sandbox | undefined): ResultCategory {\n if (result.failure) {\n return 'failure';\n }\n if (!result.info) {\n throw new Error(`Unreachable`);\n }\n if (sandbox && result.info.toolSet === sandbox) {\n return 'sandbox';\n }\n return 'mcp';\n}\n\nfunction createContentPreview(content: string, previewChars: number): string {\n if (content.length <= previewChars * 2) {\n return content;\n }\n return `${content.slice(0, previewChars)}\\n...\\n${content.slice(-previewChars)}`;\n}\n\nexport class LargeToolResponseProcessor implements ToolResponseProcessor {\n private dynamicSubAgentsPresent: boolean;\n private individualTokenThreshold: number;\n private totalTokenThreshold: number;\n private previewNumberOfCharacters: number;\n private readonly logger: Logger;\n\n constructor(param: {\n dynamicSubAgentsPresent: boolean;\n individualTokenThreshold: number;\n totalTokenThreshold: number;\n previewNumberOfCharacters: number;\n logger: Logger;\n }) {\n if (param.individualTokenThreshold > param.totalTokenThreshold) {\n throw new Error(\n `individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`,\n );\n }\n this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;\n this.individualTokenThreshold = param.individualTokenThreshold;\n this.totalTokenThreshold = param.totalTokenThreshold;\n this.previewNumberOfCharacters = param.previewNumberOfCharacters;\n this.logger = param.logger.child({ module: 'LargeToolResponse' });\n }\n\n private createLargeToolResponseGuidance(sandbox: Sandbox | undefined): string {\n const steps = ['Check if some parameter can be passed in order to reduce the output size.'];\n\n if (sandbox) {\n steps.push(createSandboxLargeToolResponseGuidance());\n }\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(createDynamicSubAgentLargeToolResponseGuidance());\n }\n\n return `Content too big. To handle a large tool call the Agent can do the following:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n }\n\n private createFileDumpMessage(params: { filePath: string; preview: string }): string {\n const { filePath, preview } = params;\n const steps: string[] = [\n dedent`Use sandbox to read parts of the file or extract data.\n Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`,\n ];\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(\n `${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`,\n );\n }\n\n const guidance = `The Agent can do the following to handle it:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n\n return `Content too large. Result saved to: ${filePath}.\\n\\n${guidance}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n }\n\n private buildResultsWithInfo(results: ToolCallResult[], sandbox: Sandbox | undefined): ToolResultWithInfo[] {\n return results.map(toolCallResult => ({\n toolCallResult,\n originalContent: toolCallResult.message.content,\n originalTokens: estimateTokensForString(toolCallResult.message.content),\n category: categorize(toolCallResult, sandbox),\n }));\n }\n\n private blockResult(\n entry: ToolResultWithInfo,\n pendingSandboxDumps: ToolResultWithInfo[],\n sandbox: Sandbox | undefined,\n ): number {\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n\n let newContent: string;\n switch (entry.category) {\n case 'failure':\n newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);\n break;\n case 'sandbox':\n newContent = `Content too big. The Agent should write to a file if required and use grep and sed.\\n\\nPreview:\\n${preview}`;\n break;\n case 'mcp':\n newContent = `${this.createLargeToolResponseGuidance(sandbox)}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n if (sandbox) {\n pendingSandboxDumps.push(entry);\n }\n break;\n }\n\n entry.toolCallResult.message.content = newContent;\n entry.toolCallResult.isStructuredContent = false;\n return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));\n }\n\n private async uploadToSandboxAndPrependFilePath(\n entry: ToolResultWithInfo,\n index: number,\n sandbox: Sandbox,\n ): Promise<SandboxInfo | undefined> {\n if (!entry.toolCallResult.info) {\n throw new Error(`Unreachable`);\n }\n const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);\n const epoch = Date.now();\n const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;\n try {\n const stored = await sandbox.writeArtifact({\n fileName,\n content: Buffer.from(entry.originalContent),\n sourceTool: entry.toolCallResult.info,\n });\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });\n entry.toolCallResult.isStructuredContent = false;\n return stored.sandboxCreated;\n } catch (error) {\n this.logger.error('Failed to upload to sandbox', extractErrorLogFields(error));\n return undefined;\n }\n }\n\n private async executeSandboxDumps(entries: ToolResultWithInfo[], sandbox: Sandbox): Promise<SandboxInfo | undefined> {\n const results = await Promise.all(\n entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox)),\n );\n return results.find(r => r !== undefined);\n }\n\n async process(\n results: ToolCallResult[],\n execution: Readonly<AgentThreadExecutionContext>,\n ): Promise<ToolResponseProcessorResult> {\n const sandbox = execution.sandbox;\n const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);\n let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);\n\n if (runningTotal < this.individualTokenThreshold) {\n return {};\n }\n\n const pendingSandboxDumps: ToolResultWithInfo[] = [];\n\n const unblocked: ToolResultWithInfo[] = [];\n for (const entry of resultsWithInfo) {\n if (entry.originalTokens >= this.individualTokenThreshold) {\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n } else {\n unblocked.push(entry);\n }\n }\n\n const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);\n for (const entry of sortedUnblocked) {\n if (runningTotal < this.totalTokenThreshold) {\n break;\n }\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n }\n\n const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : undefined;\n return sandboxCreated !== undefined ? { sandboxCreated } : {};\n }\n}\n\nexport interface LargeToolResponseSettings {\n individualTokenThreshold?: number | undefined;\n totalTokenThreshold?: number | undefined;\n previewNumberOfCharacters?: number | undefined;\n}\n\nexport function largeToolResponse(options: {\n dynamicSubAgentsPresent: boolean;\n settings?: LargeToolResponseSettings | undefined;\n logger: Logger;\n}): AgentCapability {\n return {\n toolResponseProcessors: [\n new LargeToolResponseProcessor({\n dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,\n individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n logger: options.logger,\n }),\n ],\n };\n}\n"],"mappings":"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","names":["dedent"]}
|
|
@@ -9,11 +9,15 @@ var DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 1e4;
|
|
|
9
9
|
var DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;
|
|
10
10
|
var FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;
|
|
11
11
|
function categorize(result, sandbox) {
|
|
12
|
-
if (result.failure)
|
|
12
|
+
if (result.failure) {
|
|
13
|
+
return "failure";
|
|
14
|
+
}
|
|
13
15
|
if (!result.info) {
|
|
14
16
|
throw new Error(`Unreachable`);
|
|
15
17
|
}
|
|
16
|
-
if (sandbox && result.info.toolSet === sandbox)
|
|
18
|
+
if (sandbox && result.info.toolSet === sandbox) {
|
|
19
|
+
return "sandbox";
|
|
20
|
+
}
|
|
17
21
|
return "mcp";
|
|
18
22
|
}
|
|
19
23
|
function createContentPreview(content, previewChars) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"sourcesContent":["import dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { estimateTokensForString } from '../../llm/usage';\nimport type { ToolCallResult } from '../../mcp/executeToolCalls';\nimport type { Sandbox, SandboxInfo } from '../../sandbox/Sandbox';\nimport { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from '../../sandbox/Sandbox';\nimport { extractErrorLogFields } from '../../util/errorLogFields';\nimport type { AgentCapability } from '../AgentCapability';\nimport type { AgentThreadExecutionContext } from '../AgentContextProcessor';\nimport type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';\nimport { createDynamicSubAgentLargeToolResponseGuidance } from './DynamicSubAgents';\n\nexport const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;\nexport const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;\nexport const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;\nconst FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;\n\ntype ResultCategory = 'failure' | 'sandbox' | 'mcp';\n\ninterface ToolResultWithInfo {\n toolCallResult: ToolCallResult;\n originalContent: string;\n originalTokens: number;\n category: ResultCategory;\n}\n\nfunction categorize(result: ToolCallResult, sandbox: Sandbox | undefined): ResultCategory {\n if (result.failure) return 'failure';\n if (!result.info) {\n throw new Error(`Unreachable`);\n }\n if (sandbox && result.info.toolSet === sandbox) return 'sandbox';\n return 'mcp';\n}\n\nfunction createContentPreview(content: string, previewChars: number): string {\n if (content.length <= previewChars * 2) {\n return content;\n }\n return `${content.slice(0, previewChars)}\\n...\\n${content.slice(-previewChars)}`;\n}\n\nexport class LargeToolResponseProcessor implements ToolResponseProcessor {\n private dynamicSubAgentsPresent: boolean;\n private individualTokenThreshold: number;\n private totalTokenThreshold: number;\n private previewNumberOfCharacters: number;\n private readonly logger: Logger;\n\n constructor(param: {\n dynamicSubAgentsPresent: boolean;\n individualTokenThreshold: number;\n totalTokenThreshold: number;\n previewNumberOfCharacters: number;\n logger: Logger;\n }) {\n if (param.individualTokenThreshold > param.totalTokenThreshold) {\n throw new Error(\n `individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`,\n );\n }\n this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;\n this.individualTokenThreshold = param.individualTokenThreshold;\n this.totalTokenThreshold = param.totalTokenThreshold;\n this.previewNumberOfCharacters = param.previewNumberOfCharacters;\n this.logger = param.logger.child({ module: 'LargeToolResponse' });\n }\n\n private createLargeToolResponseGuidance(sandbox: Sandbox | undefined): string {\n const steps = ['Check if some parameter can be passed in order to reduce the output size.'];\n\n if (sandbox) {\n steps.push(createSandboxLargeToolResponseGuidance());\n }\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(createDynamicSubAgentLargeToolResponseGuidance());\n }\n\n return `Content too big. To handle a large tool call the Agent can do the following:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n }\n\n private createFileDumpMessage(params: { filePath: string; preview: string }): string {\n const { filePath, preview } = params;\n const steps: string[] = [\n dedent`Use sandbox to read parts of the file or extract data.\n Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`,\n ];\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(\n `${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`,\n );\n }\n\n const guidance = `The Agent can do the following to handle it:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n\n return `Content too large. Result saved to: ${filePath}.\\n\\n${guidance}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n }\n\n private buildResultsWithInfo(results: ToolCallResult[], sandbox: Sandbox | undefined): ToolResultWithInfo[] {\n return results.map(toolCallResult => ({\n toolCallResult,\n originalContent: toolCallResult.message.content,\n originalTokens: estimateTokensForString(toolCallResult.message.content),\n category: categorize(toolCallResult, sandbox),\n }));\n }\n\n private blockResult(\n entry: ToolResultWithInfo,\n pendingSandboxDumps: ToolResultWithInfo[],\n sandbox: Sandbox | undefined,\n ): number {\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n\n let newContent: string;\n switch (entry.category) {\n case 'failure':\n newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);\n break;\n case 'sandbox':\n newContent = `Content too big. The Agent should write to a file if required and use grep and sed.\\n\\nPreview:\\n${preview}`;\n break;\n case 'mcp':\n newContent = `${this.createLargeToolResponseGuidance(sandbox)}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n if (sandbox) {\n pendingSandboxDumps.push(entry);\n }\n break;\n }\n\n entry.toolCallResult.message.content = newContent;\n entry.toolCallResult.isStructuredContent = false;\n return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));\n }\n\n private async uploadToSandboxAndPrependFilePath(\n entry: ToolResultWithInfo,\n index: number,\n sandbox: Sandbox,\n ): Promise<SandboxInfo | undefined> {\n if (!entry.toolCallResult.info) {\n throw new Error(`Unreachable`);\n }\n const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);\n const epoch = Date.now();\n const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;\n try {\n const stored = await sandbox.writeArtifact({\n fileName,\n content: Buffer.from(entry.originalContent),\n sourceTool: entry.toolCallResult.info,\n });\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });\n entry.toolCallResult.isStructuredContent = false;\n return stored.sandboxCreated;\n } catch (error) {\n this.logger.error('Failed to upload to sandbox', extractErrorLogFields(error));\n return undefined;\n }\n }\n\n private async executeSandboxDumps(entries: ToolResultWithInfo[], sandbox: Sandbox): Promise<SandboxInfo | undefined> {\n const results = await Promise.all(\n entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox)),\n );\n return results.find(r => r !== undefined);\n }\n\n async process(\n results: ToolCallResult[],\n execution: Readonly<AgentThreadExecutionContext>,\n ): Promise<ToolResponseProcessorResult> {\n const sandbox = execution.sandbox;\n const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);\n let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);\n\n if (runningTotal < this.individualTokenThreshold) {\n return {};\n }\n\n const pendingSandboxDumps: ToolResultWithInfo[] = [];\n\n const unblocked: ToolResultWithInfo[] = [];\n for (const entry of resultsWithInfo) {\n if (entry.originalTokens >= this.individualTokenThreshold) {\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n } else {\n unblocked.push(entry);\n }\n }\n\n const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);\n for (const entry of sortedUnblocked) {\n if (runningTotal < this.totalTokenThreshold) {\n break;\n }\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n }\n\n const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : undefined;\n return sandboxCreated !== undefined ? { sandboxCreated } : {};\n }\n}\n\nexport interface LargeToolResponseSettings {\n individualTokenThreshold?: number | undefined;\n totalTokenThreshold?: number | undefined;\n previewNumberOfCharacters?: number | undefined;\n}\n\nexport function largeToolResponse(options: {\n dynamicSubAgentsPresent: boolean;\n settings?: LargeToolResponseSettings | undefined;\n logger: Logger;\n}): AgentCapability {\n return {\n toolResponseProcessors: [\n new LargeToolResponseProcessor({\n dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,\n individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n logger: options.logger,\n }),\n ],\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/capabilities/builtins/LargeToolResponse.ts"],"sourcesContent":["import dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { estimateTokensForString } from '../../llm/usage';\nimport type { ToolCallResult } from '../../mcp/executeToolCalls';\nimport type { Sandbox, SandboxInfo } from '../../sandbox/Sandbox';\nimport { createSandboxLargeToolResponseGuidance, SANDBOX_SCHEMA_INFER_TAG } from '../../sandbox/Sandbox';\nimport { extractErrorLogFields } from '../../util/errorLogFields';\nimport type { AgentCapability } from '../AgentCapability';\nimport type { AgentThreadExecutionContext } from '../AgentContextProcessor';\nimport type { ToolResponseProcessor, ToolResponseProcessorResult } from '../ToolResponseProcessor';\nimport { createDynamicSubAgentLargeToolResponseGuidance } from './DynamicSubAgents';\n\nexport const DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD = 6000;\nexport const DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD = 10000;\nexport const DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS = 100;\nconst FAILURE_MESSAGE_TRUNCATION_LENGTH = 500;\n\ntype ResultCategory = 'failure' | 'sandbox' | 'mcp';\n\ninterface ToolResultWithInfo {\n toolCallResult: ToolCallResult;\n originalContent: string;\n originalTokens: number;\n category: ResultCategory;\n}\n\nfunction categorize(result: ToolCallResult, sandbox: Sandbox | undefined): ResultCategory {\n if (result.failure) {\n return 'failure';\n }\n if (!result.info) {\n throw new Error(`Unreachable`);\n }\n if (sandbox && result.info.toolSet === sandbox) {\n return 'sandbox';\n }\n return 'mcp';\n}\n\nfunction createContentPreview(content: string, previewChars: number): string {\n if (content.length <= previewChars * 2) {\n return content;\n }\n return `${content.slice(0, previewChars)}\\n...\\n${content.slice(-previewChars)}`;\n}\n\nexport class LargeToolResponseProcessor implements ToolResponseProcessor {\n private dynamicSubAgentsPresent: boolean;\n private individualTokenThreshold: number;\n private totalTokenThreshold: number;\n private previewNumberOfCharacters: number;\n private readonly logger: Logger;\n\n constructor(param: {\n dynamicSubAgentsPresent: boolean;\n individualTokenThreshold: number;\n totalTokenThreshold: number;\n previewNumberOfCharacters: number;\n logger: Logger;\n }) {\n if (param.individualTokenThreshold > param.totalTokenThreshold) {\n throw new Error(\n `individualTokenThreshold (${String(param.individualTokenThreshold)}) must be <= totalTokenThreshold (${String(param.totalTokenThreshold)})`,\n );\n }\n this.dynamicSubAgentsPresent = param.dynamicSubAgentsPresent;\n this.individualTokenThreshold = param.individualTokenThreshold;\n this.totalTokenThreshold = param.totalTokenThreshold;\n this.previewNumberOfCharacters = param.previewNumberOfCharacters;\n this.logger = param.logger.child({ module: 'LargeToolResponse' });\n }\n\n private createLargeToolResponseGuidance(sandbox: Sandbox | undefined): string {\n const steps = ['Check if some parameter can be passed in order to reduce the output size.'];\n\n if (sandbox) {\n steps.push(createSandboxLargeToolResponseGuidance());\n }\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(createDynamicSubAgentLargeToolResponseGuidance());\n }\n\n return `Content too big. To handle a large tool call the Agent can do the following:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n }\n\n private createFileDumpMessage(params: { filePath: string; preview: string }): string {\n const { filePath, preview } = params;\n const steps: string[] = [\n dedent`Use sandbox to read parts of the file or extract data.\n Use ${SANDBOX_SCHEMA_INFER_TAG} to undertand the schema.`,\n ];\n\n if (this.dynamicSubAgentsPresent) {\n steps.push(\n `${createDynamicSubAgentLargeToolResponseGuidance()} The Agent must pass file path to sub-agent also.`,\n );\n }\n\n const guidance = `The Agent can do the following to handle it:\\n${steps\n .map((step, index) => `${String(index + 1)}. ${step}`)\n .join('\\n')}`;\n\n return `Content too large. Result saved to: ${filePath}.\\n\\n${guidance}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n }\n\n private buildResultsWithInfo(results: ToolCallResult[], sandbox: Sandbox | undefined): ToolResultWithInfo[] {\n return results.map(toolCallResult => ({\n toolCallResult,\n originalContent: toolCallResult.message.content,\n originalTokens: estimateTokensForString(toolCallResult.message.content),\n category: categorize(toolCallResult, sandbox),\n }));\n }\n\n private blockResult(\n entry: ToolResultWithInfo,\n pendingSandboxDumps: ToolResultWithInfo[],\n sandbox: Sandbox | undefined,\n ): number {\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n\n let newContent: string;\n switch (entry.category) {\n case 'failure':\n newContent = entry.originalContent.slice(0, FAILURE_MESSAGE_TRUNCATION_LENGTH);\n break;\n case 'sandbox':\n newContent = `Content too big. The Agent should write to a file if required and use grep and sed.\\n\\nPreview:\\n${preview}`;\n break;\n case 'mcp':\n newContent = `${this.createLargeToolResponseGuidance(sandbox)}\\n\\nPreview (first and last ${String(this.previewNumberOfCharacters)} chars):\\n${preview}`;\n if (sandbox) {\n pendingSandboxDumps.push(entry);\n }\n break;\n }\n\n entry.toolCallResult.message.content = newContent;\n entry.toolCallResult.isStructuredContent = false;\n return Math.max(0, entry.originalTokens - estimateTokensForString(newContent));\n }\n\n private async uploadToSandboxAndPrependFilePath(\n entry: ToolResultWithInfo,\n index: number,\n sandbox: Sandbox,\n ): Promise<SandboxInfo | undefined> {\n if (!entry.toolCallResult.info) {\n throw new Error(`Unreachable`);\n }\n const sanitizedName = entry.toolCallResult.info.originalToolName.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);\n const epoch = Date.now();\n const fileName = `${sanitizedName}_${String(index)}_${String(epoch)}.txt`;\n try {\n const stored = await sandbox.writeArtifact({\n fileName,\n content: Buffer.from(entry.originalContent),\n sourceTool: entry.toolCallResult.info,\n });\n const preview = createContentPreview(entry.originalContent, this.previewNumberOfCharacters);\n entry.toolCallResult.message.content = this.createFileDumpMessage({ filePath: stored.filePath, preview });\n entry.toolCallResult.isStructuredContent = false;\n return stored.sandboxCreated;\n } catch (error) {\n this.logger.error('Failed to upload to sandbox', extractErrorLogFields(error));\n return undefined;\n }\n }\n\n private async executeSandboxDumps(entries: ToolResultWithInfo[], sandbox: Sandbox): Promise<SandboxInfo | undefined> {\n const results = await Promise.all(\n entries.map((entry, index) => this.uploadToSandboxAndPrependFilePath(entry, index, sandbox)),\n );\n return results.find(r => r !== undefined);\n }\n\n async process(\n results: ToolCallResult[],\n execution: Readonly<AgentThreadExecutionContext>,\n ): Promise<ToolResponseProcessorResult> {\n const sandbox = execution.sandbox;\n const resultsWithInfo = this.buildResultsWithInfo(results, sandbox);\n let runningTotal = resultsWithInfo.reduce((sum, e) => sum + e.originalTokens, 0);\n\n if (runningTotal < this.individualTokenThreshold) {\n return {};\n }\n\n const pendingSandboxDumps: ToolResultWithInfo[] = [];\n\n const unblocked: ToolResultWithInfo[] = [];\n for (const entry of resultsWithInfo) {\n if (entry.originalTokens >= this.individualTokenThreshold) {\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n } else {\n unblocked.push(entry);\n }\n }\n\n const sortedUnblocked = [...unblocked].sort((a, b) => b.originalTokens - a.originalTokens);\n for (const entry of sortedUnblocked) {\n if (runningTotal < this.totalTokenThreshold) {\n break;\n }\n runningTotal -= this.blockResult(entry, pendingSandboxDumps, sandbox);\n }\n\n const sandboxCreated = sandbox ? await this.executeSandboxDumps(pendingSandboxDumps, sandbox) : undefined;\n return sandboxCreated !== undefined ? { sandboxCreated } : {};\n }\n}\n\nexport interface LargeToolResponseSettings {\n individualTokenThreshold?: number | undefined;\n totalTokenThreshold?: number | undefined;\n previewNumberOfCharacters?: number | undefined;\n}\n\nexport function largeToolResponse(options: {\n dynamicSubAgentsPresent: boolean;\n settings?: LargeToolResponseSettings | undefined;\n logger: Logger;\n}): AgentCapability {\n return {\n toolResponseProcessors: [\n new LargeToolResponseProcessor({\n dynamicSubAgentsPresent: options.dynamicSubAgentsPresent,\n individualTokenThreshold: options.settings?.individualTokenThreshold ?? DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n totalTokenThreshold: options.settings?.totalTokenThreshold ?? DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n previewNumberOfCharacters: options.settings?.previewNumberOfCharacters ?? DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n logger: options.logger,\n }),\n ],\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VercelAILLM.d.ts","sourceRoot":"","sources":["../../../src/core/llm/VercelAILLM.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"VercelAILLM.d.ts","sourceRoot":"","sources":["../../../src/core/llm/VercelAILLM.ts"],"names":[],"mappings":"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"}
|
|
@@ -371,7 +371,9 @@ function parseMimeFromDataUri(uri) {
|
|
|
371
371
|
}
|
|
372
372
|
function toFilePart(file) {
|
|
373
373
|
const { file_data, filename } = file;
|
|
374
|
-
if (!file_data)
|
|
374
|
+
if (!file_data) {
|
|
375
|
+
return void 0;
|
|
376
|
+
}
|
|
375
377
|
const mediaType = parseMimeFromDataUri(file_data) ?? "application/octet-stream";
|
|
376
378
|
return {
|
|
377
379
|
type: "file",
|
|
@@ -636,7 +638,9 @@ function describeStreamError(raw) {
|
|
|
636
638
|
return (0, import_errorLogFields.describeUnknownError)(raw);
|
|
637
639
|
}
|
|
638
640
|
function toStreamError(raw) {
|
|
639
|
-
if (raw instanceof Error)
|
|
641
|
+
if (raw instanceof Error) {
|
|
642
|
+
return raw;
|
|
643
|
+
}
|
|
640
644
|
return new Error(describeStreamError(raw), { cause: raw });
|
|
641
645
|
}
|
|
642
646
|
function mapFinishReason(reason) {
|