illuma-agents 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/cjs/common/enum.cjs +163 -0
- package/dist/cjs/common/enum.cjs.map +1 -0
- package/dist/cjs/events.cjs +143 -0
- package/dist/cjs/events.cjs.map +1 -0
- package/dist/cjs/graphs/Graph.cjs +581 -0
- package/dist/cjs/graphs/Graph.cjs.map +1 -0
- package/dist/cjs/instrumentation.cjs +21 -0
- package/dist/cjs/instrumentation.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/index.cjs +292 -0
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/types.cjs +50 -0
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +553 -0
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +218 -0
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -0
- 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/fake.cjs +97 -0
- package/dist/cjs/llm/fake.cjs.map +1 -0
- package/dist/cjs/llm/google/index.cjs +147 -0
- package/dist/cjs/llm/google/index.cjs.map +1 -0
- package/dist/cjs/llm/google/utils/common.cjs +490 -0
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
- package/dist/cjs/llm/ollama/index.cjs +70 -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 +613 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -0
- package/dist/cjs/llm/openai/utils/index.cjs +677 -0
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
- package/dist/cjs/llm/openrouter/index.cjs +29 -0
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +47 -0
- package/dist/cjs/llm/providers.cjs.map +1 -0
- package/dist/cjs/llm/text.cjs +69 -0
- package/dist/cjs/llm/text.cjs.map +1 -0
- package/dist/cjs/llm/vertexai/index.cjs +330 -0
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
- package/dist/cjs/main.cjs +127 -0
- package/dist/cjs/main.cjs.map +1 -0
- package/dist/cjs/messages/core.cjs +359 -0
- package/dist/cjs/messages/core.cjs.map +1 -0
- package/dist/cjs/messages/format.cjs +455 -0
- package/dist/cjs/messages/format.cjs.map +1 -0
- package/dist/cjs/messages/ids.cjs +23 -0
- package/dist/cjs/messages/ids.cjs.map +1 -0
- package/dist/cjs/messages/prune.cjs +398 -0
- package/dist/cjs/messages/prune.cjs.map +1 -0
- package/dist/cjs/run.cjs +264 -0
- package/dist/cjs/run.cjs.map +1 -0
- package/dist/cjs/splitStream.cjs +210 -0
- package/dist/cjs/splitStream.cjs.map +1 -0
- package/dist/cjs/stream.cjs +504 -0
- package/dist/cjs/stream.cjs.map +1 -0
- package/dist/cjs/tools/CodeExecutor.cjs +192 -0
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +125 -0
- package/dist/cjs/tools/ToolNode.cjs.map +1 -0
- package/dist/cjs/tools/handlers.cjs +250 -0
- package/dist/cjs/tools/handlers.cjs.map +1 -0
- package/dist/cjs/tools/search/anthropic.cjs +40 -0
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
- package/dist/cjs/tools/search/content.cjs +140 -0
- package/dist/cjs/tools/search/content.cjs.map +1 -0
- package/dist/cjs/tools/search/firecrawl.cjs +179 -0
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -0
- package/dist/cjs/tools/search/format.cjs +203 -0
- package/dist/cjs/tools/search/format.cjs.map +1 -0
- package/dist/cjs/tools/search/highlights.cjs +245 -0
- package/dist/cjs/tools/search/highlights.cjs.map +1 -0
- package/dist/cjs/tools/search/rerankers.cjs +174 -0
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -0
- 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 +561 -0
- package/dist/cjs/tools/search/search.cjs.map +1 -0
- package/dist/cjs/tools/search/serper-scraper.cjs +132 -0
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -0
- package/dist/cjs/tools/search/tool.cjs +331 -0
- package/dist/cjs/tools/search/tool.cjs.map +1 -0
- package/dist/cjs/tools/search/utils.cjs +66 -0
- package/dist/cjs/tools/search/utils.cjs.map +1 -0
- package/dist/cjs/utils/graph.cjs +16 -0
- package/dist/cjs/utils/graph.cjs.map +1 -0
- package/dist/cjs/utils/llm.cjs +28 -0
- package/dist/cjs/utils/llm.cjs.map +1 -0
- package/dist/cjs/utils/misc.cjs +56 -0
- package/dist/cjs/utils/misc.cjs.map +1 -0
- package/dist/cjs/utils/run.cjs +69 -0
- package/dist/cjs/utils/run.cjs.map +1 -0
- package/dist/cjs/utils/title.cjs +111 -0
- package/dist/cjs/utils/title.cjs.map +1 -0
- package/dist/cjs/utils/tokens.cjs +65 -0
- package/dist/cjs/utils/tokens.cjs.map +1 -0
- package/dist/esm/common/enum.mjs +163 -0
- package/dist/esm/common/enum.mjs.map +1 -0
- package/dist/esm/events.mjs +135 -0
- package/dist/esm/events.mjs.map +1 -0
- package/dist/esm/graphs/Graph.mjs +578 -0
- package/dist/esm/graphs/Graph.mjs.map +1 -0
- package/dist/esm/instrumentation.mjs +19 -0
- package/dist/esm/instrumentation.mjs.map +1 -0
- package/dist/esm/llm/anthropic/index.mjs +290 -0
- package/dist/esm/llm/anthropic/index.mjs.map +1 -0
- package/dist/esm/llm/anthropic/types.mjs +48 -0
- package/dist/esm/llm/anthropic/types.mjs.map +1 -0
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +550 -0
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -0
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +216 -0
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -0
- 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/fake.mjs +94 -0
- package/dist/esm/llm/fake.mjs.map +1 -0
- package/dist/esm/llm/google/index.mjs +145 -0
- package/dist/esm/llm/google/index.mjs.map +1 -0
- package/dist/esm/llm/google/utils/common.mjs +484 -0
- package/dist/esm/llm/google/utils/common.mjs.map +1 -0
- package/dist/esm/llm/ollama/index.mjs +68 -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 +604 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -0
- package/dist/esm/llm/openai/utils/index.mjs +671 -0
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
- package/dist/esm/llm/openrouter/index.mjs +27 -0
- package/dist/esm/llm/openrouter/index.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +43 -0
- package/dist/esm/llm/providers.mjs.map +1 -0
- package/dist/esm/llm/text.mjs +67 -0
- package/dist/esm/llm/text.mjs.map +1 -0
- package/dist/esm/llm/vertexai/index.mjs +328 -0
- package/dist/esm/llm/vertexai/index.mjs.map +1 -0
- package/dist/esm/main.mjs +20 -0
- package/dist/esm/main.mjs.map +1 -0
- package/dist/esm/messages/core.mjs +351 -0
- package/dist/esm/messages/core.mjs.map +1 -0
- package/dist/esm/messages/format.mjs +447 -0
- package/dist/esm/messages/format.mjs.map +1 -0
- package/dist/esm/messages/ids.mjs +21 -0
- package/dist/esm/messages/ids.mjs.map +1 -0
- package/dist/esm/messages/prune.mjs +393 -0
- package/dist/esm/messages/prune.mjs.map +1 -0
- package/dist/esm/run.mjs +261 -0
- package/dist/esm/run.mjs.map +1 -0
- package/dist/esm/splitStream.mjs +207 -0
- package/dist/esm/splitStream.mjs.map +1 -0
- package/dist/esm/stream.mjs +500 -0
- package/dist/esm/stream.mjs.map +1 -0
- package/dist/esm/tools/CodeExecutor.mjs +188 -0
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +122 -0
- package/dist/esm/tools/ToolNode.mjs.map +1 -0
- package/dist/esm/tools/handlers.mjs +245 -0
- package/dist/esm/tools/handlers.mjs.map +1 -0
- package/dist/esm/tools/search/anthropic.mjs +37 -0
- package/dist/esm/tools/search/anthropic.mjs.map +1 -0
- package/dist/esm/tools/search/content.mjs +119 -0
- package/dist/esm/tools/search/content.mjs.map +1 -0
- package/dist/esm/tools/search/firecrawl.mjs +176 -0
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -0
- package/dist/esm/tools/search/format.mjs +201 -0
- package/dist/esm/tools/search/format.mjs.map +1 -0
- package/dist/esm/tools/search/highlights.mjs +243 -0
- package/dist/esm/tools/search/highlights.mjs.map +1 -0
- package/dist/esm/tools/search/rerankers.mjs +168 -0
- package/dist/esm/tools/search/rerankers.mjs.map +1 -0
- 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 +558 -0
- package/dist/esm/tools/search/search.mjs.map +1 -0
- package/dist/esm/tools/search/serper-scraper.mjs +129 -0
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -0
- package/dist/esm/tools/search/tool.mjs +329 -0
- package/dist/esm/tools/search/tool.mjs.map +1 -0
- package/dist/esm/tools/search/utils.mjs +61 -0
- package/dist/esm/tools/search/utils.mjs.map +1 -0
- package/dist/esm/utils/graph.mjs +13 -0
- package/dist/esm/utils/graph.mjs.map +1 -0
- package/dist/esm/utils/llm.mjs +25 -0
- package/dist/esm/utils/llm.mjs.map +1 -0
- package/dist/esm/utils/misc.mjs +53 -0
- package/dist/esm/utils/misc.mjs.map +1 -0
- package/dist/esm/utils/run.mjs +66 -0
- package/dist/esm/utils/run.mjs.map +1 -0
- package/dist/esm/utils/title.mjs +108 -0
- package/dist/esm/utils/title.mjs.map +1 -0
- package/dist/esm/utils/tokens.mjs +62 -0
- package/dist/esm/utils/tokens.mjs.map +1 -0
- package/dist/types/common/enum.d.ts +128 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/events.d.ts +29 -0
- package/dist/types/graphs/Graph.d.ts +122 -0
- package/dist/types/graphs/index.d.ts +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/instrumentation.d.ts +1 -0
- package/dist/types/llm/anthropic/index.d.ts +39 -0
- package/dist/types/llm/anthropic/types.d.ts +37 -0
- package/dist/types/llm/anthropic/utils/message_inputs.d.ts +14 -0
- package/dist/types/llm/anthropic/utils/message_outputs.d.ts +14 -0
- package/dist/types/llm/anthropic/utils/output_parsers.d.ts +22 -0
- package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
- package/dist/types/llm/fake.d.ts +31 -0
- package/dist/types/llm/google/index.d.ts +14 -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 +8 -0
- package/dist/types/llm/ollama/utils.d.ts +7 -0
- package/dist/types/llm/openai/index.d.ts +103 -0
- 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/openrouter/index.d.ts +12 -0
- package/dist/types/llm/providers.d.ts +5 -0
- package/dist/types/llm/text.d.ts +21 -0
- package/dist/types/llm/vertexai/index.d.ts +293 -0
- package/dist/types/messages/core.d.ts +14 -0
- package/dist/types/messages/format.d.ts +113 -0
- package/dist/types/messages/ids.d.ts +3 -0
- package/dist/types/messages/index.d.ts +4 -0
- package/dist/types/messages/prune.d.ts +51 -0
- package/dist/types/mockStream.d.ts +32 -0
- package/dist/types/prompts/collab.d.ts +1 -0
- package/dist/types/prompts/index.d.ts +2 -0
- package/dist/types/prompts/taskmanager.d.ts +41 -0
- package/dist/types/run.d.ts +30 -0
- package/dist/types/scripts/abort.d.ts +1 -0
- package/dist/types/scripts/ant_web_search.d.ts +1 -0
- package/dist/types/scripts/args.d.ts +7 -0
- package/dist/types/scripts/caching.d.ts +1 -0
- package/dist/types/scripts/cli.d.ts +1 -0
- package/dist/types/scripts/cli2.d.ts +1 -0
- package/dist/types/scripts/cli3.d.ts +1 -0
- package/dist/types/scripts/cli4.d.ts +1 -0
- package/dist/types/scripts/cli5.d.ts +1 -0
- package/dist/types/scripts/code_exec.d.ts +1 -0
- package/dist/types/scripts/code_exec_files.d.ts +1 -0
- package/dist/types/scripts/code_exec_simple.d.ts +1 -0
- package/dist/types/scripts/content.d.ts +1 -0
- package/dist/types/scripts/empty_input.d.ts +1 -0
- package/dist/types/scripts/image.d.ts +1 -0
- package/dist/types/scripts/memory.d.ts +1 -0
- package/dist/types/scripts/search.d.ts +1 -0
- package/dist/types/scripts/simple.d.ts +1 -0
- package/dist/types/scripts/stream.d.ts +1 -0
- package/dist/types/scripts/thinking.d.ts +1 -0
- package/dist/types/scripts/tools.d.ts +1 -0
- package/dist/types/specs/spec.utils.d.ts +1 -0
- package/dist/types/splitStream.d.ts +37 -0
- package/dist/types/stream.d.ts +14 -0
- package/dist/types/tools/CodeExecutor.d.ts +23 -0
- package/dist/types/tools/ToolNode.d.ts +22 -0
- package/dist/types/tools/example.d.ts +78 -0
- package/dist/types/tools/handlers.d.ts +19 -0
- package/dist/types/tools/search/anthropic.d.ts +16 -0
- package/dist/types/tools/search/content.d.ts +4 -0
- package/dist/types/tools/search/firecrawl.d.ts +54 -0
- package/dist/types/tools/search/format.d.ts +5 -0
- package/dist/types/tools/search/highlights.d.ts +13 -0
- package/dist/types/tools/search/index.d.ts +2 -0
- package/dist/types/tools/search/rerankers.d.ts +38 -0
- package/dist/types/tools/search/schema.d.ts +16 -0
- package/dist/types/tools/search/search.d.ts +8 -0
- package/dist/types/tools/search/serper-scraper.d.ts +59 -0
- package/dist/types/tools/search/test.d.ts +1 -0
- package/dist/types/tools/search/tool.d.ts +54 -0
- package/dist/types/tools/search/types.d.ts +591 -0
- package/dist/types/tools/search/utils.d.ts +10 -0
- package/dist/types/types/graph.d.ts +138 -0
- package/dist/types/types/index.d.ts +5 -0
- package/dist/types/types/llm.d.ts +102 -0
- package/dist/types/types/run.d.ts +74 -0
- package/dist/types/types/stream.d.ts +293 -0
- package/dist/types/types/tools.d.ts +61 -0
- package/dist/types/utils/graph.d.ts +2 -0
- package/dist/types/utils/index.d.ts +5 -0
- package/dist/types/utils/llm.d.ts +3 -0
- package/dist/types/utils/llmConfig.d.ts +3 -0
- package/dist/types/utils/logging.d.ts +1 -0
- package/dist/types/utils/misc.d.ts +7 -0
- package/dist/types/utils/run.d.ts +27 -0
- package/dist/types/utils/title.d.ts +4 -0
- package/dist/types/utils/tokens.d.ts +3 -0
- package/package.json +145 -0
- package/src/common/enum.ts +176 -0
- package/src/common/index.ts +2 -0
- package/src/events.ts +191 -0
- package/src/graphs/Graph.ts +846 -0
- package/src/graphs/index.ts +1 -0
- package/src/index.ts +24 -0
- package/src/instrumentation.ts +22 -0
- package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
- package/src/llm/anthropic/index.ts +413 -0
- package/src/llm/anthropic/llm.spec.ts +1442 -0
- package/src/llm/anthropic/types.ts +140 -0
- package/src/llm/anthropic/utils/message_inputs.ts +660 -0
- package/src/llm/anthropic/utils/message_outputs.ts +289 -0
- package/src/llm/anthropic/utils/output_parsers.ts +133 -0
- package/src/llm/anthropic/utils/tools.ts +29 -0
- package/src/llm/fake.ts +133 -0
- package/src/llm/google/index.ts +222 -0
- package/src/llm/google/types.ts +43 -0
- package/src/llm/google/utils/common.ts +660 -0
- package/src/llm/google/utils/tools.ts +160 -0
- package/src/llm/google/utils/zod_to_genai_parameters.ts +88 -0
- package/src/llm/ollama/index.ts +92 -0
- package/src/llm/ollama/utils.ts +193 -0
- package/src/llm/openai/index.ts +853 -0
- package/src/llm/openai/types.ts +24 -0
- package/src/llm/openai/utils/index.ts +918 -0
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
- package/src/llm/openrouter/index.ts +60 -0
- package/src/llm/providers.ts +57 -0
- package/src/llm/text.ts +94 -0
- package/src/llm/vertexai/index.ts +360 -0
- package/src/messages/core.ts +463 -0
- package/src/messages/format.ts +625 -0
- package/src/messages/formatAgentMessages.test.ts +917 -0
- package/src/messages/formatAgentMessages.tools.test.ts +400 -0
- package/src/messages/formatMessage.test.ts +693 -0
- package/src/messages/ids.ts +26 -0
- package/src/messages/index.ts +4 -0
- package/src/messages/prune.ts +567 -0
- package/src/messages/shiftIndexTokenCountMap.test.ts +81 -0
- package/src/mockStream.ts +99 -0
- package/src/prompts/collab.ts +6 -0
- package/src/prompts/index.ts +2 -0
- package/src/prompts/taskmanager.ts +61 -0
- package/src/proto/CollabGraph.ts +269 -0
- package/src/proto/TaskManager.ts +243 -0
- package/src/proto/collab.ts +200 -0
- package/src/proto/collab_design.ts +184 -0
- package/src/proto/collab_design_v2.ts +224 -0
- package/src/proto/collab_design_v3.ts +255 -0
- package/src/proto/collab_design_v4.ts +220 -0
- package/src/proto/collab_design_v5.ts +251 -0
- package/src/proto/collab_graph.ts +181 -0
- package/src/proto/collab_original.ts +123 -0
- package/src/proto/example.ts +93 -0
- package/src/proto/example_new.ts +68 -0
- package/src/proto/example_old.ts +201 -0
- package/src/proto/example_test.ts +152 -0
- package/src/proto/example_test_anthropic.ts +100 -0
- package/src/proto/log_stream.ts +202 -0
- package/src/proto/main_collab_community_event.ts +133 -0
- package/src/proto/main_collab_design_v2.ts +96 -0
- package/src/proto/main_collab_design_v4.ts +100 -0
- package/src/proto/main_collab_design_v5.ts +135 -0
- package/src/proto/main_collab_global_analysis.ts +122 -0
- package/src/proto/main_collab_hackathon_event.ts +153 -0
- package/src/proto/main_collab_space_mission.ts +153 -0
- package/src/proto/main_philosophy.ts +210 -0
- package/src/proto/original_script.ts +126 -0
- package/src/proto/standard.ts +100 -0
- package/src/proto/stream.ts +56 -0
- package/src/proto/tasks.ts +118 -0
- package/src/proto/tools/global_analysis_tools.ts +86 -0
- package/src/proto/tools/space_mission_tools.ts +60 -0
- package/src/proto/vertexai.ts +54 -0
- package/src/run.ts +381 -0
- package/src/scripts/abort.ts +138 -0
- package/src/scripts/ant_web_search.ts +158 -0
- package/src/scripts/args.ts +48 -0
- package/src/scripts/caching.ts +124 -0
- package/src/scripts/cli.ts +167 -0
- package/src/scripts/cli2.ts +125 -0
- package/src/scripts/cli3.ts +178 -0
- package/src/scripts/cli4.ts +184 -0
- package/src/scripts/cli5.ts +184 -0
- package/src/scripts/code_exec.ts +214 -0
- package/src/scripts/code_exec_files.ts +193 -0
- package/src/scripts/code_exec_simple.ts +129 -0
- package/src/scripts/content.ts +120 -0
- package/src/scripts/empty_input.ts +137 -0
- package/src/scripts/image.ts +178 -0
- package/src/scripts/memory.ts +97 -0
- package/src/scripts/search.ts +150 -0
- package/src/scripts/simple.ts +225 -0
- package/src/scripts/stream.ts +122 -0
- package/src/scripts/thinking.ts +150 -0
- package/src/scripts/tools.ts +155 -0
- package/src/specs/anthropic.simple.test.ts +317 -0
- package/src/specs/azure.simple.test.ts +316 -0
- package/src/specs/openai.simple.test.ts +316 -0
- package/src/specs/prune.test.ts +763 -0
- package/src/specs/reasoning.test.ts +165 -0
- package/src/specs/spec.utils.ts +3 -0
- package/src/specs/thinking-prune.test.ts +703 -0
- package/src/specs/token-distribution-edge-case.test.ts +316 -0
- package/src/specs/tool-error.test.ts +193 -0
- package/src/splitStream.test.ts +691 -0
- package/src/splitStream.ts +234 -0
- package/src/stream.test.ts +94 -0
- package/src/stream.ts +651 -0
- package/src/tools/CodeExecutor.ts +220 -0
- package/src/tools/ToolNode.ts +170 -0
- package/src/tools/example.ts +129 -0
- package/src/tools/handlers.ts +336 -0
- package/src/tools/search/anthropic.ts +51 -0
- package/src/tools/search/content.test.ts +173 -0
- package/src/tools/search/content.ts +147 -0
- package/src/tools/search/firecrawl.ts +210 -0
- package/src/tools/search/format.ts +250 -0
- package/src/tools/search/highlights.ts +320 -0
- package/src/tools/search/index.ts +2 -0
- package/src/tools/search/jina-reranker.test.ts +126 -0
- package/src/tools/search/output.md +2775 -0
- package/src/tools/search/rerankers.ts +242 -0
- package/src/tools/search/schema.ts +63 -0
- package/src/tools/search/search.ts +759 -0
- package/src/tools/search/serper-scraper.ts +155 -0
- package/src/tools/search/test.html +884 -0
- package/src/tools/search/test.md +643 -0
- package/src/tools/search/test.ts +159 -0
- package/src/tools/search/tool.ts +471 -0
- package/src/tools/search/types.ts +687 -0
- package/src/tools/search/utils.ts +79 -0
- package/src/types/graph.ts +185 -0
- package/src/types/index.ts +6 -0
- package/src/types/llm.ts +140 -0
- package/src/types/run.ts +89 -0
- package/src/types/stream.ts +400 -0
- package/src/types/tools.ts +80 -0
- package/src/utils/graph.ts +11 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/llm.ts +27 -0
- package/src/utils/llmConfig.ts +183 -0
- package/src/utils/logging.ts +48 -0
- package/src/utils/misc.ts +57 -0
- package/src/utils/run.ts +101 -0
- package/src/utils/title.ts +165 -0
- package/src/utils/tokens.ts +70 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { AIMessageChunk } from '@langchain/core/messages';
|
|
2
|
+
import '@langchain/core/output_parsers';
|
|
3
|
+
import '@langchain/core/utils/types';
|
|
4
|
+
|
|
5
|
+
function _makeMessageChunkFromAnthropicEvent(data, fields) {
|
|
6
|
+
if (data.type === 'message_start') {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
+
const { content, usage, ...additionalKwargs } = data.message;
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
const filteredAdditionalKwargs = {};
|
|
11
|
+
for (const [key, value] of Object.entries(additionalKwargs)) {
|
|
12
|
+
if (value !== undefined && value !== null) {
|
|
13
|
+
filteredAdditionalKwargs[key] = value;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
const { input_tokens, output_tokens, ...rest } = usage ?? {};
|
|
18
|
+
const usageMetadata = {
|
|
19
|
+
input_tokens,
|
|
20
|
+
output_tokens,
|
|
21
|
+
total_tokens: input_tokens + output_tokens,
|
|
22
|
+
input_token_details: {
|
|
23
|
+
cache_creation: rest.cache_creation_input_tokens,
|
|
24
|
+
cache_read: rest.cache_read_input_tokens,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
chunk: new AIMessageChunk({
|
|
29
|
+
content: fields.coerceContentToString ? '' : [],
|
|
30
|
+
additional_kwargs: filteredAdditionalKwargs,
|
|
31
|
+
usage_metadata: fields.streamUsage ? usageMetadata : undefined,
|
|
32
|
+
response_metadata: {
|
|
33
|
+
usage: {
|
|
34
|
+
...rest,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
id: data.message.id,
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
else if (data.type === 'message_delta') {
|
|
42
|
+
const usageMetadata = {
|
|
43
|
+
input_tokens: 0,
|
|
44
|
+
output_tokens: data.usage.output_tokens,
|
|
45
|
+
total_tokens: data.usage.output_tokens,
|
|
46
|
+
input_token_details: {
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
cache_creation: data.usage.cache_creation_input_tokens,
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
cache_read: data.usage.cache_read_input_tokens,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
chunk: new AIMessageChunk({
|
|
55
|
+
content: fields.coerceContentToString ? '' : [],
|
|
56
|
+
additional_kwargs: { ...data.delta },
|
|
57
|
+
usage_metadata: fields.streamUsage ? usageMetadata : undefined,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else if (data.type === 'content_block_start' &&
|
|
62
|
+
[
|
|
63
|
+
'tool_use',
|
|
64
|
+
'document',
|
|
65
|
+
'server_tool_use',
|
|
66
|
+
'web_search_tool_result',
|
|
67
|
+
].includes(data.content_block.type)) {
|
|
68
|
+
const contentBlock = data.content_block;
|
|
69
|
+
let toolCallChunks;
|
|
70
|
+
if (contentBlock.type === 'tool_use') {
|
|
71
|
+
toolCallChunks = [
|
|
72
|
+
{
|
|
73
|
+
id: contentBlock.id,
|
|
74
|
+
index: data.index,
|
|
75
|
+
name: contentBlock.name,
|
|
76
|
+
args: '',
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
else if (contentBlock.type === 'server_tool_use') {
|
|
81
|
+
// Handle anthropic built-in server tool use (like web search)
|
|
82
|
+
toolCallChunks = [
|
|
83
|
+
{
|
|
84
|
+
id: contentBlock.id,
|
|
85
|
+
index: data.index,
|
|
86
|
+
name: contentBlock.name,
|
|
87
|
+
args: '',
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
toolCallChunks = [];
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
chunk: new AIMessageChunk({
|
|
96
|
+
content: fields.coerceContentToString
|
|
97
|
+
? ''
|
|
98
|
+
: [
|
|
99
|
+
{
|
|
100
|
+
index: data.index,
|
|
101
|
+
...data.content_block,
|
|
102
|
+
input: contentBlock.type === 'server_tool_use' ||
|
|
103
|
+
contentBlock.type === 'tool_use'
|
|
104
|
+
? ''
|
|
105
|
+
: undefined,
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
additional_kwargs: {},
|
|
109
|
+
tool_call_chunks: toolCallChunks,
|
|
110
|
+
}),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
else if (data.type === 'content_block_delta' &&
|
|
114
|
+
[
|
|
115
|
+
'text_delta',
|
|
116
|
+
'citations_delta',
|
|
117
|
+
'thinking_delta',
|
|
118
|
+
'signature_delta',
|
|
119
|
+
].includes(data.delta.type)) {
|
|
120
|
+
if (fields.coerceContentToString && 'text' in data.delta) {
|
|
121
|
+
return {
|
|
122
|
+
chunk: new AIMessageChunk({
|
|
123
|
+
content: data.delta.text,
|
|
124
|
+
}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
129
|
+
const contentBlock = data.delta;
|
|
130
|
+
if ('citation' in contentBlock) {
|
|
131
|
+
contentBlock.citations = [contentBlock.citation];
|
|
132
|
+
delete contentBlock.citation;
|
|
133
|
+
}
|
|
134
|
+
if (contentBlock.type === 'thinking_delta' ||
|
|
135
|
+
contentBlock.type === 'signature_delta') {
|
|
136
|
+
return {
|
|
137
|
+
chunk: new AIMessageChunk({
|
|
138
|
+
content: [{ index: data.index, ...contentBlock, type: 'thinking' }],
|
|
139
|
+
}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
chunk: new AIMessageChunk({
|
|
144
|
+
content: [{ index: data.index, ...contentBlock, type: 'text' }],
|
|
145
|
+
}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else if (data.type === 'content_block_delta' &&
|
|
150
|
+
data.delta.type === 'input_json_delta') {
|
|
151
|
+
return {
|
|
152
|
+
chunk: new AIMessageChunk({
|
|
153
|
+
content: fields.coerceContentToString
|
|
154
|
+
? ''
|
|
155
|
+
: [
|
|
156
|
+
{
|
|
157
|
+
index: data.index,
|
|
158
|
+
input: data.delta.partial_json,
|
|
159
|
+
type: data.delta.type,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
additional_kwargs: {},
|
|
163
|
+
tool_call_chunks: [
|
|
164
|
+
{
|
|
165
|
+
index: data.index,
|
|
166
|
+
args: data.delta.partial_json,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
}),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else if (data.type === 'content_block_start' &&
|
|
173
|
+
data.content_block.type === 'text') {
|
|
174
|
+
const content = data.content_block.text;
|
|
175
|
+
if (content !== undefined) {
|
|
176
|
+
return {
|
|
177
|
+
chunk: new AIMessageChunk({
|
|
178
|
+
content: fields.coerceContentToString
|
|
179
|
+
? content
|
|
180
|
+
: [
|
|
181
|
+
{
|
|
182
|
+
index: data.index,
|
|
183
|
+
...data.content_block,
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
additional_kwargs: {},
|
|
187
|
+
}),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (data.type === 'content_block_start' &&
|
|
192
|
+
data.content_block.type === 'redacted_thinking') {
|
|
193
|
+
return {
|
|
194
|
+
chunk: new AIMessageChunk({
|
|
195
|
+
content: fields.coerceContentToString
|
|
196
|
+
? ''
|
|
197
|
+
: [{ index: data.index, ...data.content_block }],
|
|
198
|
+
}),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
else if (data.type === 'content_block_start' &&
|
|
202
|
+
data.content_block.type === 'thinking') {
|
|
203
|
+
const content = data.content_block.thinking;
|
|
204
|
+
return {
|
|
205
|
+
chunk: new AIMessageChunk({
|
|
206
|
+
content: fields.coerceContentToString
|
|
207
|
+
? content
|
|
208
|
+
: [{ index: data.index, ...data.content_block }],
|
|
209
|
+
}),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { _makeMessageChunkFromAnthropicEvent };
|
|
216
|
+
//# sourceMappingURL=message_outputs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message_outputs.mjs","sources":["../../../../../src/llm/anthropic/utils/message_outputs.ts"],"sourcesContent":["/**\r\n * This util file contains functions for converting Anthropic messages to LangChain messages.\r\n */\r\nimport Anthropic from '@anthropic-ai/sdk';\r\nimport {\r\n AIMessage,\r\n AIMessageChunk,\r\n UsageMetadata,\r\n} from '@langchain/core/messages';\r\nimport type { ToolCallChunk } from '@langchain/core/messages/tool';\r\nimport { ChatGeneration } from '@langchain/core/outputs';\r\nimport { extractToolCalls } from './output_parsers';\r\nimport { AnthropicMessageResponse } from '../types';\r\n\r\nexport function _makeMessageChunkFromAnthropicEvent(\r\n data: Anthropic.Messages.RawMessageStreamEvent,\r\n fields: {\r\n streamUsage: boolean;\r\n coerceContentToString: boolean;\r\n }\r\n): {\r\n chunk: AIMessageChunk;\r\n} | null {\r\n if (data.type === 'message_start') {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { content, usage, ...additionalKwargs } = data.message;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const filteredAdditionalKwargs: Record<string, any> = {};\r\n for (const [key, value] of Object.entries(additionalKwargs)) {\r\n if (value !== undefined && value !== null) {\r\n filteredAdditionalKwargs[key] = value;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\r\n usage ?? {};\r\n const usageMetadata: UsageMetadata = {\r\n input_tokens,\r\n output_tokens,\r\n total_tokens: input_tokens + output_tokens,\r\n input_token_details: {\r\n cache_creation: rest.cache_creation_input_tokens,\r\n cache_read: rest.cache_read_input_tokens,\r\n },\r\n };\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString ? '' : [],\r\n additional_kwargs: filteredAdditionalKwargs,\r\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\r\n response_metadata: {\r\n usage: {\r\n ...rest,\r\n },\r\n },\r\n id: data.message.id,\r\n }),\r\n };\r\n } else if (data.type === 'message_delta') {\r\n const usageMetadata: UsageMetadata = {\r\n input_tokens: 0,\r\n output_tokens: data.usage.output_tokens,\r\n total_tokens: data.usage.output_tokens,\r\n input_token_details: {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cache_creation: (data.usage as any).cache_creation_input_tokens,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cache_read: (data.usage as any).cache_read_input_tokens,\r\n },\r\n };\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString ? '' : [],\r\n additional_kwargs: { ...data.delta },\r\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n [\r\n 'tool_use',\r\n 'document',\r\n 'server_tool_use',\r\n 'web_search_tool_result',\r\n ].includes(data.content_block.type)\r\n ) {\r\n const contentBlock = data.content_block;\r\n let toolCallChunks: ToolCallChunk[];\r\n if (contentBlock.type === 'tool_use') {\r\n toolCallChunks = [\r\n {\r\n id: contentBlock.id,\r\n index: data.index,\r\n name: contentBlock.name,\r\n args: '',\r\n },\r\n ];\r\n } else if (contentBlock.type === 'server_tool_use') {\r\n // Handle anthropic built-in server tool use (like web search)\r\n toolCallChunks = [\r\n {\r\n id: contentBlock.id,\r\n index: data.index,\r\n name: contentBlock.name,\r\n args: '',\r\n },\r\n ];\r\n } else {\r\n toolCallChunks = [];\r\n }\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [\r\n {\r\n index: data.index,\r\n ...data.content_block,\r\n input:\r\n contentBlock.type === 'server_tool_use' ||\r\n contentBlock.type === 'tool_use'\r\n ? ''\r\n : undefined,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n tool_call_chunks: toolCallChunks,\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_delta' &&\r\n [\r\n 'text_delta',\r\n 'citations_delta',\r\n 'thinking_delta',\r\n 'signature_delta',\r\n ].includes(data.delta.type)\r\n ) {\r\n if (fields.coerceContentToString && 'text' in data.delta) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: data.delta.text,\r\n }),\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const contentBlock: Record<string, any> = data.delta;\r\n if ('citation' in contentBlock) {\r\n contentBlock.citations = [contentBlock.citation];\r\n delete contentBlock.citation;\r\n }\r\n if (\r\n contentBlock.type === 'thinking_delta' ||\r\n contentBlock.type === 'signature_delta'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: [{ index: data.index, ...contentBlock, type: 'thinking' }],\r\n }),\r\n };\r\n }\r\n\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: [{ index: data.index, ...contentBlock, type: 'text' }],\r\n }),\r\n };\r\n }\r\n } else if (\r\n data.type === 'content_block_delta' &&\r\n data.delta.type === 'input_json_delta'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [\r\n {\r\n index: data.index,\r\n input: data.delta.partial_json,\r\n type: data.delta.type,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n tool_call_chunks: [\r\n {\r\n index: data.index,\r\n args: data.delta.partial_json,\r\n },\r\n ],\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'text'\r\n ) {\r\n const content = data.content_block.text;\r\n if (content !== undefined) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? content\r\n : [\r\n {\r\n index: data.index,\r\n ...data.content_block,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n }),\r\n };\r\n }\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'redacted_thinking'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [{ index: data.index, ...data.content_block }],\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'thinking'\r\n ) {\r\n const content = data.content_block.thinking;\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? content\r\n : [{ index: data.index, ...data.content_block }],\r\n }),\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function anthropicResponseToChatMessages(\r\n messages: AnthropicMessageResponse[],\r\n additionalKwargs: Record<string, unknown>\r\n): ChatGeneration[] {\r\n const usage: Record<string, number> | null | undefined =\r\n additionalKwargs.usage as Record<string, number> | null | undefined;\r\n const usageMetadata =\r\n usage != null\r\n ? {\r\n input_tokens: usage.input_tokens ?? 0,\r\n output_tokens: usage.output_tokens ?? 0,\r\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\r\n input_token_details: {\r\n cache_creation: usage.cache_creation_input_tokens,\r\n cache_read: usage.cache_read_input_tokens,\r\n },\r\n }\r\n : undefined;\r\n if (messages.length === 1 && messages[0].type === 'text') {\r\n return [\r\n {\r\n text: messages[0].text,\r\n message: new AIMessage({\r\n content: messages[0].text,\r\n additional_kwargs: additionalKwargs,\r\n usage_metadata: usageMetadata,\r\n response_metadata: additionalKwargs,\r\n id: additionalKwargs.id as string,\r\n }),\r\n },\r\n ];\r\n } else {\r\n const toolCalls = extractToolCalls(messages);\r\n const generations: ChatGeneration[] = [\r\n {\r\n text: '',\r\n message: new AIMessage({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n content: messages as any,\r\n additional_kwargs: additionalKwargs,\r\n tool_calls: toolCalls,\r\n usage_metadata: usageMetadata,\r\n response_metadata: additionalKwargs,\r\n id: additionalKwargs.id as string,\r\n }),\r\n },\r\n ];\r\n return generations;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function handleToolChoice(toolChoice) {
|
|
2
|
+
if (toolChoice == null) {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
else if (toolChoice === 'any') {
|
|
6
|
+
return {
|
|
7
|
+
type: 'any',
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
else if (toolChoice === 'auto') {
|
|
11
|
+
return {
|
|
12
|
+
type: 'auto',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
else if (typeof toolChoice === 'string') {
|
|
16
|
+
return {
|
|
17
|
+
type: 'tool',
|
|
18
|
+
name: toolChoice,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return toolChoice;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { handleToolChoice };
|
|
27
|
+
//# sourceMappingURL=tools.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.mjs","sources":["../../../../../src/llm/anthropic/utils/tools.ts"],"sourcesContent":["import type { Anthropic } from '@anthropic-ai/sdk';\r\nimport { AnthropicToolChoice } from '../types.js';\r\n\r\nexport function handleToolChoice(\r\n toolChoice?: AnthropicToolChoice\r\n):\r\n | Anthropic.Messages.ToolChoiceAuto\r\n | Anthropic.Messages.ToolChoiceAny\r\n | Anthropic.Messages.ToolChoiceTool\r\n | undefined {\r\n if (toolChoice == null) {\r\n return undefined;\r\n } else if (toolChoice === 'any') {\r\n return {\r\n type: 'any',\r\n };\r\n } else if (toolChoice === 'auto') {\r\n return {\r\n type: 'auto',\r\n };\r\n } else if (typeof toolChoice === 'string') {\r\n return {\r\n type: 'tool',\r\n name: toolChoice,\r\n };\r\n } else {\r\n return toolChoice;\r\n }\r\n}\r\n"],"names":[],"mappings":"AAGM,SAAU,gBAAgB,CAC9B,UAAgC,EAAA;AAMhC,IAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,SAAS;;AACX,SAAA,IAAI,UAAU,KAAK,KAAK,EAAE;QAC/B,OAAO;AACL,YAAA,IAAI,EAAE,KAAK;SACZ;;AACI,SAAA,IAAI,UAAU,KAAK,MAAM,EAAE;QAChC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;SACb;;AACI,SAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QACzC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,UAAU;SACjB;;SACI;AACL,QAAA,OAAO,UAAU;;AAErB;;;;"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
2
|
+
import { AIMessageChunk } from '@langchain/core/messages';
|
|
3
|
+
import { FakeListChatModel } from '@langchain/core/utils/testing';
|
|
4
|
+
|
|
5
|
+
class FakeChatModel extends FakeListChatModel {
|
|
6
|
+
splitStrategy;
|
|
7
|
+
toolCalls = [];
|
|
8
|
+
addedToolCalls = false;
|
|
9
|
+
constructor({ responses, sleep, emitCustomEvent, splitStrategy = { type: 'regex', value: /(?<=\s+)|(?=\s+)/ }, toolCalls = [] }) {
|
|
10
|
+
super({ responses, sleep, emitCustomEvent });
|
|
11
|
+
this.splitStrategy = splitStrategy;
|
|
12
|
+
this.toolCalls = toolCalls;
|
|
13
|
+
}
|
|
14
|
+
splitText(text) {
|
|
15
|
+
if (this.splitStrategy.type === 'regex') {
|
|
16
|
+
return text.split(this.splitStrategy.value);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const chunkSize = this.splitStrategy.value;
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for (let i = 0; i < text.length; i += chunkSize) {
|
|
22
|
+
chunks.push(text.slice(i, i + chunkSize));
|
|
23
|
+
}
|
|
24
|
+
return chunks;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
_createResponseChunk(text, tool_call_chunks) {
|
|
28
|
+
return new ChatGenerationChunk({
|
|
29
|
+
text,
|
|
30
|
+
generationInfo: {},
|
|
31
|
+
message: new AIMessageChunk({
|
|
32
|
+
content: text,
|
|
33
|
+
tool_call_chunks,
|
|
34
|
+
additional_kwargs: tool_call_chunks ? {
|
|
35
|
+
tool_calls: tool_call_chunks.map((toolCall) => ({
|
|
36
|
+
index: toolCall.index ?? 0,
|
|
37
|
+
id: toolCall.id ?? '',
|
|
38
|
+
type: 'function',
|
|
39
|
+
function: {
|
|
40
|
+
name: toolCall.name ?? '',
|
|
41
|
+
arguments: toolCall.args ?? '',
|
|
42
|
+
},
|
|
43
|
+
})),
|
|
44
|
+
} : undefined,
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async *_streamResponseChunks(_messages, options, runManager) {
|
|
49
|
+
const response = this._currentResponse();
|
|
50
|
+
this._incrementResponse();
|
|
51
|
+
if (this.emitCustomEvent) {
|
|
52
|
+
await runManager?.handleCustomEvent('some_test_event', {
|
|
53
|
+
someval: true,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const chunks = this.splitText(response);
|
|
57
|
+
for await (const chunk of chunks) {
|
|
58
|
+
await this._sleepIfRequested();
|
|
59
|
+
if (options.thrownErrorString != null && options.thrownErrorString) {
|
|
60
|
+
throw new Error(options.thrownErrorString);
|
|
61
|
+
}
|
|
62
|
+
const responseChunk = super._createResponseChunk(chunk);
|
|
63
|
+
yield responseChunk;
|
|
64
|
+
void runManager?.handleLLMNewToken(chunk);
|
|
65
|
+
}
|
|
66
|
+
await this._sleepIfRequested();
|
|
67
|
+
if (this.toolCalls.length > 0 && !this.addedToolCalls) {
|
|
68
|
+
this.addedToolCalls = true;
|
|
69
|
+
const toolCallChunks = this.toolCalls.map((toolCall) => {
|
|
70
|
+
return {
|
|
71
|
+
name: toolCall.name,
|
|
72
|
+
args: JSON.stringify(toolCall.args),
|
|
73
|
+
id: toolCall.id,
|
|
74
|
+
type: 'tool_call_chunk',
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
const responseChunk = this._createResponseChunk('', toolCallChunks);
|
|
78
|
+
yield responseChunk;
|
|
79
|
+
void runManager?.handleLLMNewToken('');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function createFakeStreamingLLM({ responses, sleep, splitStrategy, toolCalls, }) {
|
|
84
|
+
return new FakeChatModel({
|
|
85
|
+
sleep,
|
|
86
|
+
responses,
|
|
87
|
+
emitCustomEvent: true,
|
|
88
|
+
splitStrategy,
|
|
89
|
+
toolCalls,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { FakeChatModel, createFakeStreamingLLM };
|
|
94
|
+
//# sourceMappingURL=fake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake.mjs","sources":["../../../src/llm/fake.ts"],"sourcesContent":["import { ChatGenerationChunk } from '@langchain/core/outputs';\r\nimport { AIMessageChunk } from '@langchain/core/messages';\r\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\r\nimport type { BaseMessage } from '@langchain/core/messages';\r\nimport { FakeListChatModel } from '@langchain/core/utils/testing';\r\nimport { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\r\n\r\ntype SplitStrategy = {\r\n type: 'regex' | 'fixed';\r\n value: RegExp | number;\r\n};\r\n\r\nexport class FakeChatModel extends FakeListChatModel {\r\n private splitStrategy: SplitStrategy;\r\n private toolCalls: ToolCall[] = [];\r\n private addedToolCalls: boolean = false;\r\n\r\n constructor({\r\n responses,\r\n sleep,\r\n emitCustomEvent,\r\n splitStrategy = { type: 'regex', value: /(?<=\\s+)|(?=\\s+)/ },\r\n toolCalls = []\r\n }: {\r\n responses: string[];\r\n sleep?: number;\r\n emitCustomEvent?: boolean;\r\n splitStrategy?: SplitStrategy;\r\n toolCalls?: ToolCall[];\r\n }) {\r\n super({ responses, sleep, emitCustomEvent });\r\n this.splitStrategy = splitStrategy;\r\n this.toolCalls = toolCalls;\r\n }\r\n\r\n private splitText(text: string): string[] {\r\n if (this.splitStrategy.type === 'regex') {\r\n return text.split(this.splitStrategy.value as RegExp);\r\n } else {\r\n const chunkSize = this.splitStrategy.value as number;\r\n const chunks: string[] = [];\r\n for (let i = 0; i < text.length; i += chunkSize) {\r\n chunks.push(text.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n }\r\n _createResponseChunk(text: string, tool_call_chunks?: ToolCallChunk[]): ChatGenerationChunk {\r\n return new ChatGenerationChunk({\r\n text,\r\n generationInfo: {},\r\n message: new AIMessageChunk({\r\n content: text,\r\n tool_call_chunks,\r\n additional_kwargs: tool_call_chunks ? {\r\n tool_calls: tool_call_chunks.map((toolCall) => ({\r\n index: toolCall.index ?? 0,\r\n id: toolCall.id ?? '',\r\n type: 'function',\r\n function: {\r\n name: toolCall.name ?? '',\r\n arguments: toolCall.args ?? '',\r\n },\r\n })),\r\n } : undefined,\r\n })});\r\n }\r\n\r\n async *_streamResponseChunks(\r\n _messages: BaseMessage[],\r\n options: this['ParsedCallOptions'],\r\n runManager?: CallbackManagerForLLMRun\r\n ): AsyncGenerator<ChatGenerationChunk> {\r\n const response = this._currentResponse();\r\n this._incrementResponse();\r\n\r\n if (this.emitCustomEvent) {\r\n await runManager?.handleCustomEvent('some_test_event', {\r\n someval: true,\r\n });\r\n }\r\n\r\n const chunks = this.splitText(response);\r\n for await (const chunk of chunks) {\r\n await this._sleepIfRequested();\r\n\r\n if (options.thrownErrorString != null && options.thrownErrorString) {\r\n throw new Error(options.thrownErrorString);\r\n }\r\n\r\n const responseChunk = super._createResponseChunk(chunk);\r\n yield responseChunk;\r\n void runManager?.handleLLMNewToken(chunk);\r\n }\r\n\r\n await this._sleepIfRequested();\r\n if (this.toolCalls.length > 0 && !this.addedToolCalls) {\r\n this.addedToolCalls = true;\r\n const toolCallChunks = this.toolCalls.map((toolCall) => {;\r\n return {\r\n name: toolCall.name,\r\n args: JSON.stringify(toolCall.args),\r\n id: toolCall.id,\r\n type: 'tool_call_chunk',\r\n } as ToolCallChunk;\r\n });\r\n const responseChunk = this._createResponseChunk('', toolCallChunks);\r\n yield responseChunk;\r\n void runManager?.handleLLMNewToken('');\r\n }\r\n }\r\n}\r\n\r\nexport function createFakeStreamingLLM({\r\n responses,\r\n sleep,\r\n splitStrategy,\r\n toolCalls,\r\n} : {\r\n responses: string[],\r\n sleep?: number,\r\n splitStrategy?: SplitStrategy,\r\n toolCalls?: ToolCall[]\r\n}\r\n): FakeChatModel {\r\n return new FakeChatModel({\r\n sleep,\r\n responses,\r\n emitCustomEvent: true,\r\n splitStrategy,\r\n toolCalls,\r\n });\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { AIMessageChunk } from '@langchain/core/messages';
|
|
2
|
+
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
3
|
+
import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
|
|
4
|
+
import { getEnvironmentVariable } from '@langchain/core/utils/env';
|
|
5
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
6
|
+
import { convertBaseMessagesToContent, convertResponseContentToChatGenerationChunk } from './utils/common.mjs';
|
|
7
|
+
|
|
8
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
9
|
+
class CustomChatGoogleGenerativeAI extends ChatGoogleGenerativeAI {
|
|
10
|
+
thinkingConfig;
|
|
11
|
+
constructor(fields) {
|
|
12
|
+
super(fields);
|
|
13
|
+
this.model = fields.model.replace(/^models\//, '');
|
|
14
|
+
this.maxOutputTokens = fields.maxOutputTokens ?? this.maxOutputTokens;
|
|
15
|
+
if (this.maxOutputTokens != null && this.maxOutputTokens < 0) {
|
|
16
|
+
throw new Error('`maxOutputTokens` must be a positive integer');
|
|
17
|
+
}
|
|
18
|
+
this.temperature = fields.temperature ?? this.temperature;
|
|
19
|
+
if (this.temperature != null &&
|
|
20
|
+
(this.temperature < 0 || this.temperature > 2)) {
|
|
21
|
+
throw new Error('`temperature` must be in the range of [0.0,2.0]');
|
|
22
|
+
}
|
|
23
|
+
this.topP = fields.topP ?? this.topP;
|
|
24
|
+
if (this.topP != null && this.topP < 0) {
|
|
25
|
+
throw new Error('`topP` must be a positive integer');
|
|
26
|
+
}
|
|
27
|
+
if (this.topP != null && this.topP > 1) {
|
|
28
|
+
throw new Error('`topP` must be below 1.');
|
|
29
|
+
}
|
|
30
|
+
this.topK = fields.topK ?? this.topK;
|
|
31
|
+
if (this.topK != null && this.topK < 0) {
|
|
32
|
+
throw new Error('`topK` must be a positive integer');
|
|
33
|
+
}
|
|
34
|
+
this.stopSequences = fields.stopSequences ?? this.stopSequences;
|
|
35
|
+
this.apiKey = fields.apiKey ?? getEnvironmentVariable('GOOGLE_API_KEY');
|
|
36
|
+
if (this.apiKey == null || this.apiKey === '') {
|
|
37
|
+
throw new Error('Please set an API key for Google GenerativeAI ' +
|
|
38
|
+
'in the environment variable GOOGLE_API_KEY ' +
|
|
39
|
+
'or in the `apiKey` field of the ' +
|
|
40
|
+
'ChatGoogleGenerativeAI constructor');
|
|
41
|
+
}
|
|
42
|
+
this.safetySettings = fields.safetySettings ?? this.safetySettings;
|
|
43
|
+
if (this.safetySettings && this.safetySettings.length > 0) {
|
|
44
|
+
const safetySettingsSet = new Set(this.safetySettings.map((s) => s.category));
|
|
45
|
+
if (safetySettingsSet.size !== this.safetySettings.length) {
|
|
46
|
+
throw new Error('The categories in `safetySettings` array must be unique');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
this.thinkingConfig = fields.thinkingConfig ?? this.thinkingConfig;
|
|
50
|
+
this.streaming = fields.streaming ?? this.streaming;
|
|
51
|
+
this.json = fields.json;
|
|
52
|
+
// @ts-ignore - Accessing private property from parent class
|
|
53
|
+
this.client = new GoogleGenerativeAI(this.apiKey).getGenerativeModel({
|
|
54
|
+
model: this.model,
|
|
55
|
+
safetySettings: this.safetySettings,
|
|
56
|
+
generationConfig: {
|
|
57
|
+
stopSequences: this.stopSequences,
|
|
58
|
+
maxOutputTokens: this.maxOutputTokens,
|
|
59
|
+
temperature: this.temperature,
|
|
60
|
+
topP: this.topP,
|
|
61
|
+
topK: this.topK,
|
|
62
|
+
...(this.json != null
|
|
63
|
+
? { responseMimeType: 'application/json' }
|
|
64
|
+
: {}),
|
|
65
|
+
},
|
|
66
|
+
}, {
|
|
67
|
+
apiVersion: fields.apiVersion,
|
|
68
|
+
baseUrl: fields.baseUrl,
|
|
69
|
+
customHeaders: fields.customHeaders,
|
|
70
|
+
});
|
|
71
|
+
this.streamUsage = fields.streamUsage ?? this.streamUsage;
|
|
72
|
+
}
|
|
73
|
+
static lc_name() {
|
|
74
|
+
return 'IllumaGoogleGenerativeAI';
|
|
75
|
+
}
|
|
76
|
+
invocationParams(options) {
|
|
77
|
+
const params = super.invocationParams(options);
|
|
78
|
+
if (this.thinkingConfig) {
|
|
79
|
+
/** @ts-ignore */
|
|
80
|
+
this.client.generationConfig = {
|
|
81
|
+
/** @ts-ignore */
|
|
82
|
+
...this.client.generationConfig,
|
|
83
|
+
/** @ts-ignore */
|
|
84
|
+
thinkingConfig: this.thinkingConfig,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return params;
|
|
88
|
+
}
|
|
89
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
90
|
+
const prompt = convertBaseMessagesToContent(messages, this._isMultimodalModel, this.useSystemInstruction);
|
|
91
|
+
let actualPrompt = prompt;
|
|
92
|
+
if (prompt?.[0].role === 'system') {
|
|
93
|
+
const [systemInstruction] = prompt;
|
|
94
|
+
/** @ts-ignore */
|
|
95
|
+
this.client.systemInstruction = systemInstruction;
|
|
96
|
+
actualPrompt = prompt.slice(1);
|
|
97
|
+
}
|
|
98
|
+
const parameters = this.invocationParams(options);
|
|
99
|
+
const request = {
|
|
100
|
+
...parameters,
|
|
101
|
+
contents: actualPrompt,
|
|
102
|
+
};
|
|
103
|
+
const stream = await this.caller.callWithOptions({ signal: options.signal }, async () => {
|
|
104
|
+
/** @ts-ignore */
|
|
105
|
+
const { stream } = await this.client.generateContentStream(request);
|
|
106
|
+
return stream;
|
|
107
|
+
});
|
|
108
|
+
let lastUsageMetadata;
|
|
109
|
+
for await (const response of stream) {
|
|
110
|
+
if ('usageMetadata' in response &&
|
|
111
|
+
this.streamUsage !== false &&
|
|
112
|
+
options.streamUsage !== false) {
|
|
113
|
+
const genAIUsageMetadata = response.usageMetadata;
|
|
114
|
+
const output_tokens = (genAIUsageMetadata?.candidatesTokenCount ?? 0) +
|
|
115
|
+
(genAIUsageMetadata?.thoughtsTokenCount ?? 0);
|
|
116
|
+
lastUsageMetadata = {
|
|
117
|
+
input_tokens: genAIUsageMetadata?.promptTokenCount ?? 0,
|
|
118
|
+
output_tokens,
|
|
119
|
+
total_tokens: genAIUsageMetadata?.totalTokenCount ?? 0,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const chunk = convertResponseContentToChatGenerationChunk(response, {
|
|
123
|
+
usageMetadata: undefined});
|
|
124
|
+
if (!chunk) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
yield chunk;
|
|
128
|
+
await runManager?.handleLLMNewToken(chunk.text || '', undefined, undefined, undefined, undefined, { chunk });
|
|
129
|
+
}
|
|
130
|
+
if (lastUsageMetadata) {
|
|
131
|
+
const finalChunk = new ChatGenerationChunk({
|
|
132
|
+
text: '',
|
|
133
|
+
message: new AIMessageChunk({
|
|
134
|
+
content: '',
|
|
135
|
+
usage_metadata: lastUsageMetadata,
|
|
136
|
+
}),
|
|
137
|
+
});
|
|
138
|
+
yield finalChunk;
|
|
139
|
+
await runManager?.handleLLMNewToken(finalChunk.text || '', undefined, undefined, undefined, undefined, { chunk: finalChunk });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export { CustomChatGoogleGenerativeAI };
|
|
145
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/llm/google/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\r\nimport { AIMessageChunk } from '@langchain/core/messages';\r\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\r\nimport { ChatGoogleGenerativeAI } from '@langchain/google-genai';\r\nimport { getEnvironmentVariable } from '@langchain/core/utils/env';\r\nimport { GoogleGenerativeAI as GenerativeAI } from '@google/generative-ai';\r\nimport type {\r\n GenerateContentRequest,\r\n SafetySetting,\r\n} from '@google/generative-ai';\r\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\r\nimport type { BaseMessage, UsageMetadata } from '@langchain/core/messages';\r\nimport type { GeminiGenerationConfig } from '@langchain/google-common';\r\nimport type { GeminiApiUsageMetadata } from './types';\r\nimport type { GoogleClientOptions } from '@/types';\r\nimport {\r\n convertResponseContentToChatGenerationChunk,\r\n convertBaseMessagesToContent,\r\n} from './utils/common';\r\n\r\nexport class CustomChatGoogleGenerativeAI extends ChatGoogleGenerativeAI {\r\n thinkingConfig?: GeminiGenerationConfig['thinkingConfig'];\r\n constructor(fields: GoogleClientOptions) {\r\n super(fields);\r\n\r\n this.model = fields.model.replace(/^models\\//, '');\r\n\r\n this.maxOutputTokens = fields.maxOutputTokens ?? this.maxOutputTokens;\r\n\r\n if (this.maxOutputTokens != null && this.maxOutputTokens < 0) {\r\n throw new Error('`maxOutputTokens` must be a positive integer');\r\n }\r\n\r\n this.temperature = fields.temperature ?? this.temperature;\r\n if (\r\n this.temperature != null &&\r\n (this.temperature < 0 || this.temperature > 2)\r\n ) {\r\n throw new Error('`temperature` must be in the range of [0.0,2.0]');\r\n }\r\n\r\n this.topP = fields.topP ?? this.topP;\r\n if (this.topP != null && this.topP < 0) {\r\n throw new Error('`topP` must be a positive integer');\r\n }\r\n\r\n if (this.topP != null && this.topP > 1) {\r\n throw new Error('`topP` must be below 1.');\r\n }\r\n\r\n this.topK = fields.topK ?? this.topK;\r\n if (this.topK != null && this.topK < 0) {\r\n throw new Error('`topK` must be a positive integer');\r\n }\r\n\r\n this.stopSequences = fields.stopSequences ?? this.stopSequences;\r\n\r\n this.apiKey = fields.apiKey ?? getEnvironmentVariable('GOOGLE_API_KEY');\r\n if (this.apiKey == null || this.apiKey === '') {\r\n throw new Error(\r\n 'Please set an API key for Google GenerativeAI ' +\r\n 'in the environment variable GOOGLE_API_KEY ' +\r\n 'or in the `apiKey` field of the ' +\r\n 'ChatGoogleGenerativeAI constructor'\r\n );\r\n }\r\n\r\n this.safetySettings = fields.safetySettings ?? this.safetySettings;\r\n if (this.safetySettings && this.safetySettings.length > 0) {\r\n const safetySettingsSet = new Set(\r\n this.safetySettings.map((s) => s.category)\r\n );\r\n if (safetySettingsSet.size !== this.safetySettings.length) {\r\n throw new Error(\r\n 'The categories in `safetySettings` array must be unique'\r\n );\r\n }\r\n }\r\n\r\n this.thinkingConfig = fields.thinkingConfig ?? this.thinkingConfig;\r\n\r\n this.streaming = fields.streaming ?? this.streaming;\r\n this.json = fields.json;\r\n\r\n // @ts-ignore - Accessing private property from parent class\r\n this.client = new GenerativeAI(this.apiKey).getGenerativeModel(\r\n {\r\n model: this.model,\r\n safetySettings: this.safetySettings as SafetySetting[],\r\n generationConfig: {\r\n stopSequences: this.stopSequences,\r\n maxOutputTokens: this.maxOutputTokens,\r\n temperature: this.temperature,\r\n topP: this.topP,\r\n topK: this.topK,\r\n ...(this.json != null\r\n ? { responseMimeType: 'application/json' }\r\n : {}),\r\n },\r\n },\r\n {\r\n apiVersion: fields.apiVersion,\r\n baseUrl: fields.baseUrl,\r\n customHeaders: fields.customHeaders,\r\n }\r\n );\r\n this.streamUsage = fields.streamUsage ?? this.streamUsage;\r\n }\r\n\r\n static lc_name(): 'IllumaGoogleGenerativeAI' {\r\n return 'IllumaGoogleGenerativeAI';\r\n }\r\n\r\n invocationParams(\r\n options?: this['ParsedCallOptions']\r\n ): Omit<GenerateContentRequest, 'contents'> {\r\n const params = super.invocationParams(options);\r\n if (this.thinkingConfig) {\r\n /** @ts-ignore */\r\n this.client.generationConfig = {\r\n /** @ts-ignore */\r\n ...this.client.generationConfig,\r\n /** @ts-ignore */\r\n thinkingConfig: this.thinkingConfig,\r\n };\r\n }\r\n return params;\r\n }\r\n\r\n async *_streamResponseChunks(\r\n messages: BaseMessage[],\r\n options: this['ParsedCallOptions'],\r\n runManager?: CallbackManagerForLLMRun\r\n ): AsyncGenerator<ChatGenerationChunk> {\r\n const prompt = convertBaseMessagesToContent(\r\n messages,\r\n this._isMultimodalModel,\r\n this.useSystemInstruction\r\n );\r\n let actualPrompt = prompt;\r\n if (prompt?.[0].role === 'system') {\r\n const [systemInstruction] = prompt;\r\n /** @ts-ignore */\r\n this.client.systemInstruction = systemInstruction;\r\n actualPrompt = prompt.slice(1);\r\n }\r\n const parameters = this.invocationParams(options);\r\n const request = {\r\n ...parameters,\r\n contents: actualPrompt,\r\n };\r\n const stream = await this.caller.callWithOptions(\r\n { signal: options.signal },\r\n async () => {\r\n /** @ts-ignore */\r\n const { stream } = await this.client.generateContentStream(request);\r\n return stream;\r\n }\r\n );\r\n\r\n let index = 0;\r\n let lastUsageMetadata: UsageMetadata | undefined;\r\n for await (const response of stream) {\r\n if (\r\n 'usageMetadata' in response &&\r\n this.streamUsage !== false &&\r\n options.streamUsage !== false\r\n ) {\r\n const genAIUsageMetadata = response.usageMetadata as\r\n | GeminiApiUsageMetadata\r\n | undefined;\r\n\r\n const output_tokens =\r\n (genAIUsageMetadata?.candidatesTokenCount ?? 0) +\r\n (genAIUsageMetadata?.thoughtsTokenCount ?? 0);\r\n lastUsageMetadata = {\r\n input_tokens: genAIUsageMetadata?.promptTokenCount ?? 0,\r\n output_tokens,\r\n total_tokens: genAIUsageMetadata?.totalTokenCount ?? 0,\r\n };\r\n }\r\n\r\n const chunk = convertResponseContentToChatGenerationChunk(response, {\r\n usageMetadata: undefined,\r\n index,\r\n });\r\n index += 1;\r\n if (!chunk) {\r\n continue;\r\n }\r\n\r\n yield chunk;\r\n await runManager?.handleLLMNewToken(\r\n chunk.text || '',\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { chunk }\r\n );\r\n }\r\n\r\n if (lastUsageMetadata) {\r\n const finalChunk = new ChatGenerationChunk({\r\n text: '',\r\n message: new AIMessageChunk({\r\n content: '',\r\n usage_metadata: lastUsageMetadata,\r\n }),\r\n });\r\n yield finalChunk;\r\n await runManager?.handleLLMNewToken(\r\n finalChunk.text || '',\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { chunk: finalChunk }\r\n );\r\n }\r\n }\r\n}\r\n"],"names":["GenerativeAI"],"mappings":";;;;;;;AAAA;AAoBM,MAAO,4BAA6B,SAAQ,sBAAsB,CAAA;AACtE,IAAA,cAAc;AACd,IAAA,WAAA,CAAY,MAA2B,EAAA;QACrC,KAAK,CAAC,MAAM,CAAC;AAEb,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAElD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;AAErE,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;;QAGjE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;AACzD,QAAA,IACE,IAAI,CAAC,WAAW,IAAI,IAAI;AACxB,aAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAC9C;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;QAGpE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACpC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;;QAG5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACpC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;QAGtD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa;QAE/D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,sBAAsB,CAAC,gBAAgB,CAAC;AACvE,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;YAC7C,MAAM,IAAI,KAAK,CACb,gDAAgD;gBAC9C,6CAA6C;gBAC7C,kCAAkC;AAClC,gBAAA,oCAAoC,CACvC;;QAGH,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;AAClE,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAC3C;YACD,IAAI,iBAAiB,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACzD,gBAAA,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D;;;QAIL,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAElE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;AACnD,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;;AAGvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,kBAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAC5D;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAiC;AACtD,YAAA,gBAAgB,EAAE;gBAChB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI;AACf,sBAAE,EAAE,gBAAgB,EAAE,kBAAkB;sBACtC,EAAE,CAAC;AACR,aAAA;SACF,EACD;YACE,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa;AACpC,SAAA,CACF;QACD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;;AAG3D,IAAA,OAAO,OAAO,GAAA;AACZ,QAAA,OAAO,0BAA0B;;AAGnC,IAAA,gBAAgB,CACd,OAAmC,EAAA;QAEnC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;AAEvB,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG;;AAE7B,gBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB;;gBAE/B,cAAc,EAAE,IAAI,CAAC,cAAc;aACpC;;AAEH,QAAA,OAAO,MAAM;;IAGf,OAAO,qBAAqB,CAC1B,QAAuB,EACvB,OAAkC,EAClC,UAAqC,EAAA;AAErC,QAAA,MAAM,MAAM,GAAG,4BAA4B,CACzC,QAAQ,EACR,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,oBAAoB,CAC1B;QACD,IAAI,YAAY,GAAG,MAAM;QACzB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,YAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM;;AAElC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,iBAAiB;AACjD,YAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACjD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,GAAG,UAAU;AACb,YAAA,QAAQ,EAAE,YAAY;SACvB;AACD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC9C,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAC1B,YAAW;;AAET,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC;AACnE,YAAA,OAAO,MAAM;AACf,SAAC,CACF;AAGD,QAAA,IAAI,iBAA4C;AAChD,QAAA,WAAW,MAAM,QAAQ,IAAI,MAAM,EAAE;YACnC,IACE,eAAe,IAAI,QAAQ;gBAC3B,IAAI,CAAC,WAAW,KAAK,KAAK;AAC1B,gBAAA,OAAO,CAAC,WAAW,KAAK,KAAK,EAC7B;AACA,gBAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAEvB;gBAEb,MAAM,aAAa,GACjB,CAAC,kBAAkB,EAAE,oBAAoB,IAAI,CAAC;AAC9C,qBAAC,kBAAkB,EAAE,kBAAkB,IAAI,CAAC,CAAC;AAC/C,gBAAA,iBAAiB,GAAG;AAClB,oBAAA,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;oBACvD,aAAa;AACb,oBAAA,YAAY,EAAE,kBAAkB,EAAE,eAAe,IAAI,CAAC;iBACvD;;AAGH,YAAA,MAAM,KAAK,GAAG,2CAA2C,CAAC,QAAQ,EAAE;AAClE,gBAAA,aAAa,EAAE,SAEhB,CAAA,CAAC;YAEF,IAAI,CAAC,KAAK,EAAE;gBACV;;AAGF,YAAA,MAAM,KAAK;YACX,MAAM,UAAU,EAAE,iBAAiB,CACjC,KAAK,CAAC,IAAI,IAAI,EAAE,EAChB,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,CACV;;QAGH,IAAI,iBAAiB,EAAE;AACrB,YAAA,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC;AACzC,gBAAA,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI,cAAc,CAAC;AAC1B,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,cAAc,EAAE,iBAAiB;iBAClC,CAAC;AACH,aAAA,CAAC;AACF,YAAA,MAAM,UAAU;YAChB,MAAM,UAAU,EAAE,iBAAiB,CACjC,UAAU,CAAC,IAAI,IAAI,EAAE,EACrB,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB;;;AAGN;;;;"}
|