@librechat/agents 2.4.321 → 3.0.0-rc1
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 +218 -0
- package/dist/cjs/agents/AgentContext.cjs.map +1 -0
- package/dist/cjs/common/enum.cjs +14 -5
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +10 -6
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +309 -212
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +322 -0
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/index.cjs +54 -9
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +52 -6
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +22 -2
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
- package/dist/cjs/llm/google/index.cjs +144 -0
- package/dist/cjs/llm/google/index.cjs.map +1 -0
- package/dist/cjs/llm/google/utils/common.cjs +477 -0
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
- package/dist/cjs/llm/ollama/index.cjs +67 -0
- package/dist/cjs/llm/ollama/index.cjs.map +1 -0
- package/dist/cjs/llm/ollama/utils.cjs +158 -0
- package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +389 -3
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +672 -0
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +15 -15
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs +14 -3
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +330 -0
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
- package/dist/cjs/main.cjs +11 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/run.cjs +120 -81
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +85 -51
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +10 -4
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +119 -13
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +40 -0
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
- package/dist/cjs/tools/search/firecrawl.cjs +61 -13
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +9 -3
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +35 -50
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +70 -0
- package/dist/cjs/tools/search/schema.cjs.map +1 -0
- package/dist/cjs/tools/search/search.cjs +145 -38
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +165 -48
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +34 -5
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +31 -0
- package/dist/cjs/utils/events.cjs.map +1 -0
- package/dist/cjs/utils/title.cjs +57 -21
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +54 -7
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +216 -0
- package/dist/esm/agents/AgentContext.mjs.map +1 -0
- package/dist/esm/common/enum.mjs +15 -6
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +10 -6
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +311 -214
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +320 -0
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
- package/dist/esm/llm/anthropic/index.mjs +54 -9
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +52 -6
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +22 -2
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
- package/dist/esm/llm/google/index.mjs +142 -0
- package/dist/esm/llm/google/index.mjs.map +1 -0
- package/dist/esm/llm/google/utils/common.mjs +471 -0
- package/dist/esm/llm/google/utils/common.mjs.map +1 -0
- package/dist/esm/llm/ollama/index.mjs +65 -0
- package/dist/esm/llm/ollama/index.mjs.map +1 -0
- package/dist/esm/llm/ollama/utils.mjs +155 -0
- package/dist/esm/llm/ollama/utils.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +388 -4
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +666 -0
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +5 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs +14 -3
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +328 -0
- package/dist/esm/llm/vertexai/index.mjs.map +1 -0
- package/dist/esm/main.mjs +6 -5
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/run.mjs +121 -83
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +87 -54
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +10 -4
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +119 -15
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +37 -0
- package/dist/esm/tools/search/anthropic.mjs.map +1 -0
- package/dist/esm/tools/search/firecrawl.mjs +61 -13
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +10 -4
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +35 -50
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +61 -0
- package/dist/esm/tools/search/schema.mjs.map +1 -0
- package/dist/esm/tools/search/search.mjs +146 -39
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +164 -47
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +33 -6
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +29 -0
- package/dist/esm/utils/events.mjs.map +1 -0
- package/dist/esm/utils/title.mjs +57 -22
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +54 -8
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +91 -0
- package/dist/types/common/enum.d.ts +15 -6
- package/dist/types/events.d.ts +5 -4
- package/dist/types/graphs/Graph.d.ts +64 -67
- package/dist/types/graphs/MultiAgentGraph.d.ts +37 -0
- package/dist/types/graphs/index.d.ts +1 -0
- package/dist/types/llm/anthropic/index.d.ts +11 -0
- package/dist/types/llm/anthropic/types.d.ts +9 -3
- package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
- package/dist/types/llm/anthropic/utils/output_parsers.d.ts +4 -4
- package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
- package/dist/types/llm/google/index.d.ts +13 -0
- package/dist/types/llm/google/types.d.ts +32 -0
- package/dist/types/llm/google/utils/common.d.ts +19 -0
- package/dist/types/llm/google/utils/tools.d.ts +10 -0
- package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
- package/dist/types/llm/ollama/index.d.ts +7 -0
- package/dist/types/llm/ollama/utils.d.ts +7 -0
- package/dist/types/llm/openai/index.d.ts +72 -3
- package/dist/types/llm/openai/types.d.ts +10 -0
- package/dist/types/llm/openai/utils/index.d.ts +20 -0
- package/dist/types/llm/text.d.ts +1 -1
- package/dist/types/llm/vertexai/index.d.ts +293 -0
- package/dist/types/messages/reducer.d.ts +9 -0
- package/dist/types/run.d.ts +19 -12
- package/dist/types/scripts/ant_web_search.d.ts +1 -0
- package/dist/types/scripts/args.d.ts +2 -1
- package/dist/types/scripts/handoff-test.d.ts +1 -0
- package/dist/types/scripts/multi-agent-conditional.d.ts +1 -0
- package/dist/types/scripts/multi-agent-parallel.d.ts +1 -0
- package/dist/types/scripts/multi-agent-sequence.d.ts +1 -0
- package/dist/types/scripts/multi-agent-test.d.ts +1 -0
- package/dist/types/stream.d.ts +10 -3
- package/dist/types/tools/CodeExecutor.d.ts +2 -2
- package/dist/types/tools/ToolNode.d.ts +1 -1
- package/dist/types/tools/handlers.d.ts +17 -4
- package/dist/types/tools/search/anthropic.d.ts +16 -0
- package/dist/types/tools/search/firecrawl.d.ts +16 -0
- package/dist/types/tools/search/rerankers.d.ts +8 -5
- package/dist/types/tools/search/schema.d.ts +16 -0
- package/dist/types/tools/search/tool.d.ts +13 -0
- package/dist/types/tools/search/types.d.ts +64 -9
- package/dist/types/tools/search/utils.d.ts +9 -2
- package/dist/types/types/graph.d.ts +95 -15
- package/dist/types/types/llm.d.ts +24 -10
- package/dist/types/types/run.d.ts +46 -8
- package/dist/types/types/stream.d.ts +16 -2
- package/dist/types/types/tools.d.ts +1 -1
- package/dist/types/utils/events.d.ts +6 -0
- package/dist/types/utils/title.d.ts +2 -1
- package/dist/types/utils/tokens.d.ts +24 -0
- package/package.json +35 -18
- package/src/agents/AgentContext.ts +315 -0
- package/src/common/enum.ts +14 -5
- package/src/events.ts +24 -13
- package/src/graphs/Graph.ts +495 -312
- package/src/graphs/MultiAgentGraph.ts +381 -0
- package/src/graphs/index.ts +2 -1
- package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
- package/src/llm/anthropic/index.ts +78 -13
- package/src/llm/anthropic/llm.spec.ts +491 -115
- package/src/llm/anthropic/types.ts +39 -3
- package/src/llm/anthropic/utils/message_inputs.ts +67 -11
- package/src/llm/anthropic/utils/message_outputs.ts +21 -2
- package/src/llm/anthropic/utils/output_parsers.ts +25 -6
- package/src/llm/anthropic/utils/tools.ts +29 -0
- package/src/llm/google/index.ts +218 -0
- package/src/llm/google/types.ts +43 -0
- package/src/llm/google/utils/common.ts +646 -0
- package/src/llm/google/utils/tools.ts +160 -0
- package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
- package/src/llm/ollama/index.ts +89 -0
- package/src/llm/ollama/utils.ts +193 -0
- package/src/llm/openai/index.ts +600 -14
- package/src/llm/openai/types.ts +24 -0
- package/src/llm/openai/utils/index.ts +912 -0
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
- package/src/llm/providers.ts +10 -9
- package/src/llm/text.ts +26 -7
- package/src/llm/vertexai/index.ts +360 -0
- package/src/messages/reducer.ts +80 -0
- package/src/run.ts +181 -112
- package/src/scripts/ant_web_search.ts +158 -0
- package/src/scripts/args.ts +12 -8
- package/src/scripts/cli4.ts +29 -21
- package/src/scripts/cli5.ts +29 -21
- package/src/scripts/code_exec.ts +54 -23
- package/src/scripts/code_exec_files.ts +48 -17
- package/src/scripts/code_exec_simple.ts +46 -27
- package/src/scripts/handoff-test.ts +135 -0
- package/src/scripts/image.ts +52 -20
- package/src/scripts/multi-agent-conditional.ts +220 -0
- package/src/scripts/multi-agent-example-output.md +110 -0
- package/src/scripts/multi-agent-parallel.ts +337 -0
- package/src/scripts/multi-agent-sequence.ts +212 -0
- package/src/scripts/multi-agent-test.ts +186 -0
- package/src/scripts/search.ts +4 -12
- package/src/scripts/simple.ts +25 -10
- package/src/scripts/tools.ts +48 -18
- package/src/specs/anthropic.simple.test.ts +150 -34
- package/src/specs/azure.simple.test.ts +325 -0
- package/src/specs/openai.simple.test.ts +140 -33
- package/src/specs/openrouter.simple.test.ts +107 -0
- package/src/specs/prune.test.ts +4 -9
- package/src/specs/reasoning.test.ts +80 -44
- package/src/specs/token-memoization.test.ts +39 -0
- package/src/stream.test.ts +94 -0
- package/src/stream.ts +139 -60
- package/src/tools/ToolNode.ts +21 -7
- package/src/tools/handlers.ts +192 -18
- package/src/tools/search/anthropic.ts +51 -0
- package/src/tools/search/firecrawl.ts +78 -24
- package/src/tools/search/format.ts +10 -5
- package/src/tools/search/rerankers.ts +50 -62
- package/src/tools/search/schema.ts +63 -0
- package/src/tools/search/search.ts +167 -34
- package/src/tools/search/tool.ts +222 -46
- package/src/tools/search/types.ts +65 -10
- package/src/tools/search/utils.ts +37 -5
- package/src/types/graph.ts +272 -103
- package/src/types/llm.ts +25 -12
- package/src/types/run.ts +51 -13
- package/src/types/stream.ts +22 -1
- package/src/types/tools.ts +16 -10
- package/src/utils/events.ts +32 -0
- package/src/utils/llmConfig.ts +20 -8
- package/src/utils/title.ts +104 -30
- package/src/utils/tokens.ts +69 -10
|
@@ -48,15 +48,61 @@ function getTokenCountForMessage(message, getTokenCount) {
|
|
|
48
48
|
processValue(message.content);
|
|
49
49
|
return numTokens;
|
|
50
50
|
}
|
|
51
|
+
let encoderPromise;
|
|
52
|
+
let tokenCounterPromise;
|
|
53
|
+
async function getSharedEncoder() {
|
|
54
|
+
if (encoderPromise) {
|
|
55
|
+
return encoderPromise;
|
|
56
|
+
}
|
|
57
|
+
encoderPromise = (async () => {
|
|
58
|
+
const res = await fetch('https://tiktoken.pages.dev/js/o200k_base.json');
|
|
59
|
+
const o200k_base = await res.json();
|
|
60
|
+
return new Tiktoken(o200k_base);
|
|
61
|
+
})();
|
|
62
|
+
return encoderPromise;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates a singleton token counter function that reuses the same encoder instance.
|
|
66
|
+
* This avoids creating multiple function closures and prevents potential memory issues.
|
|
67
|
+
*/
|
|
51
68
|
const createTokenCounter = async () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
if (tokenCounterPromise) {
|
|
70
|
+
return tokenCounterPromise;
|
|
71
|
+
}
|
|
72
|
+
tokenCounterPromise = (async () => {
|
|
73
|
+
const enc = await getSharedEncoder();
|
|
74
|
+
const countTokens = (text) => enc.encode(text).length;
|
|
75
|
+
return (message) => getTokenCountForMessage(message, countTokens);
|
|
76
|
+
})();
|
|
77
|
+
return tokenCounterPromise;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Utility to manage the token encoder lifecycle explicitly.
|
|
81
|
+
* Useful for applications that need fine-grained control over resource management.
|
|
82
|
+
*/
|
|
83
|
+
const TokenEncoderManager = {
|
|
84
|
+
/**
|
|
85
|
+
* Pre-initializes the encoder. This can be called during app startup
|
|
86
|
+
* to avoid lazy loading delays later.
|
|
87
|
+
*/
|
|
88
|
+
async initialize() {
|
|
89
|
+
await getSharedEncoder();
|
|
90
|
+
},
|
|
91
|
+
/**
|
|
92
|
+
* Clears the cached encoder and token counter.
|
|
93
|
+
* Useful for testing or when you need to force a fresh reload.
|
|
94
|
+
*/
|
|
95
|
+
reset() {
|
|
96
|
+
encoderPromise = undefined;
|
|
97
|
+
tokenCounterPromise = undefined;
|
|
98
|
+
},
|
|
99
|
+
/**
|
|
100
|
+
* Checks if the encoder has been initialized.
|
|
101
|
+
*/
|
|
102
|
+
isInitialized() {
|
|
103
|
+
return encoderPromise !== undefined;
|
|
104
|
+
},
|
|
59
105
|
};
|
|
60
106
|
|
|
61
|
-
export { createTokenCounter, getTokenCountForMessage };
|
|
107
|
+
export { TokenEncoderManager, createTokenCounter, getTokenCountForMessage };
|
|
62
108
|
//# sourceMappingURL=tokens.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.mjs","sources":["../../../src/utils/tokens.ts"],"sourcesContent":["import { Tiktoken } from 'js-tiktoken/lite';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { ContentTypes } from '@/common/enum';\n\nexport function getTokenCountForMessage(message: BaseMessage
|
|
1
|
+
{"version":3,"file":"tokens.mjs","sources":["../../../src/utils/tokens.ts"],"sourcesContent":["import { Tiktoken } from 'js-tiktoken/lite';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { ContentTypes } from '@/common/enum';\n\nexport function getTokenCountForMessage(\n message: BaseMessage,\n getTokenCount: (text: string) => number\n): number {\n const tokensPerMessage = 3;\n\n const processValue = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (\n !item ||\n !item.type ||\n item.type === ContentTypes.ERROR ||\n item.type === ContentTypes.IMAGE_URL\n ) {\n continue;\n }\n\n if (item.type === ContentTypes.TOOL_CALL && item.tool_call != null) {\n const toolName = item.tool_call?.name || '';\n if (toolName != null && toolName && typeof toolName === 'string') {\n numTokens += getTokenCount(toolName);\n }\n\n const args = item.tool_call?.args || '';\n if (args != null && args && typeof args === 'string') {\n numTokens += getTokenCount(args);\n }\n\n const output = item.tool_call?.output || '';\n if (output != null && output && typeof output === 'string') {\n numTokens += getTokenCount(output);\n }\n continue;\n }\n\n const nestedValue = item[item.type];\n\n if (!nestedValue) {\n continue;\n }\n\n processValue(nestedValue);\n }\n } else if (typeof value === 'string') {\n numTokens += getTokenCount(value);\n } else if (typeof value === 'number') {\n numTokens += getTokenCount(value.toString());\n } else if (typeof value === 'boolean') {\n numTokens += getTokenCount(value.toString());\n }\n };\n\n let numTokens = tokensPerMessage;\n processValue(message.content);\n return numTokens;\n}\n\nlet encoderPromise: Promise<Tiktoken> | undefined;\nlet tokenCounterPromise: Promise<(message: BaseMessage) => number> | undefined;\n\nasync function getSharedEncoder(): Promise<Tiktoken> {\n if (encoderPromise) {\n return encoderPromise;\n }\n encoderPromise = (async (): Promise<Tiktoken> => {\n const res = await fetch('https://tiktoken.pages.dev/js/o200k_base.json');\n const o200k_base = await res.json();\n return new Tiktoken(o200k_base);\n })();\n return encoderPromise;\n}\n\n/**\n * Creates a singleton token counter function that reuses the same encoder instance.\n * This avoids creating multiple function closures and prevents potential memory issues.\n */\nexport const createTokenCounter = async (): Promise<\n (message: BaseMessage) => number\n> => {\n if (tokenCounterPromise) {\n return tokenCounterPromise;\n }\n\n tokenCounterPromise = (async (): Promise<\n (message: BaseMessage) => number\n > => {\n const enc = await getSharedEncoder();\n const countTokens = (text: string): number => enc.encode(text).length;\n return (message: BaseMessage): number =>\n getTokenCountForMessage(message, countTokens);\n })();\n\n return tokenCounterPromise;\n};\n\n/**\n * Utility to manage the token encoder lifecycle explicitly.\n * Useful for applications that need fine-grained control over resource management.\n */\nexport const TokenEncoderManager = {\n /**\n * Pre-initializes the encoder. This can be called during app startup\n * to avoid lazy loading delays later.\n */\n async initialize(): Promise<void> {\n await getSharedEncoder();\n },\n\n /**\n * Clears the cached encoder and token counter.\n * Useful for testing or when you need to force a fresh reload.\n */\n reset(): void {\n encoderPromise = undefined;\n tokenCounterPromise = undefined;\n },\n\n /**\n * Checks if the encoder has been initialized.\n */\n isInitialized(): boolean {\n return encoderPromise !== undefined;\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { SystemMessage } from '@langchain/core/messages';
|
|
2
|
+
import type { UsageMetadata, BaseMessage } from '@langchain/core/messages';
|
|
3
|
+
import type { RunnableConfig, Runnable } from '@langchain/core/runnables';
|
|
4
|
+
import type * as t from '@/types';
|
|
5
|
+
import type { createPruneMessages } from '@/messages';
|
|
6
|
+
import { ContentTypes, Providers } from '@/common';
|
|
7
|
+
/**
|
|
8
|
+
* Encapsulates agent-specific state that can vary between agents in a multi-agent system
|
|
9
|
+
*/
|
|
10
|
+
export declare class AgentContext {
|
|
11
|
+
/**
|
|
12
|
+
* Create an AgentContext from configuration with token accounting initialization
|
|
13
|
+
*/
|
|
14
|
+
static fromConfig(agentConfig: t.AgentInputs, tokenCounter?: t.TokenCounter, indexTokenCountMap?: Record<string, number>): AgentContext;
|
|
15
|
+
/** Agent identifier */
|
|
16
|
+
agentId: string;
|
|
17
|
+
/** Provider for this specific agent */
|
|
18
|
+
provider: Providers;
|
|
19
|
+
/** Client options for this agent */
|
|
20
|
+
clientOptions?: t.ClientOptions;
|
|
21
|
+
/** Token count map indexed by message position */
|
|
22
|
+
indexTokenCountMap: Record<string, number | undefined>;
|
|
23
|
+
/** Maximum context tokens for this agent */
|
|
24
|
+
maxContextTokens?: number;
|
|
25
|
+
/** Current usage metadata for this agent */
|
|
26
|
+
currentUsage?: Partial<UsageMetadata>;
|
|
27
|
+
/** Prune messages function configured for this agent */
|
|
28
|
+
pruneMessages?: ReturnType<typeof createPruneMessages>;
|
|
29
|
+
/** Token counter function for this agent */
|
|
30
|
+
tokenCounter?: t.TokenCounter;
|
|
31
|
+
/** Instructions/system message token count */
|
|
32
|
+
instructionTokens: number;
|
|
33
|
+
/** The amount of time that should pass before another consecutive API call */
|
|
34
|
+
streamBuffer?: number;
|
|
35
|
+
/** Last stream call timestamp for rate limiting */
|
|
36
|
+
lastStreamCall?: number;
|
|
37
|
+
/** Tools available to this agent */
|
|
38
|
+
tools?: t.GraphTools;
|
|
39
|
+
/** Tool map for this agent */
|
|
40
|
+
toolMap?: t.ToolMap;
|
|
41
|
+
/** Instructions for this agent */
|
|
42
|
+
instructions?: string;
|
|
43
|
+
/** Additional instructions for this agent */
|
|
44
|
+
additionalInstructions?: string;
|
|
45
|
+
/** Reasoning key for this agent */
|
|
46
|
+
reasoningKey: 'reasoning_content' | 'reasoning';
|
|
47
|
+
/** Last token for reasoning detection */
|
|
48
|
+
lastToken?: string;
|
|
49
|
+
/** Token type switch state */
|
|
50
|
+
tokenTypeSwitch?: 'reasoning' | 'content';
|
|
51
|
+
/** Current token type being processed */
|
|
52
|
+
currentTokenType: ContentTypes.TEXT | ContentTypes.THINK | 'think_and_text';
|
|
53
|
+
/** Whether tools should end the workflow */
|
|
54
|
+
toolEnd: boolean;
|
|
55
|
+
/** System runnable for this agent */
|
|
56
|
+
systemRunnable?: Runnable<BaseMessage[], (BaseMessage | SystemMessage)[], RunnableConfig<Record<string, unknown>>>;
|
|
57
|
+
/** Promise for token calculation initialization */
|
|
58
|
+
tokenCalculationPromise?: Promise<void>;
|
|
59
|
+
constructor({ agentId, provider, clientOptions, maxContextTokens, streamBuffer, tokenCounter, tools, toolMap, instructions, additionalInstructions, reasoningKey, toolEnd, instructionTokens, }: {
|
|
60
|
+
agentId: string;
|
|
61
|
+
provider: Providers;
|
|
62
|
+
clientOptions?: t.ClientOptions;
|
|
63
|
+
maxContextTokens?: number;
|
|
64
|
+
streamBuffer?: number;
|
|
65
|
+
tokenCounter?: t.TokenCounter;
|
|
66
|
+
tools?: t.GraphTools;
|
|
67
|
+
toolMap?: t.ToolMap;
|
|
68
|
+
instructions?: string;
|
|
69
|
+
additionalInstructions?: string;
|
|
70
|
+
reasoningKey?: 'reasoning_content' | 'reasoning';
|
|
71
|
+
toolEnd?: boolean;
|
|
72
|
+
instructionTokens?: number;
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* Create system runnable from instructions and calculate tokens if tokenCounter is available
|
|
76
|
+
*/
|
|
77
|
+
private createSystemRunnable;
|
|
78
|
+
/**
|
|
79
|
+
* Reset context for a new run
|
|
80
|
+
*/
|
|
81
|
+
reset(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Update the token count map with instruction tokens
|
|
84
|
+
*/
|
|
85
|
+
updateTokenMapWithInstructions(baseTokenMap: Record<string, number>): void;
|
|
86
|
+
/**
|
|
87
|
+
* Calculate tool tokens and add to instruction tokens
|
|
88
|
+
* Note: System message tokens are calculated during systemRunnable creation
|
|
89
|
+
*/
|
|
90
|
+
calculateInstructionTokens(tokenCounter: t.TokenCounter): Promise<void>;
|
|
91
|
+
}
|
|
@@ -66,8 +66,9 @@ export declare enum Providers {
|
|
|
66
66
|
XAI = "xai"
|
|
67
67
|
}
|
|
68
68
|
export declare enum GraphNodeKeys {
|
|
69
|
-
TOOLS = "tools",
|
|
70
|
-
AGENT = "agent",
|
|
69
|
+
TOOLS = "tools=",
|
|
70
|
+
AGENT = "agent=",
|
|
71
|
+
ROUTER = "router",
|
|
71
72
|
PRE_TOOLS = "pre_tools",
|
|
72
73
|
POST_TOOLS = "post_tools"
|
|
73
74
|
}
|
|
@@ -92,10 +93,12 @@ export declare enum ContentTypes {
|
|
|
92
93
|
IMAGE_FILE = "image_file",
|
|
93
94
|
/** Anthropic */
|
|
94
95
|
THINKING = "thinking",
|
|
95
|
-
/**
|
|
96
|
-
|
|
96
|
+
/** Vertex AI / Google Common */
|
|
97
|
+
REASONING = "reasoning",
|
|
97
98
|
/** Multi-Agent Switch */
|
|
98
|
-
AGENT_UPDATE = "agent_update"
|
|
99
|
+
AGENT_UPDATE = "agent_update",
|
|
100
|
+
/** Bedrock */
|
|
101
|
+
REASONING_CONTENT = "reasoning_content"
|
|
99
102
|
}
|
|
100
103
|
export declare enum ToolCallTypes {
|
|
101
104
|
FUNCTION = "function",
|
|
@@ -107,7 +110,8 @@ export declare enum ToolCallTypes {
|
|
|
107
110
|
export declare enum Callback {
|
|
108
111
|
TOOL_ERROR = "handleToolError",
|
|
109
112
|
TOOL_START = "handleToolStart",
|
|
110
|
-
TOOL_END = "handleToolEnd"
|
|
113
|
+
TOOL_END = "handleToolEnd",
|
|
114
|
+
CUSTOM_EVENT = "handleCustomEvent"
|
|
111
115
|
}
|
|
112
116
|
export declare enum Constants {
|
|
113
117
|
OFFICIAL_CODE_BASEURL = "https://api.librechat.ai/v1",
|
|
@@ -115,6 +119,11 @@ export declare enum Constants {
|
|
|
115
119
|
WEB_SEARCH = "web_search",
|
|
116
120
|
CONTENT_AND_ARTIFACT = "content_and_artifact"
|
|
117
121
|
}
|
|
122
|
+
export declare enum TitleMethod {
|
|
123
|
+
STRUCTURED = "structured",
|
|
124
|
+
FUNCTIONS = "functions",
|
|
125
|
+
COMPLETION = "completion"
|
|
126
|
+
}
|
|
118
127
|
export declare enum EnvVar {
|
|
119
128
|
CODE_API_KEY = "LIBRECHAT_CODE_API_KEY",
|
|
120
129
|
CODE_BASEURL = "LIBRECHAT_CODE_BASEURL"
|
package/dist/types/events.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UsageMetadata, BaseMessageFields } from '@langchain/core/messages';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MultiAgentGraph, StandardGraph } from '@/graphs';
|
|
3
3
|
import type * as t from '@/types';
|
|
4
4
|
export declare class HandlerRegistry {
|
|
5
5
|
private handlers;
|
|
@@ -9,12 +9,13 @@ export declare class HandlerRegistry {
|
|
|
9
9
|
export declare class ModelEndHandler implements t.EventHandler {
|
|
10
10
|
collectedUsage?: UsageMetadata[];
|
|
11
11
|
constructor(collectedUsage?: UsageMetadata[]);
|
|
12
|
-
handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?:
|
|
12
|
+
handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?: StandardGraph | MultiAgentGraph): Promise<void>;
|
|
13
13
|
}
|
|
14
14
|
export declare class ToolEndHandler implements t.EventHandler {
|
|
15
15
|
private callback?;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
private omitOutput?;
|
|
17
|
+
constructor(callback?: t.ToolEndCallback, omitOutput?: (name?: string) => boolean);
|
|
18
|
+
handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>, graph?: StandardGraph | MultiAgentGraph): Promise<void>;
|
|
18
19
|
}
|
|
19
20
|
export declare class TestLLMStreamHandler implements t.EventHandler {
|
|
20
21
|
handle(event: string, data: t.StreamEventData | undefined): void;
|
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
import { ToolNode } from '@langchain/langgraph/prebuilt';
|
|
2
|
-
import { START } from '@langchain/langgraph';
|
|
3
2
|
import { Runnable, RunnableConfig } from '@langchain/core/runnables';
|
|
4
|
-
import {
|
|
5
|
-
import type { BaseMessage, UsageMetadata } from '@langchain/core/messages';
|
|
6
|
-
import type * as t from '@/types';
|
|
7
|
-
import { Providers, GraphNodeKeys, Callback, ContentTypes } from '@/common';
|
|
3
|
+
import type { UsageMetadata, BaseMessage } from '@langchain/core/messages';
|
|
8
4
|
import type { ToolCall } from '@langchain/core/messages/tool';
|
|
5
|
+
import type * as t from '@/types';
|
|
6
|
+
import { Providers } from '@/common';
|
|
9
7
|
import { ToolNode as CustomToolNode } from '@/tools/ToolNode';
|
|
10
|
-
import {
|
|
8
|
+
import { AgentContext } from '@/agents/AgentContext';
|
|
11
9
|
import { HandlerRegistry } from '@/events';
|
|
12
|
-
export
|
|
13
|
-
export type ClientCallback<T extends unknown[]> = (graph: StandardGraph, ...args: T) => void;
|
|
14
|
-
export type ClientCallbacks = {
|
|
15
|
-
[Callback.TOOL_ERROR]?: ClientCallback<[Error, string]>;
|
|
16
|
-
[Callback.TOOL_START]?: ClientCallback<unknown[]>;
|
|
17
|
-
[Callback.TOOL_END]?: ClientCallback<unknown[]>;
|
|
18
|
-
};
|
|
19
|
-
export type SystemCallbacks = {
|
|
20
|
-
[K in keyof ClientCallbacks]: ClientCallbacks[K] extends ClientCallback<infer Args> ? (...args: Args) => void : never;
|
|
21
|
-
};
|
|
22
|
-
export declare abstract class Graph<T extends t.BaseGraphState = t.BaseGraphState, TNodeName extends string = string> {
|
|
10
|
+
export declare abstract class Graph<T extends t.BaseGraphState = t.BaseGraphState, _TNodeName extends string = string> {
|
|
23
11
|
abstract resetValues(): void;
|
|
24
|
-
abstract
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
abstract initializeTools({ currentTools, currentToolMap, }: {
|
|
13
|
+
currentTools?: t.GraphTools;
|
|
14
|
+
currentToolMap?: t.ToolMap;
|
|
15
|
+
}): CustomToolNode<T> | ToolNode<T>;
|
|
16
|
+
abstract initializeModel({ currentModel, tools, clientOptions, }: {
|
|
17
|
+
currentModel?: t.ChatModel;
|
|
18
|
+
tools?: t.GraphTools;
|
|
19
|
+
clientOptions?: t.ClientOptions;
|
|
20
|
+
}): Runnable;
|
|
27
21
|
abstract getRunMessages(): BaseMessage[] | undefined;
|
|
28
22
|
abstract getContentParts(): t.MessageContentComplex[] | undefined;
|
|
29
23
|
abstract generateStepId(stepKey: string): [string, number];
|
|
@@ -32,17 +26,12 @@ export declare abstract class Graph<T extends t.BaseGraphState = t.BaseGraphStat
|
|
|
32
26
|
abstract checkKeyList(keyList: (string | number | undefined)[]): boolean;
|
|
33
27
|
abstract getStepIdByKey(stepKey: string, index?: number): string;
|
|
34
28
|
abstract getRunStep(stepId: string): t.RunStep | undefined;
|
|
35
|
-
abstract dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): string
|
|
36
|
-
abstract dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): void
|
|
37
|
-
abstract dispatchMessageDelta(id: string, delta: t.MessageDelta): void
|
|
38
|
-
abstract dispatchReasoningDelta(stepId: string, delta: t.ReasoningDelta): void
|
|
39
|
-
abstract handleToolCallCompleted(data: t.ToolEndData, metadata?: Record<string, unknown
|
|
40
|
-
abstract createCallModel(): (state: T, config?: RunnableConfig) => Promise<Partial<T>>;
|
|
41
|
-
abstract createWorkflow(): t.CompiledWorkflow<T>;
|
|
42
|
-
lastToken?: string;
|
|
43
|
-
tokenTypeSwitch?: 'reasoning' | 'content';
|
|
44
|
-
reasoningKey: 'reasoning_content' | 'reasoning';
|
|
45
|
-
currentTokenType: ContentTypes.TEXT | ContentTypes.THINK | 'think_and_text';
|
|
29
|
+
abstract dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): Promise<string>;
|
|
30
|
+
abstract dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): Promise<void>;
|
|
31
|
+
abstract dispatchMessageDelta(id: string, delta: t.MessageDelta): Promise<void>;
|
|
32
|
+
abstract dispatchReasoningDelta(stepId: string, delta: t.ReasoningDelta): Promise<void>;
|
|
33
|
+
abstract handleToolCallCompleted(data: t.ToolEndData, metadata?: Record<string, unknown>, omitOutput?: boolean): Promise<void>;
|
|
34
|
+
abstract createCallModel(agentId?: string, currentModel?: t.ChatModel): (state: T, config?: RunnableConfig) => Promise<Partial<T>>;
|
|
46
35
|
messageStepHasToolCalls: Map<string, boolean>;
|
|
47
36
|
messageIdsByStepKey: Map<string, string>;
|
|
48
37
|
prelimMessageIdsByStepKey: Map<string, string>;
|
|
@@ -51,34 +40,27 @@ export declare abstract class Graph<T extends t.BaseGraphState = t.BaseGraphStat
|
|
|
51
40
|
stepKeyIds: Map<string, string[]>;
|
|
52
41
|
contentIndexMap: Map<string, number>;
|
|
53
42
|
toolCallStepIds: Map<string, string>;
|
|
54
|
-
currentUsage: Partial<UsageMetadata> | undefined;
|
|
55
|
-
indexTokenCountMap: Record<string, number | undefined>;
|
|
56
|
-
maxContextTokens: number | undefined;
|
|
57
|
-
pruneMessages?: ReturnType<typeof createPruneMessages>;
|
|
58
|
-
/** The amount of time that should pass before another consecutive API call */
|
|
59
|
-
streamBuffer: number | undefined;
|
|
60
|
-
tokenCounter?: t.TokenCounter;
|
|
61
43
|
signal?: AbortSignal;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
private graphState;
|
|
65
|
-
clientOptions: t.ClientOptions;
|
|
66
|
-
boundModel?: Runnable;
|
|
67
|
-
/** The last recorded timestamp that a stream API call was invoked */
|
|
68
|
-
lastStreamCall: number | undefined;
|
|
44
|
+
/** Set of invoked tool call IDs from non-message run steps completed mid-run, if any */
|
|
45
|
+
invokedToolIds?: Set<string>;
|
|
69
46
|
handlerRegistry: HandlerRegistry | undefined;
|
|
70
|
-
|
|
47
|
+
}
|
|
48
|
+
export declare class StandardGraph extends Graph<t.BaseGraphState, t.GraphNode> {
|
|
49
|
+
overrideModel?: t.ChatModel;
|
|
50
|
+
/** Optional compile options passed into workflow.compile() */
|
|
51
|
+
compileOptions?: t.CompileOptions | undefined;
|
|
71
52
|
messages: BaseMessage[];
|
|
72
53
|
runId: string | undefined;
|
|
73
|
-
tools?: t.GenericTool[];
|
|
74
|
-
toolMap?: t.ToolMap;
|
|
75
54
|
startIndex: number;
|
|
76
|
-
provider: Providers;
|
|
77
|
-
toolEnd: boolean;
|
|
78
55
|
signal?: AbortSignal;
|
|
79
|
-
|
|
56
|
+
/** Map of agent contexts by agent ID */
|
|
57
|
+
agentContexts: Map<string, AgentContext>;
|
|
58
|
+
/** Default agent ID to use */
|
|
59
|
+
defaultAgentId: string;
|
|
60
|
+
constructor({ runId, signal, agents, tokenCounter, indexTokenCountMap, }: t.StandardGraphInput);
|
|
80
61
|
resetValues(keepContent?: boolean): void;
|
|
81
62
|
getRunStep(stepId: string): t.RunStep | undefined;
|
|
63
|
+
getAgentContext(metadata: Record<string, unknown> | undefined): AgentContext;
|
|
82
64
|
getStepKey(metadata: Record<string, unknown> | undefined): string;
|
|
83
65
|
getStepIdByKey(stepKey: string, index?: number): string;
|
|
84
66
|
generateStepId(stepKey: string): [string, number];
|
|
@@ -86,34 +68,49 @@ export declare class StandardGraph extends Graph<t.BaseGraphState, GraphNode> {
|
|
|
86
68
|
checkKeyList(keyList: (string | number | undefined)[]): boolean;
|
|
87
69
|
getRunMessages(): BaseMessage[] | undefined;
|
|
88
70
|
getContentParts(): t.MessageContentComplex[] | undefined;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
71
|
+
createSystemRunnable({ provider, clientOptions, instructions, additional_instructions, }: {
|
|
72
|
+
provider?: Providers;
|
|
73
|
+
clientOptions?: t.ClientOptions;
|
|
74
|
+
instructions?: string;
|
|
75
|
+
additional_instructions?: string;
|
|
76
|
+
}): t.SystemRunnable | undefined;
|
|
77
|
+
initializeTools({ currentTools, currentToolMap, }: {
|
|
78
|
+
currentTools?: t.GraphTools;
|
|
79
|
+
currentToolMap?: t.ToolMap;
|
|
80
|
+
}): CustomToolNode<t.BaseGraphState> | ToolNode<t.BaseGraphState>;
|
|
81
|
+
initializeModel({ provider, tools, clientOptions, }: {
|
|
82
|
+
provider: Providers;
|
|
83
|
+
tools?: t.GraphTools;
|
|
84
|
+
clientOptions?: t.ClientOptions;
|
|
85
|
+
}): Runnable;
|
|
92
86
|
overrideTestModel(responses: string[], sleep?: number, toolCalls?: ToolCall[]): void;
|
|
93
|
-
getNewModel({
|
|
87
|
+
getNewModel({ provider, clientOptions, }: {
|
|
88
|
+
provider: Providers;
|
|
94
89
|
clientOptions?: t.ClientOptions;
|
|
95
|
-
omitOriginalOptions?: Set<string>;
|
|
96
90
|
}): t.ChatModelInstance;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
getUsageMetadata(finalMessage?: BaseMessage): Partial<UsageMetadata> | undefined;
|
|
92
|
+
/** Execute model invocation with streaming support */
|
|
93
|
+
private attemptInvoke;
|
|
94
|
+
cleanupSignalListener(currentModel?: t.ChatModel): void;
|
|
95
|
+
createCallModel(agentId?: string, currentModel?: t.ChatModel): (state: t.BaseGraphState, config?: RunnableConfig) => Promise<Partial<t.BaseGraphState>>;
|
|
96
|
+
createAgentNode(agentId: string): t.CompiledAgentWorfklow;
|
|
97
|
+
createWorkflow(): t.CompiledStateWorkflow;
|
|
101
98
|
/**
|
|
102
99
|
* Dispatches a run step to the client, returns the step ID
|
|
103
100
|
*/
|
|
104
|
-
dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): string
|
|
105
|
-
handleToolCallCompleted(data: t.ToolEndData, metadata?: Record<string, unknown
|
|
101
|
+
dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): Promise<string>;
|
|
102
|
+
handleToolCallCompleted(data: t.ToolEndData, metadata?: Record<string, unknown>, omitOutput?: boolean): Promise<void>;
|
|
106
103
|
/**
|
|
107
104
|
* Static version of handleToolCallError to avoid creating strong references
|
|
108
105
|
* that prevent garbage collection
|
|
109
106
|
*/
|
|
110
|
-
static handleToolCallErrorStatic(graph: StandardGraph, data: t.ToolErrorData, metadata?: Record<string, unknown>): void
|
|
107
|
+
static handleToolCallErrorStatic(graph: StandardGraph, data: t.ToolErrorData, metadata?: Record<string, unknown>): Promise<void>;
|
|
111
108
|
/**
|
|
112
109
|
* Instance method that delegates to the static method
|
|
113
110
|
* Kept for backward compatibility
|
|
114
111
|
*/
|
|
115
|
-
handleToolCallError(data: t.ToolErrorData, metadata?: Record<string, unknown>): void
|
|
116
|
-
dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): void
|
|
117
|
-
dispatchMessageDelta(id: string, delta: t.MessageDelta): void
|
|
118
|
-
dispatchReasoningDelta: (stepId: string, delta: t.ReasoningDelta) => void
|
|
112
|
+
handleToolCallError(data: t.ToolErrorData, metadata?: Record<string, unknown>): Promise<void>;
|
|
113
|
+
dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): Promise<void>;
|
|
114
|
+
dispatchMessageDelta(id: string, delta: t.MessageDelta): Promise<void>;
|
|
115
|
+
dispatchReasoningDelta: (stepId: string, delta: t.ReasoningDelta) => Promise<void>;
|
|
119
116
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type * as t from '@/types';
|
|
2
|
+
import { StandardGraph } from './Graph';
|
|
3
|
+
/**
|
|
4
|
+
* MultiAgentGraph extends StandardGraph to support dynamic multi-agent workflows
|
|
5
|
+
* with handoffs, fan-in/fan-out, and other composable patterns
|
|
6
|
+
*/
|
|
7
|
+
export declare class MultiAgentGraph extends StandardGraph {
|
|
8
|
+
private edges;
|
|
9
|
+
private startingNodes;
|
|
10
|
+
private directEdges;
|
|
11
|
+
private handoffEdges;
|
|
12
|
+
constructor(input: t.MultiAgentGraphInput);
|
|
13
|
+
/**
|
|
14
|
+
* Categorize edges into handoff and direct types
|
|
15
|
+
*/
|
|
16
|
+
private categorizeEdges;
|
|
17
|
+
/**
|
|
18
|
+
* Analyze graph structure to determine starting nodes and connections
|
|
19
|
+
*/
|
|
20
|
+
private analyzeGraph;
|
|
21
|
+
/**
|
|
22
|
+
* Create handoff tools for agents based on handoff edges only
|
|
23
|
+
*/
|
|
24
|
+
private createHandoffTools;
|
|
25
|
+
/**
|
|
26
|
+
* Create handoff tools for an edge (handles multiple destinations)
|
|
27
|
+
*/
|
|
28
|
+
private createHandoffToolsForEdge;
|
|
29
|
+
/**
|
|
30
|
+
* Create a complete agent subgraph (similar to createReactAgent)
|
|
31
|
+
*/
|
|
32
|
+
private createAgentSubgraph;
|
|
33
|
+
/**
|
|
34
|
+
* Create the multi-agent workflow with dynamic handoffs
|
|
35
|
+
*/
|
|
36
|
+
createWorkflow(): t.CompiledStateWorkflow;
|
|
37
|
+
}
|
|
@@ -4,9 +4,15 @@ import type { BaseChatModelParams } from '@langchain/core/language_models/chat_m
|
|
|
4
4
|
import type { BaseMessage, UsageMetadata } from '@langchain/core/messages';
|
|
5
5
|
import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
|
|
6
6
|
import type { AnthropicInput } from '@langchain/anthropic';
|
|
7
|
+
import type { AnthropicMessageCreateParams, AnthropicStreamingMessageCreateParams } from '@/llm/anthropic/types';
|
|
7
8
|
export type CustomAnthropicInput = AnthropicInput & {
|
|
8
9
|
_lc_stream_delay?: number;
|
|
9
10
|
} & BaseChatModelParams;
|
|
11
|
+
/**
|
|
12
|
+
* A type representing additional parameters that can be passed to the
|
|
13
|
+
* Anthropic API.
|
|
14
|
+
*/
|
|
15
|
+
type Kwargs = Record<string, any>;
|
|
10
16
|
export declare class CustomAnthropic extends ChatAnthropicMessages {
|
|
11
17
|
_lc_stream_delay: number;
|
|
12
18
|
private message_start;
|
|
@@ -14,6 +20,10 @@ export declare class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
14
20
|
private tools_in_params?;
|
|
15
21
|
private emitted_usage?;
|
|
16
22
|
constructor(fields?: CustomAnthropicInput);
|
|
23
|
+
/**
|
|
24
|
+
* Get the parameters used to invoke the model
|
|
25
|
+
*/
|
|
26
|
+
invocationParams(options?: this['ParsedCallOptions']): Omit<AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams, 'messages'> & Kwargs;
|
|
17
27
|
/**
|
|
18
28
|
* Get stream usage as returned by this client's API response.
|
|
19
29
|
* @returns The stream usage object.
|
|
@@ -23,3 +33,4 @@ export declare class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
23
33
|
private createGenerationChunk;
|
|
24
34
|
_streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
25
35
|
}
|
|
36
|
+
export {};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
2
|
import { BindToolsInput } from '@langchain/core/language_models/chat_models';
|
|
3
|
+
export type AnthropicStreamUsage = Anthropic.Usage;
|
|
4
|
+
export type AnthropicMessageDeltaEvent = Anthropic.MessageDeltaEvent;
|
|
5
|
+
export type AnthropicMessageStartEvent = Anthropic.MessageStartEvent;
|
|
3
6
|
export type AnthropicToolResponse = {
|
|
4
7
|
type: 'tool_use';
|
|
5
8
|
id: string;
|
|
6
9
|
name: string;
|
|
7
10
|
input: Record<string, any>;
|
|
8
11
|
};
|
|
9
|
-
export type AnthropicStreamUsage = Anthropic.Usage;
|
|
10
12
|
export type AnthropicMessageParam = Anthropic.MessageParam;
|
|
11
|
-
export type AnthropicMessageDeltaEvent = Anthropic.MessageDeltaEvent;
|
|
12
|
-
export type AnthropicMessageStartEvent = Anthropic.MessageStartEvent;
|
|
13
13
|
export type AnthropicMessageResponse = Anthropic.ContentBlock | AnthropicToolResponse;
|
|
14
14
|
export type AnthropicMessageCreateParams = Anthropic.MessageCreateParamsNonStreaming;
|
|
15
15
|
export type AnthropicStreamingMessageCreateParams = Anthropic.MessageCreateParamsStreaming;
|
|
@@ -28,4 +28,10 @@ export type AnthropicToolResultBlockParam = Anthropic.Messages.ToolResultBlockPa
|
|
|
28
28
|
export type AnthropicDocumentBlockParam = Anthropic.Messages.DocumentBlockParam;
|
|
29
29
|
export type AnthropicThinkingBlockParam = Anthropic.Messages.ThinkingBlockParam;
|
|
30
30
|
export type AnthropicRedactedThinkingBlockParam = Anthropic.Messages.RedactedThinkingBlockParam;
|
|
31
|
+
export type AnthropicServerToolUseBlockParam = Anthropic.Messages.ServerToolUseBlockParam;
|
|
32
|
+
export type AnthropicWebSearchToolResultBlockParam = Anthropic.Messages.WebSearchToolResultBlockParam;
|
|
33
|
+
export type AnthropicWebSearchResultBlockParam = Anthropic.Messages.WebSearchResultBlockParam;
|
|
34
|
+
export type AnthropicSearchResultBlockParam = Anthropic.Beta.BetaSearchResultBlockParam;
|
|
35
|
+
export type AnthropicContentBlock = AnthropicTextBlockParam | AnthropicImageBlockParam | AnthropicToolUseBlockParam | AnthropicToolResultBlockParam | AnthropicDocumentBlockParam | AnthropicThinkingBlockParam | AnthropicRedactedThinkingBlockParam | AnthropicServerToolUseBlockParam | AnthropicWebSearchToolResultBlockParam | AnthropicWebSearchResultBlockParam;
|
|
36
|
+
export type ChatAnthropicContentBlock = AnthropicTextBlockParam | AnthropicImageBlockParam | AnthropicToolUseBlockParam | AnthropicToolResultBlockParam | AnthropicDocumentBlockParam | AnthropicThinkingBlockParam | AnthropicRedactedThinkingBlockParam | AnthropicServerToolUseBlockParam | AnthropicWebSearchToolResultBlockParam | AnthropicWebSearchResultBlockParam | AnthropicSearchResultBlockParam;
|
|
31
37
|
export declare function isAnthropicImageBlockParam(block: unknown): block is AnthropicImageBlockParam;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { type BaseMessage } from '@langchain/core/messages';
|
|
5
5
|
import { ToolCall } from '@langchain/core/messages/tool';
|
|
6
|
-
import
|
|
6
|
+
import { AnthropicMessageCreateParams, AnthropicToolResponse } from '../types';
|
|
7
7
|
export declare function _convertLangChainToolCallToAnthropic(toolCall: ToolCall): AnthropicToolResponse;
|
|
8
8
|
/**
|
|
9
9
|
* Formats messages as a prompt for the model.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
1
|
import { BaseLLMOutputParser } from '@langchain/core/output_parsers';
|
|
3
|
-
import {
|
|
2
|
+
import { JsonOutputKeyToolsParserParamsInterop } from '@langchain/core/output_parsers/openai_tools';
|
|
4
3
|
import { ChatGeneration } from '@langchain/core/outputs';
|
|
5
4
|
import { ToolCall } from '@langchain/core/messages/tool';
|
|
6
|
-
|
|
5
|
+
import { InteropZodType } from '@langchain/core/utils/types';
|
|
6
|
+
interface AnthropicToolsOutputParserParams<T extends Record<string, any>> extends JsonOutputKeyToolsParserParamsInterop<T> {
|
|
7
7
|
}
|
|
8
8
|
export declare class AnthropicToolsOutputParser<T extends Record<string, any> = Record<string, any>> extends BaseLLMOutputParser<T> {
|
|
9
9
|
static lc_name(): string;
|
|
@@ -13,7 +13,7 @@ export declare class AnthropicToolsOutputParser<T extends Record<string, any> =
|
|
|
13
13
|
keyName: string;
|
|
14
14
|
/** Whether to return only the first tool call. */
|
|
15
15
|
returnSingle: boolean;
|
|
16
|
-
zodSchema?:
|
|
16
|
+
zodSchema?: InteropZodType<T>;
|
|
17
17
|
constructor(params: AnthropicToolsOutputParserParams<T>);
|
|
18
18
|
protected _validateResult(result: unknown): Promise<T>;
|
|
19
19
|
parseResult(generations: ChatGeneration[]): Promise<T>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Anthropic } from '@anthropic-ai/sdk';
|
|
2
|
+
import { AnthropicToolChoice } from '../types.js';
|
|
3
|
+
export declare function handleToolChoice(toolChoice?: AnthropicToolChoice): Anthropic.Messages.ToolChoiceAuto | Anthropic.Messages.ToolChoiceAny | Anthropic.Messages.ToolChoiceTool | undefined;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
2
|
+
import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
|
|
3
|
+
import type { GenerateContentRequest } from '@google/generative-ai';
|
|
4
|
+
import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
|
|
5
|
+
import type { BaseMessage } from '@langchain/core/messages';
|
|
6
|
+
import type { GeminiGenerationConfig } from '@langchain/google-common';
|
|
7
|
+
import type { GoogleClientOptions } from '@/types';
|
|
8
|
+
export declare class CustomChatGoogleGenerativeAI extends ChatGoogleGenerativeAI {
|
|
9
|
+
thinkingConfig?: GeminiGenerationConfig['thinkingConfig'];
|
|
10
|
+
constructor(fields: GoogleClientOptions);
|
|
11
|
+
invocationParams(options?: this['ParsedCallOptions']): Omit<GenerateContentRequest, 'contents'>;
|
|
12
|
+
_streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CodeExecutionTool, FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool, GoogleSearchRetrievalTool } from '@google/generative-ai';
|
|
2
|
+
import { BindToolsInput } from '@langchain/core/language_models/chat_models';
|
|
3
|
+
export type GoogleGenerativeAIToolType = BindToolsInput | GoogleGenerativeAIFunctionDeclarationsTool | CodeExecutionTool | GoogleSearchRetrievalTool;
|
|
4
|
+
/** Enum for content modality types */
|
|
5
|
+
declare enum Modality {
|
|
6
|
+
MODALITY_UNSPECIFIED = "MODALITY_UNSPECIFIED",
|
|
7
|
+
TEXT = "TEXT",
|
|
8
|
+
IMAGE = "IMAGE",
|
|
9
|
+
VIDEO = "VIDEO",
|
|
10
|
+
AUDIO = "AUDIO",
|
|
11
|
+
DOCUMENT = "DOCUMENT"
|
|
12
|
+
}
|
|
13
|
+
/** Interface for modality token count */
|
|
14
|
+
interface ModalityTokenCount {
|
|
15
|
+
modality: Modality;
|
|
16
|
+
tokenCount: number;
|
|
17
|
+
}
|
|
18
|
+
/** Main interface for Gemini API usage metadata */
|
|
19
|
+
export interface GeminiApiUsageMetadata {
|
|
20
|
+
promptTokenCount?: number;
|
|
21
|
+
totalTokenCount?: number;
|
|
22
|
+
thoughtsTokenCount?: number;
|
|
23
|
+
candidatesTokenCount?: number;
|
|
24
|
+
toolUsePromptTokenCount?: number;
|
|
25
|
+
cachedContentTokenCount?: number;
|
|
26
|
+
promptTokensDetails: ModalityTokenCount[];
|
|
27
|
+
candidatesTokensDetails?: ModalityTokenCount[];
|
|
28
|
+
cacheTokensDetails?: ModalityTokenCount[];
|
|
29
|
+
toolUsePromptTokensDetails?: ModalityTokenCount[];
|
|
30
|
+
trafficType?: string;
|
|
31
|
+
}
|
|
32
|
+
export {};
|