illuma-agents 1.0.7 → 1.0.9
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/LICENSE +1 -5
- package/dist/cjs/common/enum.cjs +1 -2
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +79 -2
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +99 -0
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -0
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +78 -9
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +185 -28
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +13 -16
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +14 -14
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/run.cjs +10 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +4 -1
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +163 -55
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +29 -25
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +25 -25
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +6 -1
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +162 -35
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs +0 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +7 -7
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/esm/common/enum.mjs +1 -2
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +79 -2
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +97 -0
- package/dist/esm/llm/bedrock/index.mjs.map +1 -0
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +79 -10
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +184 -30
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +2 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +14 -14
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/run.mjs +10 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +4 -1
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +164 -56
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +30 -26
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +25 -25
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +6 -1
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +162 -35
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs +0 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +7 -7
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/types/common/enum.d.ts +1 -2
- package/dist/types/llm/bedrock/index.d.ts +36 -0
- package/dist/types/llm/google/index.d.ts +10 -0
- package/dist/types/llm/google/types.d.ts +11 -1
- package/dist/types/llm/google/utils/common.d.ts +17 -2
- package/dist/types/tools/ToolNode.d.ts +9 -1
- package/dist/types/tools/search/types.d.ts +2 -0
- package/dist/types/types/llm.d.ts +3 -8
- package/dist/types/types/tools.d.ts +1 -1
- package/package.json +15 -11
- package/src/common/enum.ts +1 -2
- package/src/common/index.ts +1 -1
- package/src/instrumentation.ts +22 -22
- package/src/llm/anthropic/llm.spec.ts +1442 -1442
- package/src/llm/anthropic/types.ts +140 -140
- package/src/llm/anthropic/utils/message_inputs.ts +757 -660
- package/src/llm/anthropic/utils/output_parsers.ts +133 -133
- package/src/llm/anthropic/utils/tools.ts +29 -29
- package/src/llm/bedrock/index.ts +128 -0
- package/src/llm/fake.ts +133 -133
- package/src/llm/google/data/gettysburg10.wav +0 -0
- package/src/llm/google/data/hotdog.jpg +0 -0
- package/src/llm/google/index.ts +129 -14
- package/src/llm/google/llm.spec.ts +932 -0
- package/src/llm/google/types.ts +56 -43
- package/src/llm/google/utils/common.ts +873 -660
- package/src/llm/google/utils/tools.ts +160 -160
- package/src/llm/openai/types.ts +24 -24
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -90
- package/src/llm/providers.ts +2 -7
- package/src/llm/text.ts +94 -94
- package/src/messages/core.ts +463 -463
- package/src/messages/formatAgentMessages.tools.test.ts +400 -400
- package/src/messages/formatMessage.test.ts +693 -693
- package/src/messages/ids.ts +26 -26
- package/src/messages/prune.ts +567 -567
- package/src/messages/shiftIndexTokenCountMap.test.ts +81 -81
- package/src/mockStream.ts +98 -98
- package/src/prompts/collab.ts +5 -5
- package/src/prompts/index.ts +1 -1
- package/src/prompts/taskmanager.ts +61 -61
- package/src/run.ts +13 -4
- package/src/scripts/ant_web_search_edge_case.ts +162 -0
- package/src/scripts/ant_web_search_error_edge_case.ts +148 -0
- package/src/scripts/args.ts +48 -48
- package/src/scripts/caching.ts +123 -123
- package/src/scripts/code_exec_files.ts +193 -193
- package/src/scripts/empty_input.ts +137 -137
- package/src/scripts/image.ts +178 -178
- package/src/scripts/memory.ts +97 -97
- package/src/scripts/thinking.ts +149 -149
- package/src/specs/anthropic.simple.test.ts +67 -0
- package/src/specs/spec.utils.ts +3 -3
- package/src/specs/token-distribution-edge-case.test.ts +316 -316
- package/src/specs/tool-error.test.ts +193 -193
- package/src/splitStream.test.ts +691 -691
- package/src/splitStream.ts +234 -234
- package/src/stream.test.ts +94 -94
- package/src/stream.ts +4 -1
- package/src/tools/ToolNode.ts +206 -64
- package/src/tools/handlers.ts +32 -28
- package/src/tools/search/anthropic.ts +51 -51
- package/src/tools/search/content.test.ts +173 -173
- package/src/tools/search/content.ts +147 -147
- package/src/tools/search/direct-url.test.ts +530 -0
- package/src/tools/search/firecrawl.ts +210 -210
- package/src/tools/search/format.ts +250 -250
- package/src/tools/search/highlights.ts +320 -320
- package/src/tools/search/index.ts +2 -2
- package/src/tools/search/jina-reranker.test.ts +126 -126
- package/src/tools/search/output.md +2775 -2775
- package/src/tools/search/rerankers.ts +242 -242
- package/src/tools/search/schema.ts +63 -63
- package/src/tools/search/search.ts +766 -759
- package/src/tools/search/serper-scraper.ts +155 -155
- package/src/tools/search/test.html +883 -883
- package/src/tools/search/test.md +642 -642
- package/src/tools/search/test.ts +159 -159
- package/src/tools/search/tool.ts +619 -471
- package/src/tools/search/types.ts +689 -687
- package/src/tools/search/utils.ts +79 -79
- package/src/types/index.ts +6 -6
- package/src/types/llm.ts +2 -8
- package/src/types/tools.ts +80 -80
- package/src/utils/graph.ts +10 -10
- package/src/utils/llm.ts +26 -27
- package/src/utils/llmConfig.ts +5 -3
- package/src/utils/logging.ts +48 -48
- package/src/utils/misc.ts +57 -57
- package/src/utils/run.ts +100 -100
- package/src/utils/title.ts +165 -165
- package/dist/cjs/llm/ollama/index.cjs +0 -70
- package/dist/cjs/llm/ollama/index.cjs.map +0 -1
- package/dist/cjs/llm/ollama/utils.cjs +0 -158
- package/dist/cjs/llm/ollama/utils.cjs.map +0 -1
- package/dist/esm/llm/ollama/index.mjs +0 -68
- package/dist/esm/llm/ollama/index.mjs.map +0 -1
- package/dist/esm/llm/ollama/utils.mjs +0 -155
- package/dist/esm/llm/ollama/utils.mjs.map +0 -1
- package/dist/types/llm/ollama/index.d.ts +0 -8
- package/dist/types/llm/ollama/utils.d.ts +0 -7
- package/src/llm/ollama/index.ts +0 -92
- package/src/llm/ollama/utils.ts +0 -193
- package/src/proto/CollabGraph.ts +0 -269
- package/src/proto/TaskManager.ts +0 -243
- package/src/proto/collab.ts +0 -200
- package/src/proto/collab_design.ts +0 -184
- package/src/proto/collab_design_v2.ts +0 -224
- package/src/proto/collab_design_v3.ts +0 -255
- package/src/proto/collab_design_v4.ts +0 -220
- package/src/proto/collab_design_v5.ts +0 -251
- package/src/proto/collab_graph.ts +0 -181
- package/src/proto/collab_original.ts +0 -123
- package/src/proto/example.ts +0 -93
- package/src/proto/example_new.ts +0 -68
- package/src/proto/example_old.ts +0 -201
- package/src/proto/example_test.ts +0 -152
- package/src/proto/example_test_anthropic.ts +0 -100
- package/src/proto/log_stream.ts +0 -202
- package/src/proto/main_collab_community_event.ts +0 -133
- package/src/proto/main_collab_design_v2.ts +0 -96
- package/src/proto/main_collab_design_v4.ts +0 -100
- package/src/proto/main_collab_design_v5.ts +0 -135
- package/src/proto/main_collab_global_analysis.ts +0 -122
- package/src/proto/main_collab_hackathon_event.ts +0 -153
- package/src/proto/main_collab_space_mission.ts +0 -153
- package/src/proto/main_philosophy.ts +0 -210
- package/src/proto/original_script.ts +0 -126
- package/src/proto/standard.ts +0 -100
- package/src/proto/stream.ts +0 -56
- package/src/proto/tasks.ts +0 -118
- package/src/proto/tools/global_analysis_tools.ts +0 -86
- package/src/proto/tools/space_mission_tools.ts +0 -60
- package/src/proto/vertexai.ts +0 -54
package/dist/esm/utils/llm.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.mjs","sources":["../../../src/utils/llm.ts"],"sourcesContent":["// src/utils/llm.ts\
|
|
1
|
+
{"version":3,"file":"llm.mjs","sources":["../../../src/utils/llm.ts"],"sourcesContent":["// src/utils/llm.ts\nimport { Providers } from '@/common';\n\nexport function isOpenAILike(provider?: string | Providers): boolean {\n if (provider == null) {\n return false;\n }\n return (\n [\n Providers.OPENAI,\n Providers.AZURE,\n Providers.OPENROUTER,\n Providers.XAI,\n Providers.DEEPSEEK,\n ] as string[]\n ).includes(provider);\n}\n\nexport function isGoogleLike(provider?: string | Providers): boolean {\n if (provider == null) {\n return false;\n }\n return ([Providers.GOOGLE, Providers.VERTEXAI] as string[]).includes(\n provider\n );\n}\n"],"names":[],"mappings":";;AAAA;AAGM,SAAU,YAAY,CAAC,QAA6B,EAAA;AACxD,IAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,QAAA,OAAO,KAAK;;IAEd,OACE;AACE,QAAA,SAAS,CAAC,MAAM;AAChB,QAAA,SAAS,CAAC,KAAK;AACf,QAAA,SAAS,CAAC,UAAU;AACpB,QAAA,SAAS,CAAC,GAAG;AACb,QAAA,SAAS,CAAC,QAAQ;AAErB,KAAA,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtB;AAEM,SAAU,YAAY,CAAC,QAA6B,EAAA;AACxD,IAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,QAAA,OAAO,KAAK;;AAEd,IAAA,OAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAc,CAAC,QAAQ,CAClE,QAAQ,CACT;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.mjs","sources":["../../../src/utils/misc.ts"],"sourcesContent":["export function isPresent(value: string | null | undefined): value is string {\
|
|
1
|
+
{"version":3,"file":"misc.mjs","sources":["../../../src/utils/misc.ts"],"sourcesContent":["export function isPresent(value: string | null | undefined): value is string {\n return value != null && value !== '';\n}\n\n/**\n * Unescapes a c-escaped string\n * @param str The string to unescape\n * @returns The unescaped string\n */\nconst unescapeString = (string: string): string =>\n string.replace(/\\\\(.)/g, (_, char) => {\n switch (char) {\n case 'n':\n return '\\n';\n case 't':\n return '\\t';\n case 'r':\n return '\\r';\n case '\"':\n return '\"';\n case '\\'':\n return '\\'';\n case '\\\\':\n return '\\\\';\n default:\n return char;\n }\n });\n\n/**\n * Recursively unescapes all string values in an object\n * @param obj The object to unescape\n * @returns The unescaped object\n */\nexport function unescapeObject(obj: unknown, key?: string): unknown {\n if (typeof obj === 'string') {\n let unescaped = unescapeString(obj);\n if (key === 'filePath' && unescaped.match(/^\"(.+)\"$/)) {\n unescaped = unescaped.substring(1, unescaped.length - 1);\n }\n return unescaped;\n }\n if (Array.isArray(obj)) {\n return obj.map((value) =>\n unescapeObject(value, key === 'contextPaths' ? 'filePath' : '')\n );\n }\n if (typeof obj === 'object' && obj !== null) {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n key,\n unescapeObject(value, key),\n ])\n );\n }\n return obj;\n}\n"],"names":[],"mappings":"AAAM,SAAU,SAAS,CAAC,KAAgC,EAAA;AACxD,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AACtC;AAEA;;;;AAIG;AACH,MAAM,cAAc,GAAG,CAAC,MAAc,KACpC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,KAAI;IACnC,QAAQ,IAAI;AACZ,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,GAAG;AACZ,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,IAAI;AACb,QAAA;AACE,YAAA,OAAO,IAAI;;AAEf,CAAC,CAAC;AAEJ;;;;AAIG;AACa,SAAA,cAAc,CAAC,GAAY,EAAE,GAAY,EAAA;AACvD,IAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,QAAA,IAAI,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC;QACnC,IAAI,GAAG,KAAK,UAAU,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACrD,YAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;;AAE1D,QAAA,OAAO,SAAS;;AAElB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,KACnB,cAAc,CAAC,KAAK,EAAE,GAAG,KAAK,cAAc,GAAG,UAAU,GAAG,EAAE,CAAC,CAChE;;IAEH,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;QAC3C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;YACxC,GAAG;AACH,YAAA,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;AAC3B,SAAA,CAAC,CACH;;AAEH,IAAA,OAAO,GAAG;AACZ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.mjs","sources":["../../../src/utils/run.ts"],"sourcesContent":["import { CallbackManagerForChainRun } from '@langchain/core/callbacks/manager';\
|
|
1
|
+
{"version":3,"file":"run.mjs","sources":["../../../src/utils/run.ts"],"sourcesContent":["import { CallbackManagerForChainRun } from '@langchain/core/callbacks/manager';\nimport {\n mergeConfigs,\n patchConfig,\n Runnable,\n RunnableConfig,\n} from '@langchain/core/runnables';\nimport { AsyncLocalStorageProviderSingleton } from '@langchain/core/singletons';\n\n/**\n * Delays the execution for a specified number of milliseconds.\n *\n * @param {number} ms - The number of milliseconds to delay.\n * @return {Promise<void>} A promise that resolves after the specified delay.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface RunnableCallableArgs extends Partial<any> {\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n func: (...args: any[]) => any;\n tags?: string[];\n trace?: boolean;\n recurse?: boolean;\n}\n\nexport class RunnableCallable<I = unknown, O = unknown> extends Runnable<I, O> {\n lc_namespace: string[] = ['langgraph'];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n func: (...args: any[]) => any;\n\n tags?: string[];\n\n config?: RunnableConfig;\n\n trace: boolean = true;\n\n recurse: boolean = true;\n\n constructor(fields: RunnableCallableArgs) {\n super();\n this.name = fields.name ?? fields.func.name;\n this.func = fields.func;\n this.config = fields.tags ? { tags: fields.tags } : undefined;\n this.trace = fields.trace ?? this.trace;\n this.recurse = fields.recurse ?? this.recurse;\n }\n\n protected async _tracedInvoke(\n input: I,\n config?: Partial<RunnableConfig>,\n runManager?: CallbackManagerForChainRun\n ): Promise<O> {\n return new Promise<O>((resolve, reject) => {\n const childConfig = patchConfig(config, {\n callbacks: runManager?.getChild(),\n });\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n childConfig,\n async () => {\n try {\n const output = await this.func(input, childConfig);\n resolve(output);\n } catch (e) {\n reject(e);\n }\n }\n );\n });\n }\n\n async invoke(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n options?: Partial<RunnableConfig> | undefined\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let returnValue: any;\n\n if (this.trace) {\n returnValue = await this._callWithConfig(\n this._tracedInvoke,\n input,\n mergeConfigs(this.config, options)\n );\n } else {\n returnValue = await this.func(input, mergeConfigs(this.config, options));\n }\n\n if (Runnable.isRunnable(returnValue) && this.recurse) {\n return await returnValue.invoke(input, options);\n }\n\n return returnValue;\n }\n}"],"names":[],"mappings":";;;AASA;;;;;AAKG;AACG,SAAU,KAAK,CAAC,EAAU,EAAA;AAC9B,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D;AAYM,MAAO,gBAA2C,SAAQ,QAAc,CAAA;AAC5E,IAAA,YAAY,GAAa,CAAC,WAAW,CAAC;;AAGtC,IAAA,IAAI;AAEJ,IAAA,IAAI;AAEJ,IAAA,MAAM;IAEN,KAAK,GAAY,IAAI;IAErB,OAAO,GAAY,IAAI;AAEvB,IAAA,WAAA,CAAY,MAA4B,EAAA;AACtC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,SAAS;QAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;QACvC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;;AAGrC,IAAA,MAAM,aAAa,CAC3B,KAAQ,EACR,MAAgC,EAChC,UAAuC,EAAA;QAEvC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,KAAI;AACxC,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE;AACtC,gBAAA,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE;AAClC,aAAA,CAAC;YACF,KAAK,kCAAkC,CAAC,aAAa,CACnD,WAAW,EACX,YAAW;AACT,gBAAA,IAAI;oBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;oBAClD,OAAO,CAAC,MAAM,CAAC;;gBACf,OAAO,CAAC,EAAE;oBACV,MAAM,CAAC,CAAC,CAAC;;AAEb,aAAC,CACF;AACH,SAAC,CAAC;;AAGJ,IAAA,MAAM,MAAM;;AAEV,IAAA,KAAU,EACV;;;;AAIA,QAAA,IAAI,WAAgB;AAEpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CACtC,IAAI,CAAC,aAAa,EAClB,KAAK,EACL,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CACnC;;aACI;AACL,YAAA,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;QAG1E,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACpD,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;;AAGjD,QAAA,OAAO,WAAW;;AAErB;;;;"}
|
package/dist/esm/utils/title.mjs
CHANGED
|
@@ -3,10 +3,10 @@ import { ChatPromptTemplate } from '@langchain/core/prompts';
|
|
|
3
3
|
import { RunnableLambda, RunnableSequence } from '@langchain/core/runnables';
|
|
4
4
|
import { ContentTypes } from '../common/enum.mjs';
|
|
5
5
|
|
|
6
|
-
const defaultTitlePrompt = `Analyze this conversation and provide:
|
|
7
|
-
1. The detected language of the conversation
|
|
8
|
-
2. A concise title in the detected language (5 words or less, no punctuation or quotation)
|
|
9
|
-
|
|
6
|
+
const defaultTitlePrompt = `Analyze this conversation and provide:
|
|
7
|
+
1. The detected language of the conversation
|
|
8
|
+
2. A concise title in the detected language (5 words or less, no punctuation or quotation)
|
|
9
|
+
|
|
10
10
|
{convo}`;
|
|
11
11
|
const titleSchema = z.object({
|
|
12
12
|
title: z
|
|
@@ -69,9 +69,9 @@ const createTitleRunnable = async (model, _titlePrompt) => {
|
|
|
69
69
|
},
|
|
70
70
|
}).withConfig({ runName: 'TitleGenerator' });
|
|
71
71
|
};
|
|
72
|
-
const defaultCompletionPrompt = `Provide a concise, 5-word-or-less title for the conversation, using title case conventions. Only return the title itself.
|
|
73
|
-
|
|
74
|
-
Conversation:
|
|
72
|
+
const defaultCompletionPrompt = `Provide a concise, 5-word-or-less title for the conversation, using title case conventions. Only return the title itself.
|
|
73
|
+
|
|
74
|
+
Conversation:
|
|
75
75
|
{convo}`;
|
|
76
76
|
const createCompletionTitleRunnable = async (model, titlePrompt) => {
|
|
77
77
|
const completionPrompt = ChatPromptTemplate.fromTemplate(titlePrompt ?? defaultCompletionPrompt).withConfig({ runName: 'CompletionTitlePrompt' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title.mjs","sources":["../../../src/utils/title.ts"],"sourcesContent":["import { z } from 'zod';\
|
|
1
|
+
{"version":3,"file":"title.mjs","sources":["../../../src/utils/title.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ChatPromptTemplate } from '@langchain/core/prompts';\nimport { RunnableLambda, RunnableSequence } from '@langchain/core/runnables';\nimport type { Runnable, RunnableConfig } from '@langchain/core/runnables';\nimport type { AIMessage } from '@langchain/core/messages';\nimport type * as t from '@/types';\nimport { ContentTypes } from '@/common';\n\nconst defaultTitlePrompt = `Analyze this conversation and provide:\n1. The detected language of the conversation\n2. A concise title in the detected language (5 words or less, no punctuation or quotation)\n\n{convo}`;\n\nconst titleSchema = z.object({\n title: z\n .string()\n .describe(\n 'A concise title for the conversation in 5 words or less, without punctuation or quotation'\n ),\n});\n\nconst combinedSchema = z.object({\n language: z.string().describe('The detected language of the conversation'),\n title: z\n .string()\n .describe(\n 'A concise title for the conversation in 5 words or less, without punctuation or quotation'\n ),\n});\n\nexport const createTitleRunnable = async (\n model: t.ChatModelInstance,\n _titlePrompt?: string\n): Promise<Runnable> => {\n // Disabled since this works fine\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /* @ts-ignore */\n const titleLLM = model.withStructuredOutput(titleSchema);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /* @ts-ignore */\n const combinedLLM = model.withStructuredOutput(combinedSchema);\n\n const titlePrompt = ChatPromptTemplate.fromTemplate(\n _titlePrompt ?? defaultTitlePrompt\n ).withConfig({ runName: 'TitlePrompt' });\n\n const titleOnlyInnerChain = RunnableSequence.from([titlePrompt, titleLLM]);\n const combinedInnerChain = RunnableSequence.from([titlePrompt, combinedLLM]);\n\n /** Wrap titleOnlyChain in RunnableLambda to create parent span */\n const titleOnlyChain = new RunnableLambda({\n func: async (\n input: { convo: string },\n config?: Partial<RunnableConfig>\n ): Promise<{ title: string }> => {\n return await titleOnlyInnerChain.invoke(input, config);\n },\n }).withConfig({ runName: 'TitleOnlyChain' });\n\n /** Wrap combinedChain in RunnableLambda to create parent span */\n const combinedChain = new RunnableLambda({\n func: async (\n input: { convo: string },\n config?: Partial<RunnableConfig>\n ): Promise<{ language: string; title: string }> => {\n return await combinedInnerChain.invoke(input, config);\n },\n }).withConfig({ runName: 'TitleLanguageChain' });\n\n /** Runnable to add default values if needed */\n const addDefaults = new RunnableLambda({\n func: (\n result: { language: string; title: string } | undefined\n ): { language: string; title: string } => ({\n language: result?.language ?? 'English',\n title: result?.title ?? '',\n }),\n }).withConfig({ runName: 'AddDefaults' });\n\n const combinedChainInner = RunnableSequence.from([\n combinedChain,\n addDefaults,\n ]);\n\n /** Wrap combinedChainWithDefaults in RunnableLambda to create parent span */\n const combinedChainWithDefaults = new RunnableLambda({\n func: async (\n input: { convo: string },\n config?: Partial<RunnableConfig>\n ): Promise<{ language: string; title: string }> => {\n return await combinedChainInner.invoke(input, config);\n },\n }).withConfig({ runName: 'CombinedChainWithDefaults' });\n\n return new RunnableLambda({\n func: async (\n input: {\n convo: string;\n inputText: string;\n skipLanguage: boolean;\n },\n config?: Partial<RunnableConfig>\n ): Promise<{ language: string; title: string } | { title: string }> => {\n const invokeInput = { convo: input.convo };\n\n if (input.skipLanguage) {\n return (await titleOnlyChain.invoke(invokeInput, config)) as {\n title: string;\n };\n }\n\n return await combinedChainWithDefaults.invoke(invokeInput, config);\n },\n }).withConfig({ runName: 'TitleGenerator' });\n};\n\nconst defaultCompletionPrompt = `Provide a concise, 5-word-or-less title for the conversation, using title case conventions. Only return the title itself.\n\nConversation:\n{convo}`;\n\nexport const createCompletionTitleRunnable = async (\n model: t.ChatModelInstance,\n titlePrompt?: string\n): Promise<Runnable> => {\n const completionPrompt = ChatPromptTemplate.fromTemplate(\n titlePrompt ?? defaultCompletionPrompt\n ).withConfig({ runName: 'CompletionTitlePrompt' });\n\n /** Runnable to extract content from model response */\n const extractContent = new RunnableLambda({\n func: (response: AIMessage): { title: string } => {\n let content = '';\n if (typeof response.content === 'string') {\n content = response.content;\n } else if (Array.isArray(response.content)) {\n content = response.content\n .filter(\n (part): part is { type: ContentTypes.TEXT; text: string } =>\n part.type === ContentTypes.TEXT\n )\n .map((part) => part.text)\n .join('');\n }\n return { title: content.trim() };\n },\n }).withConfig({ runName: 'ExtractTitle' });\n\n const innerChain = RunnableSequence.from([\n completionPrompt,\n model,\n extractContent,\n ]);\n\n /** Wrap in RunnableLambda to create a parent span for LangFuse */\n return new RunnableLambda({\n func: async (\n input: { convo: string },\n config?: Partial<RunnableConfig>\n ): Promise<{ title: string }> => {\n return await innerChain.invoke(input, config);\n },\n }).withConfig({ runName: 'CompletionTitleChain' });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,6 @@ export declare enum Providers {
|
|
|
57
57
|
ANTHROPIC = "anthropic",
|
|
58
58
|
MISTRALAI = "mistralai",
|
|
59
59
|
MISTRAL = "mistral",
|
|
60
|
-
OLLAMA = "ollama",
|
|
61
60
|
GOOGLE = "google",
|
|
62
61
|
AZURE = "azureOpenAI",
|
|
63
62
|
DEEPSEEK = "deepseek",
|
|
@@ -126,5 +125,5 @@ export declare enum TitleMethod {
|
|
|
126
125
|
}
|
|
127
126
|
export declare enum EnvVar {
|
|
128
127
|
CODE_API_KEY = "CODE_EXECUTOR_API_KEY",
|
|
129
|
-
CODE_BASEURL = "
|
|
128
|
+
CODE_BASEURL = "CODE_EXECUTOR_BASEURL"
|
|
130
129
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized ChatBedrockConverse wrapper that fixes contentBlockIndex conflicts
|
|
3
|
+
*
|
|
4
|
+
* Bedrock sends the same contentBlockIndex for both text and tool_use content blocks,
|
|
5
|
+
* causing LangChain's merge logic to fail with "field[contentBlockIndex] already exists"
|
|
6
|
+
* errors. This wrapper simply strips contentBlockIndex from response_metadata to avoid
|
|
7
|
+
* the conflict.
|
|
8
|
+
*
|
|
9
|
+
* The contentBlockIndex field is only used internally by Bedrock's streaming protocol
|
|
10
|
+
* and isn't needed by application logic - the index field on tool_call_chunks serves
|
|
11
|
+
* the purpose of tracking tool call ordering.
|
|
12
|
+
*/
|
|
13
|
+
import { ChatBedrockConverse } from '@langchain/aws';
|
|
14
|
+
import type { ChatBedrockConverseInput } from '@langchain/aws';
|
|
15
|
+
import type { BaseMessage } from '@langchain/core/messages';
|
|
16
|
+
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
17
|
+
import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
|
|
18
|
+
export declare class CustomChatBedrockConverse extends ChatBedrockConverse {
|
|
19
|
+
constructor(fields?: ChatBedrockConverseInput);
|
|
20
|
+
static lc_name(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Override _streamResponseChunks to strip contentBlockIndex from response_metadata
|
|
23
|
+
* This prevents LangChain's merge conflicts when the same index is used for
|
|
24
|
+
* different content types (text vs tool calls)
|
|
25
|
+
*/
|
|
26
|
+
_streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if contentBlockIndex exists at any level in the object
|
|
29
|
+
*/
|
|
30
|
+
private hasContentBlockIndex;
|
|
31
|
+
/**
|
|
32
|
+
* Recursively remove contentBlockIndex from all levels of an object
|
|
33
|
+
*/
|
|
34
|
+
private removeContentBlockIndex;
|
|
35
|
+
}
|
|
36
|
+
export type { ChatBedrockConverseInput };
|
|
@@ -7,8 +7,18 @@ import type { GeminiGenerationConfig } from '@langchain/google-common';
|
|
|
7
7
|
import type { GoogleClientOptions } from '@/types';
|
|
8
8
|
export declare class CustomChatGoogleGenerativeAI extends ChatGoogleGenerativeAI {
|
|
9
9
|
thinkingConfig?: GeminiGenerationConfig['thinkingConfig'];
|
|
10
|
+
/**
|
|
11
|
+
* Override to add gemini-3 model support for multimodal and function calling thought signatures
|
|
12
|
+
*/
|
|
13
|
+
get _isMultimodalModel(): boolean;
|
|
10
14
|
constructor(fields: GoogleClientOptions);
|
|
11
15
|
static lc_name(): 'IllumaGoogleGenerativeAI';
|
|
16
|
+
/**
|
|
17
|
+
* Helper function to convert Gemini API usage metadata to LangChain format
|
|
18
|
+
* Includes support for cached tokens and tier-based tracking for gemini-3-pro-preview
|
|
19
|
+
*/
|
|
20
|
+
private _convertToUsageMetadata;
|
|
12
21
|
invocationParams(options?: this['ParsedCallOptions']): Omit<GenerateContentRequest, 'contents'>;
|
|
22
|
+
_generate(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): Promise<import('@langchain/core/outputs').ChatResult>;
|
|
13
23
|
_streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
14
24
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { CodeExecutionTool, FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool, GoogleSearchRetrievalTool } from '@google/generative-ai';
|
|
2
2
|
import { BindToolsInput } from '@langchain/core/language_models/chat_models';
|
|
3
|
-
|
|
3
|
+
/** New GoogleSearch tool for Gemini 2.0+ models */
|
|
4
|
+
export interface GoogleSearchTool {
|
|
5
|
+
googleSearch: Record<string, never>;
|
|
6
|
+
}
|
|
7
|
+
export type GoogleGenerativeAIToolType = BindToolsInput | GoogleGenerativeAIFunctionDeclarationsTool | CodeExecutionTool | GoogleSearchRetrievalTool | GoogleSearchTool;
|
|
4
8
|
/** Enum for content modality types */
|
|
5
9
|
declare enum Modality {
|
|
6
10
|
MODALITY_UNSPECIFIED = "MODALITY_UNSPECIFIED",
|
|
@@ -15,6 +19,12 @@ interface ModalityTokenCount {
|
|
|
15
19
|
modality: Modality;
|
|
16
20
|
tokenCount: number;
|
|
17
21
|
}
|
|
22
|
+
/** Interface for input token details with cache and tier tracking */
|
|
23
|
+
export interface InputTokenDetails {
|
|
24
|
+
cache_read?: number;
|
|
25
|
+
over_200k?: number;
|
|
26
|
+
cache_read_over_200k?: number;
|
|
27
|
+
}
|
|
18
28
|
/** Main interface for Gemini API usage metadata */
|
|
19
29
|
export interface GeminiApiUsageMetadata {
|
|
20
30
|
promptTokenCount?: number;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { POSSIBLE_ROLES, type Part, type Content, type EnhancedGenerateContentResponse, type FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool } from '@google/generative-ai';
|
|
2
2
|
import { BaseMessage, UsageMetadata } from '@langchain/core/messages';
|
|
3
3
|
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
4
|
+
import type { ChatResult } from '@langchain/core/outputs';
|
|
4
5
|
import { GoogleGenerativeAIToolType } from '../types';
|
|
6
|
+
export declare const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY = "__gemini_function_call_thought_signatures__";
|
|
7
|
+
/**
|
|
8
|
+
* Executes a function immediately and returns its result.
|
|
9
|
+
* Functional utility similar to an Immediately Invoked Function Expression (IIFE).
|
|
10
|
+
* @param fn The function to execute.
|
|
11
|
+
* @returns The result of invoking fn.
|
|
12
|
+
*/
|
|
13
|
+
export declare const iife: <T>(fn: () => T) => T;
|
|
5
14
|
export declare function getMessageAuthor(message: BaseMessage): string;
|
|
6
15
|
/**
|
|
7
16
|
* Maps a message type to a Google Generative AI chat author.
|
|
@@ -10,10 +19,16 @@ export declare function getMessageAuthor(message: BaseMessage): string;
|
|
|
10
19
|
* @returns The message type mapped to a Google Generative AI chat author.
|
|
11
20
|
*/
|
|
12
21
|
export declare function convertAuthorToRole(author: string): (typeof POSSIBLE_ROLES)[number];
|
|
13
|
-
export declare function convertMessageContentToParts(message: BaseMessage, isMultimodalModel: boolean, previousMessages: BaseMessage[]): Part[];
|
|
14
|
-
export declare function convertBaseMessagesToContent(messages: BaseMessage[], isMultimodalModel: boolean, convertSystemMessageToHumanContent?: boolean): Content[] | undefined;
|
|
22
|
+
export declare function convertMessageContentToParts(message: BaseMessage, isMultimodalModel: boolean, previousMessages: BaseMessage[], model?: string): Part[];
|
|
23
|
+
export declare function convertBaseMessagesToContent(messages: BaseMessage[], isMultimodalModel: boolean, convertSystemMessageToHumanContent?: boolean, model?: string): Content[] | undefined;
|
|
15
24
|
export declare function convertResponseContentToChatGenerationChunk(response: EnhancedGenerateContentResponse, extra: {
|
|
16
25
|
usageMetadata?: UsageMetadata | undefined;
|
|
17
26
|
index: number;
|
|
18
27
|
}): ChatGenerationChunk | null;
|
|
28
|
+
/**
|
|
29
|
+
* Maps a Google GenerateContentResult to a LangChain ChatResult
|
|
30
|
+
*/
|
|
31
|
+
export declare function mapGenerateContentResultToChatResult(response: EnhancedGenerateContentResponse, extra?: {
|
|
32
|
+
usageMetadata: UsageMetadata | undefined;
|
|
33
|
+
}): ChatResult;
|
|
19
34
|
export declare function convertToGenerativeAITools(tools: GoogleGenerativeAIToolType[]): GoogleGenerativeAIFunctionDeclarationsTool[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolCall } from '@langchain/core/messages/tool';
|
|
2
|
+
import { END, Command, MessagesAnnotation } from '@langchain/langgraph';
|
|
2
3
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
3
4
|
import type { BaseMessage } from '@langchain/core/messages';
|
|
4
5
|
import type * as t from '@/types';
|
|
@@ -8,6 +9,7 @@ export declare class ToolNode<T = any> extends RunnableCallable<T, T> {
|
|
|
8
9
|
private toolMap;
|
|
9
10
|
private loadRuntimeTools?;
|
|
10
11
|
handleToolErrors: boolean;
|
|
12
|
+
trace: boolean;
|
|
11
13
|
toolCallStepIds?: Map<string, string>;
|
|
12
14
|
errorHandler?: t.ToolNodeConstructorParams['errorHandler'];
|
|
13
15
|
private toolUsageCount;
|
|
@@ -17,6 +19,12 @@ export declare class ToolNode<T = any> extends RunnableCallable<T, T> {
|
|
|
17
19
|
* @returns A ReadonlyMap where keys are tool names and values are their usage counts.
|
|
18
20
|
*/
|
|
19
21
|
getToolUsageCounts(): ReadonlyMap<string, number>;
|
|
22
|
+
/**
|
|
23
|
+
* Runs a single tool call with error handling
|
|
24
|
+
*/
|
|
25
|
+
protected runTool(call: ToolCall, config: RunnableConfig): Promise<BaseMessage | Command>;
|
|
20
26
|
protected run(input: any, config: RunnableConfig): Promise<T>;
|
|
27
|
+
private isSendInput;
|
|
28
|
+
private isMessagesState;
|
|
21
29
|
}
|
|
22
30
|
export declare function toolsCondition<T extends string>(state: BaseMessage[] | typeof MessagesAnnotation.State, toolNode: T, invokedToolIds?: Set<string>): T | typeof END;
|
|
@@ -566,6 +566,8 @@ export type ProcessSourcesFields = {
|
|
|
566
566
|
news: boolean;
|
|
567
567
|
proMode: boolean;
|
|
568
568
|
onGetHighlights: SearchToolConfig['onGetHighlights'];
|
|
569
|
+
/** Skip scraping if content was already extracted directly (e.g., direct URL extraction) */
|
|
570
|
+
skipScraping?: boolean;
|
|
569
571
|
};
|
|
570
572
|
export type SearchToolSchema = z.ZodObject<{
|
|
571
573
|
query: z.ZodString;
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { ChatOllama } from '@langchain/ollama';
|
|
2
1
|
import { ChatMistralAI } from '@langchain/mistralai';
|
|
3
|
-
import { ChatBedrockConverse } from '@langchain/aws';
|
|
4
2
|
import type { BindToolsInput, BaseChatModelParams } from '@langchain/core/language_models/chat_models';
|
|
5
3
|
import type { OpenAIChatInput, ChatOpenAIFields, AzureOpenAIInput, ClientOptions as OAIClientOptions } from '@langchain/openai';
|
|
6
4
|
import type { GoogleGenerativeAIChatInput } from '@langchain/google-genai';
|
|
@@ -14,11 +12,11 @@ import type { RequestOptions } from '@google/generative-ai';
|
|
|
14
12
|
import type { StructuredTool } from '@langchain/core/tools';
|
|
15
13
|
import type { AnthropicInput } from '@langchain/anthropic';
|
|
16
14
|
import type { Runnable } from '@langchain/core/runnables';
|
|
17
|
-
import type { ChatOllamaInput } from '@langchain/ollama';
|
|
18
15
|
import type { OpenAI as OpenAIClient } from 'openai';
|
|
19
16
|
import type { ChatXAIInput } from '@langchain/xai';
|
|
20
17
|
import { AzureChatOpenAI, ChatDeepSeek, ChatOpenAI, ChatXAI } from '@/llm/openai';
|
|
21
18
|
import { CustomChatGoogleGenerativeAI } from '@/llm/google';
|
|
19
|
+
import { CustomChatBedrockConverse } from '@/llm/bedrock';
|
|
22
20
|
import { CustomAnthropic } from '@/llm/anthropic';
|
|
23
21
|
import { ChatOpenRouter } from '@/llm/openrouter';
|
|
24
22
|
import { ChatVertexAI } from '@/llm/vertexai';
|
|
@@ -39,7 +37,6 @@ export type AnthropicReasoning = {
|
|
|
39
37
|
thinkingBudget?: number;
|
|
40
38
|
};
|
|
41
39
|
export type OpenAIClientOptions = ChatOpenAIFields;
|
|
42
|
-
export type OllamaClientOptions = ChatOllamaInput;
|
|
43
40
|
export type AnthropicClientOptions = AnthropicInput;
|
|
44
41
|
export type MistralAIClientOptions = ChatMistralAIInput;
|
|
45
42
|
export type VertexAIClientOptions = ChatVertexAIInput & {
|
|
@@ -57,7 +54,7 @@ export type GoogleClientOptions = GoogleGenerativeAIChatInput & {
|
|
|
57
54
|
};
|
|
58
55
|
export type DeepSeekClientOptions = ChatDeepSeekCallOptions;
|
|
59
56
|
export type XAIClientOptions = ChatXAIInput;
|
|
60
|
-
export type ClientOptions = OpenAIClientOptions | AzureClientOptions |
|
|
57
|
+
export type ClientOptions = OpenAIClientOptions | AzureClientOptions | AnthropicClientOptions | MistralAIClientOptions | VertexAIClientOptions | BedrockConverseClientOptions | GoogleClientOptions | DeepSeekClientOptions | XAIClientOptions;
|
|
61
58
|
export type SharedLLMConfig = {
|
|
62
59
|
provider: Providers;
|
|
63
60
|
_lc_stream_delay?: number;
|
|
@@ -72,7 +69,6 @@ export type LLMConfig = SharedLLMConfig & ClientOptions & {
|
|
|
72
69
|
export type ProviderOptionsMap = {
|
|
73
70
|
[Providers.AZURE]: AzureClientOptions;
|
|
74
71
|
[Providers.OPENAI]: OpenAIClientOptions;
|
|
75
|
-
[Providers.OLLAMA]: OllamaClientOptions;
|
|
76
72
|
[Providers.GOOGLE]: GoogleClientOptions;
|
|
77
73
|
[Providers.VERTEXAI]: VertexAIClientOptions;
|
|
78
74
|
[Providers.DEEPSEEK]: DeepSeekClientOptions;
|
|
@@ -86,7 +82,6 @@ export type ProviderOptionsMap = {
|
|
|
86
82
|
export type ChatModelMap = {
|
|
87
83
|
[Providers.XAI]: ChatXAI;
|
|
88
84
|
[Providers.OPENAI]: ChatOpenAI;
|
|
89
|
-
[Providers.OLLAMA]: ChatOllama;
|
|
90
85
|
[Providers.AZURE]: AzureChatOpenAI;
|
|
91
86
|
[Providers.DEEPSEEK]: ChatDeepSeek;
|
|
92
87
|
[Providers.VERTEXAI]: ChatVertexAI;
|
|
@@ -94,7 +89,7 @@ export type ChatModelMap = {
|
|
|
94
89
|
[Providers.MISTRALAI]: ChatMistralAI;
|
|
95
90
|
[Providers.MISTRAL]: ChatMistralAI;
|
|
96
91
|
[Providers.OPENROUTER]: ChatOpenRouter;
|
|
97
|
-
[Providers.BEDROCK]:
|
|
92
|
+
[Providers.BEDROCK]: CustomChatBedrockConverse;
|
|
98
93
|
[Providers.GOOGLE]: CustomChatGoogleGenerativeAI;
|
|
99
94
|
};
|
|
100
95
|
export type ChatModelConstructorMap = {
|
|
@@ -24,7 +24,7 @@ export type ToolNodeOptions = {
|
|
|
24
24
|
handleToolErrors?: boolean;
|
|
25
25
|
loadRuntimeTools?: ToolRefGenerator;
|
|
26
26
|
toolCallStepIds?: Map<string, string>;
|
|
27
|
-
errorHandler?: (data: ToolErrorData, metadata?: Record<string, unknown>) => void
|
|
27
|
+
errorHandler?: (data: ToolErrorData, metadata?: Record<string, unknown>) => Promise<void>;
|
|
28
28
|
};
|
|
29
29
|
export type ToolNodeConstructorParams = ToolRefs & ToolNodeOptions;
|
|
30
30
|
export type ToolEndEvent = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "illuma-agents",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"main": "./dist/cjs/main.cjs",
|
|
5
5
|
"module": "./dist/esm/main.mjs",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
"description": "Illuma AI Agents Library",
|
|
16
16
|
"author": "Varun Muppidi",
|
|
17
17
|
"license": "MIT",
|
|
18
|
+
"licenses": [
|
|
19
|
+
{
|
|
20
|
+
"type": "MIT",
|
|
21
|
+
"url": "https://github.com/danny-avila/agents/blob/main/LICENSE"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
18
24
|
"packageManager": "npm@10.5.2",
|
|
19
25
|
"engines": {
|
|
20
26
|
"node": ">=14.0.0"
|
|
@@ -28,7 +34,7 @@
|
|
|
28
34
|
"scripts": {
|
|
29
35
|
"prepare": "node husky-setup.js",
|
|
30
36
|
"prepublishOnly": "npm run build",
|
|
31
|
-
"build": "
|
|
37
|
+
"build": "set NODE_ENV=production && rollup -c && tsc -p tsconfig.build.json",
|
|
32
38
|
"build:dev": "rollup -c",
|
|
33
39
|
"start": "node dist/esm/main.js",
|
|
34
40
|
"clean": "node ./config/clean.js",
|
|
@@ -48,6 +54,8 @@
|
|
|
48
54
|
"tool": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/tools.ts --provider 'bedrock' --name 'Jo' --location 'New York, NY'",
|
|
49
55
|
"search": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/search.ts --provider 'bedrock' --name 'Jo' --location 'New York, NY'",
|
|
50
56
|
"ant_web_search": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/ant_web_search.ts --name 'Jo' --location 'New York, NY'",
|
|
57
|
+
"ant_web_search_edge_case": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/ant_web_search_edge_case.ts --name 'Jo' --location 'New York, NY'",
|
|
58
|
+
"ant_web_search_error_edge_case": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/ant_web_search_error_edge_case.ts --name 'Jo' --location 'New York, NY'",
|
|
51
59
|
"abort": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/abort.ts --provider 'openAI' --name 'Jo' --location 'New York, NY'",
|
|
52
60
|
"start:cli2": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli2.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
|
|
53
61
|
"multi-agent-test": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/multi-agent-test.ts",
|
|
@@ -98,7 +106,6 @@
|
|
|
98
106
|
"@langchain/google-vertexai": "^0.2.18",
|
|
99
107
|
"@langchain/langgraph": "^0.4.9",
|
|
100
108
|
"@langchain/mistralai": "^0.2.1",
|
|
101
|
-
"@langchain/ollama": "^0.2.3",
|
|
102
109
|
"@langchain/openai": "0.5.18",
|
|
103
110
|
"@langchain/textsplitters": "^0.1.0",
|
|
104
111
|
"@langchain/xai": "^0.0.3",
|
|
@@ -125,27 +132,24 @@
|
|
|
125
132
|
"@rollup/plugin-commonjs": "^28.0.3",
|
|
126
133
|
"@rollup/plugin-json": "^6.1.0",
|
|
127
134
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
128
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
129
135
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
130
136
|
"@swc/core": "^1.6.13",
|
|
131
|
-
"@types/jest": "^
|
|
137
|
+
"@types/jest": "^30.0.0",
|
|
132
138
|
"@types/node": "^20.14.11",
|
|
133
139
|
"@types/node-fetch": "^2.6.13",
|
|
134
140
|
"@types/yargs-parser": "^21.0.3",
|
|
135
141
|
"@typescript-eslint/eslint-plugin": "^8.24.0",
|
|
136
142
|
"@typescript-eslint/parser": "^8.24.0",
|
|
137
|
-
"
|
|
138
|
-
"eslint": "^9.31.0",
|
|
143
|
+
"eslint": "^9.39.1",
|
|
139
144
|
"eslint-import-resolver-typescript": "^3.7.0",
|
|
140
145
|
"eslint-plugin-import": "^2.31.0",
|
|
141
146
|
"husky": "^9.1.7",
|
|
142
|
-
"jest": "^
|
|
147
|
+
"jest": "^30.2.0",
|
|
143
148
|
"lint-staged": "^15.2.7",
|
|
144
|
-
"prettier": "^3.
|
|
149
|
+
"prettier": "^3.6.2",
|
|
145
150
|
"rollup": "^4.34.6",
|
|
146
151
|
"rollup-plugin-cleandir": "^2.0.0",
|
|
147
|
-
"
|
|
148
|
-
"ts-jest": "^29.3.1",
|
|
152
|
+
"ts-jest": "^29.4.5",
|
|
149
153
|
"ts-node": "^10.9.2",
|
|
150
154
|
"tsc-alias": "^1.8.10",
|
|
151
155
|
"tsconfig-paths": "^4.2.0",
|
package/src/common/enum.ts
CHANGED
|
@@ -77,7 +77,6 @@ export enum Providers {
|
|
|
77
77
|
ANTHROPIC = 'anthropic',
|
|
78
78
|
MISTRALAI = 'mistralai',
|
|
79
79
|
MISTRAL = 'mistral',
|
|
80
|
-
OLLAMA = 'ollama',
|
|
81
80
|
GOOGLE = 'google',
|
|
82
81
|
AZURE = 'azureOpenAI',
|
|
83
82
|
DEEPSEEK = 'deepseek',
|
|
@@ -173,5 +172,5 @@ export enum TitleMethod {
|
|
|
173
172
|
|
|
174
173
|
export enum EnvVar {
|
|
175
174
|
CODE_API_KEY = 'CODE_EXECUTOR_API_KEY',
|
|
176
|
-
CODE_BASEURL = '
|
|
175
|
+
CODE_BASEURL = 'CODE_EXECUTOR_BASEURL',
|
|
177
176
|
}
|
package/src/common/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// src/common/index.ts
|
|
1
|
+
// src/common/index.ts
|
|
2
2
|
export * from './enum';
|
package/src/instrumentation.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
2
|
-
import { LangfuseSpanProcessor } from '@langfuse/otel';
|
|
3
|
-
import { isPresent } from '@/utils/misc';
|
|
4
|
-
|
|
5
|
-
if (
|
|
6
|
-
isPresent(process.env.LANGFUSE_SECRET_KEY) &&
|
|
7
|
-
isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
|
|
8
|
-
isPresent(process.env.LANGFUSE_BASE_URL)
|
|
9
|
-
) {
|
|
10
|
-
const langfuseSpanProcessor = new LangfuseSpanProcessor({
|
|
11
|
-
publicKey: process.env.LANGFUSE_PUBLIC_KEY,
|
|
12
|
-
secretKey: process.env.LANGFUSE_SECRET_KEY,
|
|
13
|
-
baseUrl: process.env.LANGFUSE_BASE_URL,
|
|
14
|
-
environment: process.env.NODE_ENV ?? 'development',
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const sdk = new NodeSDK({
|
|
18
|
-
spanProcessors: [langfuseSpanProcessor],
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
sdk.start();
|
|
22
|
-
}
|
|
1
|
+
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
2
|
+
import { LangfuseSpanProcessor } from '@langfuse/otel';
|
|
3
|
+
import { isPresent } from '@/utils/misc';
|
|
4
|
+
|
|
5
|
+
if (
|
|
6
|
+
isPresent(process.env.LANGFUSE_SECRET_KEY) &&
|
|
7
|
+
isPresent(process.env.LANGFUSE_PUBLIC_KEY) &&
|
|
8
|
+
isPresent(process.env.LANGFUSE_BASE_URL)
|
|
9
|
+
) {
|
|
10
|
+
const langfuseSpanProcessor = new LangfuseSpanProcessor({
|
|
11
|
+
publicKey: process.env.LANGFUSE_PUBLIC_KEY,
|
|
12
|
+
secretKey: process.env.LANGFUSE_SECRET_KEY,
|
|
13
|
+
baseUrl: process.env.LANGFUSE_BASE_URL,
|
|
14
|
+
environment: process.env.NODE_ENV ?? 'development',
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const sdk = new NodeSDK({
|
|
18
|
+
spanProcessors: [langfuseSpanProcessor],
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
sdk.start();
|
|
22
|
+
}
|