@langchain/core 1.2.0-dev-1775763803878 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +130 -0
- package/README.md +1 -1
- package/agents.cjs +1 -0
- package/agents.d.cts +1 -0
- package/agents.d.ts +1 -0
- package/agents.js +1 -0
- package/caches.cjs +1 -0
- package/caches.d.cts +1 -0
- package/caches.d.ts +1 -0
- package/caches.js +1 -0
- package/callbacks/base.cjs +1 -0
- package/callbacks/base.d.cts +1 -0
- package/callbacks/base.d.ts +1 -0
- package/callbacks/base.js +1 -0
- package/callbacks/dispatch/web.cjs +1 -0
- package/callbacks/dispatch/web.d.cts +1 -0
- package/callbacks/dispatch/web.d.ts +1 -0
- package/callbacks/dispatch/web.js +1 -0
- package/callbacks/dispatch.cjs +1 -0
- package/callbacks/dispatch.d.cts +1 -0
- package/callbacks/dispatch.d.ts +1 -0
- package/callbacks/dispatch.js +1 -0
- package/callbacks/manager.cjs +1 -0
- package/callbacks/manager.d.cts +1 -0
- package/callbacks/manager.d.ts +1 -0
- package/callbacks/manager.js +1 -0
- package/callbacks/promises.cjs +1 -0
- package/callbacks/promises.d.cts +1 -0
- package/callbacks/promises.d.ts +1 -0
- package/callbacks/promises.js +1 -0
- package/chat_history.cjs +1 -0
- package/chat_history.d.cts +1 -0
- package/chat_history.d.ts +1 -0
- package/chat_history.js +1 -0
- package/context.cjs +1 -0
- package/context.d.cts +1 -0
- package/context.d.ts +1 -0
- package/context.js +1 -0
- package/dist/callbacks/base.cjs +7 -3
- package/dist/callbacks/base.cjs.map +1 -1
- package/dist/callbacks/base.d.cts +20 -1
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts +20 -1
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/base.js +7 -3
- package/dist/callbacks/base.js.map +1 -1
- package/dist/callbacks/dispatch/index.cjs.map +1 -1
- package/dist/callbacks/dispatch/index.js.map +1 -1
- package/dist/callbacks/manager.cjs +29 -7
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.d.cts +4 -0
- package/dist/callbacks/manager.d.cts.map +1 -1
- package/dist/callbacks/manager.d.ts +4 -0
- package/dist/callbacks/manager.d.ts.map +1 -1
- package/dist/callbacks/manager.js +23 -1
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/example_selectors/conditional.cjs.map +1 -1
- package/dist/example_selectors/conditional.js.map +1 -1
- package/dist/example_selectors/length_based.cjs.map +1 -1
- package/dist/example_selectors/length_based.js.map +1 -1
- package/dist/example_selectors/semantic_similarity.cjs.map +1 -1
- package/dist/example_selectors/semantic_similarity.js.map +1 -1
- package/dist/indexing/base.cjs +3 -4
- package/dist/indexing/base.cjs.map +1 -1
- package/dist/indexing/base.js +1 -1
- package/dist/indexing/base.js.map +1 -1
- package/dist/language_models/base.cjs +9 -1
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +5 -0
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +5 -0
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js +9 -1
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs +71 -33
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts +74 -3
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts +74 -3
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js +72 -34
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/compat.cjs +255 -78
- package/dist/language_models/compat.cjs.map +1 -1
- package/dist/language_models/compat.d.cts +3 -17
- package/dist/language_models/compat.d.cts.map +1 -1
- package/dist/language_models/compat.d.ts +3 -17
- package/dist/language_models/compat.d.ts.map +1 -1
- package/dist/language_models/compat.js +256 -78
- package/dist/language_models/compat.js.map +1 -1
- package/dist/language_models/event.cjs.map +1 -1
- package/dist/language_models/event.d.cts +82 -90
- package/dist/language_models/event.d.cts.map +1 -1
- package/dist/language_models/event.d.ts +82 -90
- package/dist/language_models/event.d.ts.map +1 -1
- package/dist/language_models/event.js.map +1 -1
- package/dist/language_models/llms.cjs +18 -6
- package/dist/language_models/llms.cjs.map +1 -1
- package/dist/language_models/llms.d.cts.map +1 -1
- package/dist/language_models/llms.d.ts.map +1 -1
- package/dist/language_models/llms.js +18 -6
- package/dist/language_models/llms.js.map +1 -1
- package/dist/language_models/openai_completions_stream.cjs +308 -0
- package/dist/language_models/openai_completions_stream.cjs.map +1 -0
- package/dist/language_models/openai_completions_stream.d.cts +75 -0
- package/dist/language_models/openai_completions_stream.d.cts.map +1 -0
- package/dist/language_models/openai_completions_stream.d.ts +75 -0
- package/dist/language_models/openai_completions_stream.d.ts.map +1 -0
- package/dist/language_models/openai_completions_stream.js +301 -0
- package/dist/language_models/openai_completions_stream.js.map +1 -0
- package/dist/language_models/stream.cjs +216 -86
- package/dist/language_models/stream.cjs.map +1 -1
- package/dist/language_models/stream.d.cts +5 -28
- package/dist/language_models/stream.d.cts.map +1 -1
- package/dist/language_models/stream.d.ts +5 -28
- package/dist/language_models/stream.d.ts.map +1 -1
- package/dist/language_models/stream.js +216 -86
- package/dist/language_models/stream.js.map +1 -1
- package/dist/load/import_map.cjs +4 -0
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +4 -0
- package/dist/load/import_map.js.map +1 -1
- package/dist/load/index.cjs +19 -0
- package/dist/load/index.cjs.map +1 -1
- package/dist/load/index.d.cts +4 -0
- package/dist/load/index.d.cts.map +1 -1
- package/dist/load/index.d.ts +4 -0
- package/dist/load/index.d.ts.map +1 -1
- package/dist/load/index.js +19 -0
- package/dist/load/index.js.map +1 -1
- package/dist/load/map_keys.cjs +13 -7
- package/dist/load/map_keys.cjs.map +1 -1
- package/dist/load/map_keys.d.cts.map +1 -1
- package/dist/load/map_keys.d.ts.map +1 -1
- package/dist/load/map_keys.js +11 -2
- package/dist/load/map_keys.js.map +1 -1
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.js.map +1 -1
- package/dist/messages/ai.cjs +12 -9
- package/dist/messages/ai.cjs.map +1 -1
- package/dist/messages/ai.d.cts.map +1 -1
- package/dist/messages/ai.d.ts.map +1 -1
- package/dist/messages/ai.js +12 -9
- package/dist/messages/ai.js.map +1 -1
- package/dist/messages/base.cjs +10 -0
- package/dist/messages/base.cjs.map +1 -1
- package/dist/messages/base.d.cts +9 -0
- package/dist/messages/base.d.cts.map +1 -1
- package/dist/messages/base.d.ts +9 -0
- package/dist/messages/base.d.ts.map +1 -1
- package/dist/messages/base.js +10 -0
- package/dist/messages/base.js.map +1 -1
- package/dist/messages/block_translators/anthropic.cjs.map +1 -1
- package/dist/messages/block_translators/anthropic.js.map +1 -1
- package/dist/messages/block_translators/bedrock_converse.cjs.map +1 -1
- package/dist/messages/block_translators/bedrock_converse.js.map +1 -1
- package/dist/messages/block_translators/google.cjs.map +1 -1
- package/dist/messages/block_translators/google.js.map +1 -1
- package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
- package/dist/messages/block_translators/google_vertexai.js.map +1 -1
- package/dist/messages/block_translators/index.cjs +2 -0
- package/dist/messages/block_translators/index.cjs.map +1 -1
- package/dist/messages/block_translators/index.js +2 -0
- package/dist/messages/block_translators/index.js.map +1 -1
- package/dist/messages/block_translators/openai.cjs.map +1 -1
- package/dist/messages/block_translators/openai.js.map +1 -1
- package/dist/messages/block_translators/openrouter.cjs +101 -0
- package/dist/messages/block_translators/openrouter.cjs.map +1 -0
- package/dist/messages/block_translators/openrouter.js +101 -0
- package/dist/messages/block_translators/openrouter.js.map +1 -0
- package/dist/messages/index.d.cts +2 -2
- package/dist/messages/index.d.ts +2 -2
- package/dist/messages/modifier.cjs +6 -0
- package/dist/messages/modifier.cjs.map +1 -1
- package/dist/messages/modifier.d.cts +9 -4
- package/dist/messages/modifier.d.cts.map +1 -1
- package/dist/messages/modifier.d.ts +9 -4
- package/dist/messages/modifier.d.ts.map +1 -1
- package/dist/messages/modifier.js +6 -0
- package/dist/messages/modifier.js.map +1 -1
- package/dist/messages/transformers.cjs.map +1 -1
- package/dist/messages/transformers.js.map +1 -1
- package/dist/messages/utils.cjs +16 -2
- package/dist/messages/utils.cjs.map +1 -1
- package/dist/messages/utils.d.cts +9 -1
- package/dist/messages/utils.d.cts.map +1 -1
- package/dist/messages/utils.d.ts +9 -1
- package/dist/messages/utils.d.ts.map +1 -1
- package/dist/messages/utils.js +16 -2
- package/dist/messages/utils.js.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
- package/dist/output_parsers/standard_schema.cjs +3 -0
- package/dist/output_parsers/standard_schema.cjs.map +1 -1
- package/dist/output_parsers/standard_schema.d.cts +2 -0
- package/dist/output_parsers/standard_schema.d.cts.map +1 -1
- package/dist/output_parsers/standard_schema.d.ts +2 -0
- package/dist/output_parsers/standard_schema.d.ts.map +1 -1
- package/dist/output_parsers/standard_schema.js +3 -0
- package/dist/output_parsers/standard_schema.js.map +1 -1
- package/dist/output_parsers/structured.cjs +3 -0
- package/dist/output_parsers/structured.cjs.map +1 -1
- package/dist/output_parsers/structured.d.cts +2 -0
- package/dist/output_parsers/structured.d.cts.map +1 -1
- package/dist/output_parsers/structured.d.ts +2 -0
- package/dist/output_parsers/structured.d.ts.map +1 -1
- package/dist/output_parsers/structured.js +3 -0
- package/dist/output_parsers/structured.js.map +1 -1
- package/dist/output_parsers/xml.cjs.map +1 -1
- package/dist/output_parsers/xml.js.map +1 -1
- package/dist/prompts/base.cjs.map +1 -1
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/chat.cjs.map +1 -1
- package/dist/prompts/chat.js.map +1 -1
- package/dist/prompts/few_shot.cjs.map +1 -1
- package/dist/prompts/few_shot.js.map +1 -1
- package/dist/prompts/image.cjs.map +1 -1
- package/dist/prompts/image.js.map +1 -1
- package/dist/prompts/prompt.cjs +1 -1
- package/dist/prompts/prompt.cjs.map +1 -1
- package/dist/prompts/prompt.d.cts +1 -1
- package/dist/prompts/prompt.d.ts +1 -1
- package/dist/prompts/prompt.js +1 -1
- package/dist/prompts/prompt.js.map +1 -1
- package/dist/prompts/string.cjs.map +1 -1
- package/dist/prompts/string.js.map +1 -1
- package/dist/prompts/template.cjs +1 -1
- package/dist/prompts/template.cjs.map +1 -1
- package/dist/prompts/template.js.map +1 -1
- package/dist/retrievers/index.cjs.map +1 -1
- package/dist/retrievers/index.js.map +1 -1
- package/dist/runnables/base.cjs +5 -2
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.d.cts +43 -0
- package/dist/runnables/base.d.cts.map +1 -1
- package/dist/runnables/base.d.ts +43 -0
- package/dist/runnables/base.d.ts.map +1 -1
- package/dist/runnables/base.js +4 -1
- package/dist/runnables/base.js.map +1 -1
- package/dist/runnables/branch.cjs.map +1 -1
- package/dist/runnables/branch.js.map +1 -1
- package/dist/runnables/config.cjs +16 -8
- package/dist/runnables/config.cjs.map +1 -1
- package/dist/runnables/config.d.cts.map +1 -1
- package/dist/runnables/config.d.ts.map +1 -1
- package/dist/runnables/config.js +16 -8
- package/dist/runnables/config.js.map +1 -1
- package/dist/runnables/graph.cjs +6 -6
- package/dist/runnables/graph.cjs.map +1 -1
- package/dist/runnables/graph.js +1 -1
- package/dist/runnables/graph.js.map +1 -1
- package/dist/runnables/graph_mermaid.cjs.map +1 -1
- package/dist/runnables/graph_mermaid.js.map +1 -1
- package/dist/runnables/history.cjs +3 -0
- package/dist/runnables/history.cjs.map +1 -1
- package/dist/runnables/history.d.cts +3 -0
- package/dist/runnables/history.d.cts.map +1 -1
- package/dist/runnables/history.d.ts +3 -0
- package/dist/runnables/history.d.ts.map +1 -1
- package/dist/runnables/history.js +3 -0
- package/dist/runnables/history.js.map +1 -1
- package/dist/runnables/router.cjs.map +1 -1
- package/dist/runnables/router.js.map +1 -1
- package/dist/runnables/utils.cjs.map +1 -1
- package/dist/runnables/utils.js.map +1 -1
- package/dist/singletons/async_local_storage/context.cjs.map +1 -1
- package/dist/singletons/async_local_storage/context.js.map +1 -1
- package/dist/singletons/async_local_storage/index.cjs.map +1 -1
- package/dist/singletons/async_local_storage/index.js.map +1 -1
- package/dist/singletons/callbacks.cjs +1 -1
- package/dist/testing/fake_model_builder.cjs +10 -9
- package/dist/testing/fake_model_builder.cjs.map +1 -1
- package/dist/testing/fake_model_builder.d.cts +1 -2
- package/dist/testing/fake_model_builder.d.cts.map +1 -1
- package/dist/testing/fake_model_builder.d.ts +1 -2
- package/dist/testing/fake_model_builder.d.ts.map +1 -1
- package/dist/testing/fake_model_builder.js +10 -9
- package/dist/testing/fake_model_builder.js.map +1 -1
- package/dist/testing/index.cjs +16 -0
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +3 -1
- package/dist/testing/index.d.ts +3 -1
- package/dist/testing/index.js +10 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/matchers.cjs +3 -1
- package/dist/testing/matchers.cjs.map +1 -1
- package/dist/testing/matchers.d.cts +8 -4
- package/dist/testing/matchers.d.cts.map +1 -1
- package/dist/testing/matchers.d.ts +8 -4
- package/dist/testing/matchers.d.ts.map +1 -1
- package/dist/testing/matchers.js +3 -1
- package/dist/testing/matchers.js.map +1 -1
- package/dist/tools/index.cjs +4 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.cts.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tracers/console.cjs +30 -4
- package/dist/tracers/console.cjs.map +1 -1
- package/dist/tracers/console.d.cts.map +1 -1
- package/dist/tracers/console.d.ts.map +1 -1
- package/dist/tracers/console.js +28 -1
- package/dist/tracers/console.js.map +1 -1
- package/dist/tracers/event_stream.cjs.map +1 -1
- package/dist/tracers/event_stream.js.map +1 -1
- package/dist/tracers/tracer_langchain.cjs +70 -2
- package/dist/tracers/tracer_langchain.cjs.map +1 -1
- package/dist/tracers/tracer_langchain.d.cts +26 -1
- package/dist/tracers/tracer_langchain.d.cts.map +1 -1
- package/dist/tracers/tracer_langchain.d.ts +26 -1
- package/dist/tracers/tracer_langchain.d.ts.map +1 -1
- package/dist/tracers/tracer_langchain.js +70 -3
- package/dist/tracers/tracer_langchain.js.map +1 -1
- package/dist/utils/async_caller.cjs +132 -8
- package/dist/utils/async_caller.cjs.map +1 -1
- package/dist/utils/async_caller.d.cts +9 -1
- package/dist/utils/async_caller.d.cts.map +1 -1
- package/dist/utils/async_caller.d.ts +9 -1
- package/dist/utils/async_caller.d.ts.map +1 -1
- package/dist/utils/async_caller.js +130 -8
- package/dist/utils/async_caller.js.map +1 -1
- package/dist/utils/callbacks.cjs.map +1 -1
- package/dist/utils/callbacks.js.map +1 -1
- package/dist/utils/context.cjs.map +1 -1
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.d.cts.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/event_source_parse.cjs +5 -12
- package/dist/utils/event_source_parse.cjs.map +1 -1
- package/dist/utils/event_source_parse.js +5 -12
- package/dist/utils/event_source_parse.js.map +1 -1
- package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
- package/dist/utils/fast-json-patch/src/core.js.map +1 -1
- package/dist/utils/json_schema.cjs.map +1 -1
- package/dist/utils/json_schema.js.map +1 -1
- package/dist/utils/p-retry/index.cjs +3 -1
- package/dist/utils/p-retry/index.cjs.map +1 -1
- package/dist/utils/p-retry/index.js +3 -1
- package/dist/utils/p-retry/index.js.map +1 -1
- package/dist/utils/sax-js/sax.cjs.map +1 -1
- package/dist/utils/sax-js/sax.js.map +1 -1
- package/dist/utils/ssrf.cjs.map +1 -1
- package/dist/utils/ssrf.js.map +1 -1
- package/dist/utils/stream.d.cts +2 -2
- package/dist/utils/stream.d.cts.map +1 -1
- package/dist/utils/stream.d.ts +2 -2
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/testing/chat_models.cjs.map +1 -1
- package/dist/utils/testing/chat_models.js.map +1 -1
- package/dist/utils/testing/embeddings.cjs.map +1 -1
- package/dist/utils/testing/embeddings.js.map +1 -1
- package/dist/utils/testing/index.cjs +17 -1
- package/dist/utils/testing/index.cjs.map +1 -1
- package/dist/utils/testing/index.d.cts +3 -1
- package/dist/utils/testing/index.d.ts +3 -1
- package/dist/utils/testing/index.js +11 -2
- package/dist/utils/testing/index.js.map +1 -1
- package/dist/utils/testing/openai_stream_fixtures.cjs +160 -0
- package/dist/utils/testing/openai_stream_fixtures.cjs.map +1 -0
- package/dist/utils/testing/openai_stream_fixtures.d.cts +12 -0
- package/dist/utils/testing/openai_stream_fixtures.d.cts.map +1 -0
- package/dist/utils/testing/openai_stream_fixtures.d.ts +12 -0
- package/dist/utils/testing/openai_stream_fixtures.d.ts.map +1 -0
- package/dist/utils/testing/openai_stream_fixtures.js +155 -0
- package/dist/utils/testing/openai_stream_fixtures.js.map +1 -0
- package/dist/utils/testing/stream.cjs +136 -0
- package/dist/utils/testing/stream.cjs.map +1 -0
- package/dist/utils/testing/stream.d.cts +96 -0
- package/dist/utils/testing/stream.d.cts.map +1 -0
- package/dist/utils/testing/stream.d.ts +96 -0
- package/dist/utils/testing/stream.d.ts.map +1 -0
- package/dist/utils/testing/stream.js +136 -0
- package/dist/utils/testing/stream.js.map +1 -0
- package/dist/utils/testing/vectorstores.cjs.map +1 -1
- package/dist/utils/testing/vectorstores.js.map +1 -1
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.js.map +1 -1
- package/dist/utils/uuid/index.cjs +58 -0
- package/dist/utils/uuid/index.cjs.map +1 -0
- package/dist/utils/uuid/index.d.cts +26 -0
- package/dist/utils/uuid/index.d.cts.map +1 -0
- package/dist/utils/uuid/index.d.ts +26 -0
- package/dist/utils/uuid/index.d.ts.map +1 -0
- package/dist/utils/uuid/index.js +41 -0
- package/dist/utils/uuid/index.js.map +1 -0
- package/dist/utils/uuid/max.cjs +6 -0
- package/dist/utils/uuid/max.cjs.map +1 -0
- package/dist/utils/uuid/max.js +6 -0
- package/dist/utils/uuid/max.js.map +1 -0
- package/dist/utils/uuid/nil.cjs +6 -0
- package/dist/utils/uuid/nil.cjs.map +1 -0
- package/dist/utils/uuid/nil.js +6 -0
- package/dist/utils/uuid/nil.js.map +1 -0
- package/dist/utils/uuid/parse.cjs +11 -0
- package/dist/utils/uuid/parse.cjs.map +1 -0
- package/dist/utils/uuid/parse.d.cts +7 -0
- package/dist/utils/uuid/parse.d.cts.map +1 -0
- package/dist/utils/uuid/parse.d.ts +7 -0
- package/dist/utils/uuid/parse.d.ts.map +1 -0
- package/dist/utils/uuid/parse.js +11 -0
- package/dist/utils/uuid/parse.js.map +1 -0
- package/dist/utils/uuid/regex.cjs +6 -0
- package/dist/utils/uuid/regex.cjs.map +1 -0
- package/dist/utils/uuid/regex.js +6 -0
- package/dist/utils/uuid/regex.js.map +1 -0
- package/dist/utils/uuid/rng.cjs +9 -0
- package/dist/utils/uuid/rng.cjs.map +1 -0
- package/dist/utils/uuid/rng.js +9 -0
- package/dist/utils/uuid/rng.js.map +1 -0
- package/dist/utils/uuid/sha1.cjs +71 -0
- package/dist/utils/uuid/sha1.cjs.map +1 -0
- package/dist/utils/uuid/sha1.js +71 -0
- package/dist/utils/uuid/sha1.js.map +1 -0
- package/dist/utils/uuid/stringify.cjs +21 -0
- package/dist/utils/uuid/stringify.cjs.map +1 -0
- package/dist/utils/uuid/stringify.d.cts +5 -0
- package/dist/utils/uuid/stringify.d.cts.map +1 -0
- package/dist/utils/uuid/stringify.d.ts +5 -0
- package/dist/utils/uuid/stringify.d.ts.map +1 -0
- package/dist/utils/uuid/stringify.js +20 -0
- package/dist/utils/uuid/stringify.js.map +1 -0
- package/dist/utils/uuid/types.d.cts +26 -0
- package/dist/utils/uuid/types.d.cts.map +1 -0
- package/dist/utils/uuid/types.d.ts +26 -0
- package/dist/utils/uuid/types.d.ts.map +1 -0
- package/dist/utils/uuid/v1.cjs +69 -0
- package/dist/utils/uuid/v1.cjs.map +1 -0
- package/dist/utils/uuid/v1.d.cts +8 -0
- package/dist/utils/uuid/v1.d.cts.map +1 -0
- package/dist/utils/uuid/v1.d.ts +8 -0
- package/dist/utils/uuid/v1.d.ts.map +1 -0
- package/dist/utils/uuid/v1.js +69 -0
- package/dist/utils/uuid/v1.js.map +1 -0
- package/dist/utils/uuid/v1ToV6.cjs +14 -0
- package/dist/utils/uuid/v1ToV6.cjs.map +1 -0
- package/dist/utils/uuid/v1ToV6.js +14 -0
- package/dist/utils/uuid/v1ToV6.js.map +1 -0
- package/dist/utils/uuid/v35.cjs +36 -0
- package/dist/utils/uuid/v35.cjs.map +1 -0
- package/dist/utils/uuid/v35.js +34 -0
- package/dist/utils/uuid/v35.js.map +1 -0
- package/dist/utils/uuid/v4.cjs +25 -0
- package/dist/utils/uuid/v4.cjs.map +1 -0
- package/dist/utils/uuid/v4.d.cts +8 -0
- package/dist/utils/uuid/v4.d.cts.map +1 -0
- package/dist/utils/uuid/v4.d.ts +8 -0
- package/dist/utils/uuid/v4.d.ts.map +1 -0
- package/dist/utils/uuid/v4.js +25 -0
- package/dist/utils/uuid/v4.js.map +1 -0
- package/dist/utils/uuid/v5.cjs +12 -0
- package/dist/utils/uuid/v5.cjs.map +1 -0
- package/dist/utils/uuid/v5.d.cts +14 -0
- package/dist/utils/uuid/v5.d.cts.map +1 -0
- package/dist/utils/uuid/v5.d.ts +14 -0
- package/dist/utils/uuid/v5.d.ts.map +1 -0
- package/dist/utils/uuid/v5.js +12 -0
- package/dist/utils/uuid/v5.js.map +1 -0
- package/dist/utils/uuid/v6.cjs +23 -0
- package/dist/utils/uuid/v6.cjs.map +1 -0
- package/dist/utils/uuid/v6.d.cts +8 -0
- package/dist/utils/uuid/v6.d.cts.map +1 -0
- package/dist/utils/uuid/v6.d.ts +8 -0
- package/dist/utils/uuid/v6.d.ts.map +1 -0
- package/dist/utils/uuid/v6.js +23 -0
- package/dist/utils/uuid/v6.js.map +1 -0
- package/dist/utils/uuid/v7.cjs +57 -0
- package/dist/utils/uuid/v7.cjs.map +1 -0
- package/dist/utils/uuid/v7.d.cts +8 -0
- package/dist/utils/uuid/v7.d.cts.map +1 -0
- package/dist/utils/uuid/v7.d.ts +8 -0
- package/dist/utils/uuid/v7.d.ts.map +1 -0
- package/dist/utils/uuid/v7.js +57 -0
- package/dist/utils/uuid/v7.js.map +1 -0
- package/dist/utils/uuid/validate.cjs +9 -0
- package/dist/utils/uuid/validate.cjs.map +1 -0
- package/dist/utils/uuid/validate.d.cts +5 -0
- package/dist/utils/uuid/validate.d.cts.map +1 -0
- package/dist/utils/uuid/validate.d.ts +5 -0
- package/dist/utils/uuid/validate.d.ts.map +1 -0
- package/dist/utils/uuid/validate.js +9 -0
- package/dist/utils/uuid/validate.js.map +1 -0
- package/dist/utils/uuid/version.cjs +10 -0
- package/dist/utils/uuid/version.cjs.map +1 -0
- package/dist/utils/uuid/version.d.cts +5 -0
- package/dist/utils/uuid/version.d.cts.map +1 -0
- package/dist/utils/uuid/version.d.ts +5 -0
- package/dist/utils/uuid/version.d.ts.map +1 -0
- package/dist/utils/uuid/version.js +10 -0
- package/dist/utils/uuid/version.js.map +1 -0
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.cjs +26 -0
- package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.js +26 -0
- package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
- package/dist/vectorstores.cjs.map +1 -1
- package/dist/vectorstores.js.map +1 -1
- package/document_loaders/base.cjs +1 -0
- package/document_loaders/base.d.cts +1 -0
- package/document_loaders/base.d.ts +1 -0
- package/document_loaders/base.js +1 -0
- package/document_loaders/langsmith.cjs +1 -0
- package/document_loaders/langsmith.d.cts +1 -0
- package/document_loaders/langsmith.d.ts +1 -0
- package/document_loaders/langsmith.js +1 -0
- package/documents.cjs +1 -0
- package/documents.d.cts +1 -0
- package/documents.d.ts +1 -0
- package/documents.js +1 -0
- package/embeddings.cjs +1 -0
- package/embeddings.d.cts +1 -0
- package/embeddings.d.ts +1 -0
- package/embeddings.js +1 -0
- package/errors.cjs +1 -0
- package/errors.d.cts +1 -0
- package/errors.d.ts +1 -0
- package/errors.js +1 -0
- package/example_selectors.cjs +1 -0
- package/example_selectors.d.cts +1 -0
- package/example_selectors.d.ts +1 -0
- package/example_selectors.js +1 -0
- package/indexing.cjs +1 -0
- package/indexing.d.cts +1 -0
- package/indexing.d.ts +1 -0
- package/indexing.js +1 -0
- package/language_models/base.cjs +1 -0
- package/language_models/base.d.cts +1 -0
- package/language_models/base.d.ts +1 -0
- package/language_models/base.js +1 -0
- package/language_models/chat_models.cjs +1 -0
- package/language_models/chat_models.d.cts +1 -0
- package/language_models/chat_models.d.ts +1 -0
- package/language_models/chat_models.js +1 -0
- package/language_models/compat.cjs +1 -0
- package/language_models/compat.d.cts +1 -0
- package/language_models/compat.d.ts +1 -0
- package/language_models/compat.js +1 -0
- package/language_models/event.cjs +1 -0
- package/language_models/event.d.cts +1 -0
- package/language_models/event.d.ts +1 -0
- package/language_models/event.js +1 -0
- package/language_models/llms.cjs +1 -0
- package/language_models/llms.d.cts +1 -0
- package/language_models/llms.d.ts +1 -0
- package/language_models/llms.js +1 -0
- package/language_models/openai_completions_stream.cjs +1 -0
- package/language_models/openai_completions_stream.d.cts +1 -0
- package/language_models/openai_completions_stream.d.ts +1 -0
- package/language_models/openai_completions_stream.js +1 -0
- package/language_models/profile.cjs +1 -0
- package/language_models/profile.d.cts +1 -0
- package/language_models/profile.d.ts +1 -0
- package/language_models/profile.js +1 -0
- package/language_models/stream.cjs +1 -0
- package/language_models/stream.d.cts +1 -0
- package/language_models/stream.d.ts +1 -0
- package/language_models/stream.js +1 -0
- package/language_models/structured_output.cjs +1 -0
- package/language_models/structured_output.d.cts +1 -0
- package/language_models/structured_output.d.ts +1 -0
- package/language_models/structured_output.js +1 -0
- package/load/serializable.cjs +1 -0
- package/load/serializable.d.cts +1 -0
- package/load/serializable.d.ts +1 -0
- package/load/serializable.js +1 -0
- package/load.cjs +1 -0
- package/load.d.cts +1 -0
- package/load.d.ts +1 -0
- package/load.js +1 -0
- package/memory.cjs +1 -0
- package/memory.d.cts +1 -0
- package/memory.d.ts +1 -0
- package/memory.js +1 -0
- package/messages/tool.cjs +1 -0
- package/messages/tool.d.cts +1 -0
- package/messages/tool.d.ts +1 -0
- package/messages/tool.js +1 -0
- package/messages.cjs +1 -0
- package/messages.d.cts +1 -0
- package/messages.d.ts +1 -0
- package/messages.js +1 -0
- package/output_parsers/openai_functions.cjs +1 -0
- package/output_parsers/openai_functions.d.cts +1 -0
- package/output_parsers/openai_functions.d.ts +1 -0
- package/output_parsers/openai_functions.js +1 -0
- package/output_parsers/openai_tools.cjs +1 -0
- package/output_parsers/openai_tools.d.cts +1 -0
- package/output_parsers/openai_tools.d.ts +1 -0
- package/output_parsers/openai_tools.js +1 -0
- package/output_parsers.cjs +1 -0
- package/output_parsers.d.cts +1 -0
- package/output_parsers.d.ts +1 -0
- package/output_parsers.js +1 -0
- package/outputs.cjs +1 -0
- package/outputs.d.cts +1 -0
- package/outputs.d.ts +1 -0
- package/outputs.js +1 -0
- package/package.json +34 -14
- package/prompt_values.cjs +1 -0
- package/prompt_values.d.cts +1 -0
- package/prompt_values.d.ts +1 -0
- package/prompt_values.js +1 -0
- package/prompts.cjs +1 -0
- package/prompts.d.cts +1 -0
- package/prompts.d.ts +1 -0
- package/prompts.js +1 -0
- package/retrievers/document_compressors.cjs +1 -0
- package/retrievers/document_compressors.d.cts +1 -0
- package/retrievers/document_compressors.d.ts +1 -0
- package/retrievers/document_compressors.js +1 -0
- package/retrievers.cjs +1 -0
- package/retrievers.d.cts +1 -0
- package/retrievers.d.ts +1 -0
- package/retrievers.js +1 -0
- package/runnables/graph.cjs +1 -0
- package/runnables/graph.d.cts +1 -0
- package/runnables/graph.d.ts +1 -0
- package/runnables/graph.js +1 -0
- package/runnables.cjs +1 -0
- package/runnables.d.cts +1 -0
- package/runnables.d.ts +1 -0
- package/runnables.js +1 -0
- package/singletons.cjs +1 -0
- package/singletons.d.cts +1 -0
- package/singletons.d.ts +1 -0
- package/singletons.js +1 -0
- package/stores.cjs +1 -0
- package/stores.d.cts +1 -0
- package/stores.d.ts +1 -0
- package/stores.js +1 -0
- package/structured_query.cjs +1 -0
- package/structured_query.d.cts +1 -0
- package/structured_query.d.ts +1 -0
- package/structured_query.js +1 -0
- package/testing.cjs +1 -0
- package/testing.d.cts +1 -0
- package/testing.d.ts +1 -0
- package/testing.js +1 -0
- package/tools.cjs +1 -0
- package/tools.d.cts +1 -0
- package/tools.d.ts +1 -0
- package/tools.js +1 -0
- package/tracers/base.cjs +1 -0
- package/tracers/base.d.cts +1 -0
- package/tracers/base.d.ts +1 -0
- package/tracers/base.js +1 -0
- package/tracers/console.cjs +1 -0
- package/tracers/console.d.cts +1 -0
- package/tracers/console.d.ts +1 -0
- package/tracers/console.js +1 -0
- package/tracers/log_stream.cjs +1 -0
- package/tracers/log_stream.d.cts +1 -0
- package/tracers/log_stream.d.ts +1 -0
- package/tracers/log_stream.js +1 -0
- package/tracers/run_collector.cjs +1 -0
- package/tracers/run_collector.d.cts +1 -0
- package/tracers/run_collector.d.ts +1 -0
- package/tracers/run_collector.js +1 -0
- package/tracers/tracer_langchain.cjs +1 -0
- package/tracers/tracer_langchain.d.cts +1 -0
- package/tracers/tracer_langchain.d.ts +1 -0
- package/tracers/tracer_langchain.js +1 -0
- package/types/stream.cjs +1 -0
- package/types/stream.d.cts +1 -0
- package/types/stream.d.ts +1 -0
- package/types/stream.js +1 -0
- package/utils/async_caller.cjs +1 -0
- package/utils/async_caller.d.cts +1 -0
- package/utils/async_caller.d.ts +1 -0
- package/utils/async_caller.js +1 -0
- package/utils/chunk_array.cjs +1 -0
- package/utils/chunk_array.d.cts +1 -0
- package/utils/chunk_array.d.ts +1 -0
- package/utils/chunk_array.js +1 -0
- package/utils/context.cjs +1 -0
- package/utils/context.d.cts +1 -0
- package/utils/context.d.ts +1 -0
- package/utils/context.js +1 -0
- package/utils/env.cjs +1 -0
- package/utils/env.d.cts +1 -0
- package/utils/env.d.ts +1 -0
- package/utils/env.js +1 -0
- package/utils/event_source_parse.cjs +1 -0
- package/utils/event_source_parse.d.cts +1 -0
- package/utils/event_source_parse.d.ts +1 -0
- package/utils/event_source_parse.js +1 -0
- package/utils/format.cjs +1 -0
- package/utils/format.d.cts +1 -0
- package/utils/format.d.ts +1 -0
- package/utils/format.js +1 -0
- package/utils/function_calling.cjs +1 -0
- package/utils/function_calling.d.cts +1 -0
- package/utils/function_calling.d.ts +1 -0
- package/utils/function_calling.js +1 -0
- package/utils/hash.cjs +1 -0
- package/utils/hash.d.cts +1 -0
- package/utils/hash.d.ts +1 -0
- package/utils/hash.js +1 -0
- package/utils/json_patch.cjs +1 -0
- package/utils/json_patch.d.cts +1 -0
- package/utils/json_patch.d.ts +1 -0
- package/utils/json_patch.js +1 -0
- package/utils/json_schema.cjs +1 -0
- package/utils/json_schema.d.cts +1 -0
- package/utils/json_schema.d.ts +1 -0
- package/utils/json_schema.js +1 -0
- package/utils/math.cjs +1 -0
- package/utils/math.d.cts +1 -0
- package/utils/math.d.ts +1 -0
- package/utils/math.js +1 -0
- package/utils/ssrf.cjs +1 -0
- package/utils/ssrf.d.cts +1 -0
- package/utils/ssrf.d.ts +1 -0
- package/utils/ssrf.js +1 -0
- package/utils/standard_schema.cjs +1 -0
- package/utils/standard_schema.d.cts +1 -0
- package/utils/standard_schema.d.ts +1 -0
- package/utils/standard_schema.js +1 -0
- package/utils/stream.cjs +1 -0
- package/utils/stream.d.cts +1 -0
- package/utils/stream.d.ts +1 -0
- package/utils/stream.js +1 -0
- package/utils/testing.cjs +1 -0
- package/utils/testing.d.cts +1 -0
- package/utils/testing.d.ts +1 -0
- package/utils/testing.js +1 -0
- package/utils/tiktoken.cjs +1 -0
- package/utils/tiktoken.d.cts +1 -0
- package/utils/tiktoken.d.ts +1 -0
- package/utils/tiktoken.js +1 -0
- package/utils/types.cjs +1 -0
- package/utils/types.d.cts +1 -0
- package/utils/types.d.ts +1 -0
- package/utils/types.js +1 -0
- package/utils/uuid.cjs +1 -0
- package/utils/uuid.d.cts +1 -0
- package/utils/uuid.d.ts +1 -0
- package/utils/uuid.js +1 -0
- package/vectorstores.cjs +1 -0
- package/vectorstores.d.cts +1 -0
- package/vectorstores.d.ts +1 -0
- package/vectorstores.js +1 -0
|
@@ -8,7 +8,22 @@ let langsmith_run_trees = require("langsmith/run_trees");
|
|
|
8
8
|
let langsmith = require("langsmith");
|
|
9
9
|
let langsmith_singletons_traceable = require("langsmith/singletons/traceable");
|
|
10
10
|
//#region src/tracers/tracer_langchain.ts
|
|
11
|
-
var tracer_langchain_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
11
|
+
var tracer_langchain_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
12
|
+
LangChainTracer: () => LangChainTracer,
|
|
13
|
+
OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS: () => OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Keys that should be inherited from `tracerInheritableMetadata` even when
|
|
17
|
+
* the run already has a value for them. This lets nested contexts
|
|
18
|
+
* (e.g. a subagent invoked from inside a parent agent) override a
|
|
19
|
+
* LangSmith-only tracing metadata value that was set by an ancestor.
|
|
20
|
+
*
|
|
21
|
+
* Keep this list very small: every key here loses the default
|
|
22
|
+
* "first wins" protection and is always clobbered by the nearest
|
|
23
|
+
* enclosing tracer config. Only keys that are strictly for LangSmith
|
|
24
|
+
* tracing bookkeeping should be added.
|
|
25
|
+
*/
|
|
26
|
+
const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS = new Set(["ls_agent_type"]);
|
|
12
27
|
/**
|
|
13
28
|
* Extract usage_metadata from chat generations.
|
|
14
29
|
*
|
|
@@ -27,21 +42,28 @@ var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTra
|
|
|
27
42
|
client;
|
|
28
43
|
replicas;
|
|
29
44
|
usesRunTreeMap = true;
|
|
45
|
+
tracingMetadata;
|
|
46
|
+
tracingTags = [];
|
|
30
47
|
constructor(fields = {}) {
|
|
31
48
|
super(fields);
|
|
32
|
-
|
|
49
|
+
this.fields = fields;
|
|
50
|
+
const { exampleId, projectName, client, replicas, metadata, tags } = fields;
|
|
33
51
|
this.projectName = projectName ?? (0, langsmith.getDefaultProjectName)();
|
|
34
52
|
this.replicas = replicas;
|
|
35
53
|
this.exampleId = exampleId;
|
|
36
54
|
this.client = client ?? require_tracer.getDefaultLangChainClientSingleton();
|
|
55
|
+
this.tracingMetadata = metadata ? { ...metadata } : void 0;
|
|
56
|
+
this.tracingTags = tags ?? [];
|
|
37
57
|
const traceableTree = LangChainTracer.getTraceableRunTree();
|
|
38
58
|
if (traceableTree) this.updateFromRunTree(traceableTree);
|
|
39
59
|
}
|
|
40
60
|
async persistRun(_run) {}
|
|
41
61
|
async onRunCreate(run) {
|
|
62
|
+
_patchMissingTracingDefaults(this, run);
|
|
42
63
|
if (!run.extra?.lc_defers_inputs) await this.getRunTreeWithTracingConfig(run.id)?.postRun();
|
|
43
64
|
}
|
|
44
65
|
async onRunUpdate(run) {
|
|
66
|
+
_patchMissingTracingDefaults(this, run);
|
|
45
67
|
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
46
68
|
if (run.extra?.lc_defers_inputs) await runTree?.postRun();
|
|
47
69
|
else await runTree?.patchRun();
|
|
@@ -58,6 +80,24 @@ var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTra
|
|
|
58
80
|
}
|
|
59
81
|
}
|
|
60
82
|
}
|
|
83
|
+
copyWithTracingConfig({ metadata, tags }) {
|
|
84
|
+
let mergedMetadata;
|
|
85
|
+
if (metadata === void 0) mergedMetadata = this.tracingMetadata ? { ...this.tracingMetadata } : void 0;
|
|
86
|
+
else if (this.tracingMetadata === void 0) mergedMetadata = { ...metadata };
|
|
87
|
+
else {
|
|
88
|
+
mergedMetadata = { ...this.tracingMetadata };
|
|
89
|
+
for (const [key, value] of Object.entries(metadata)) if (!Object.prototype.hasOwnProperty.call(mergedMetadata, key) || OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)) mergedMetadata[key] = value;
|
|
90
|
+
}
|
|
91
|
+
const mergedTags = tags ? Array.from(new Set([...this.tracingTags, ...tags])) : [...this.tracingTags];
|
|
92
|
+
const copied = new LangChainTracer({
|
|
93
|
+
...this.fields,
|
|
94
|
+
metadata: mergedMetadata,
|
|
95
|
+
tags: mergedTags
|
|
96
|
+
});
|
|
97
|
+
copied.runMap = this.runMap;
|
|
98
|
+
copied.runTreeMap = this.runTreeMap;
|
|
99
|
+
return copied;
|
|
100
|
+
}
|
|
61
101
|
getRun(id) {
|
|
62
102
|
return this.runTreeMap.get(id);
|
|
63
103
|
}
|
|
@@ -84,6 +124,13 @@ var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTra
|
|
|
84
124
|
this.replicas = runTree.replicas ?? this.replicas;
|
|
85
125
|
this.projectName = runTree.project_name ?? this.projectName;
|
|
86
126
|
this.exampleId = runTree.reference_example_id ?? this.exampleId;
|
|
127
|
+
this.fields = {
|
|
128
|
+
...this.fields,
|
|
129
|
+
client: this.client,
|
|
130
|
+
replicas: this.replicas,
|
|
131
|
+
projectName: this.projectName,
|
|
132
|
+
exampleId: this.exampleId
|
|
133
|
+
};
|
|
87
134
|
}
|
|
88
135
|
getRunTreeWithTracingConfig(id) {
|
|
89
136
|
const runTree = this.runTreeMap.get(id);
|
|
@@ -104,9 +151,30 @@ var LangChainTracer = class LangChainTracer extends require_tracers_base.BaseTra
|
|
|
104
151
|
return;
|
|
105
152
|
}
|
|
106
153
|
}
|
|
154
|
+
static [Symbol.hasInstance](instance) {
|
|
155
|
+
if (typeof instance !== "object" || instance === null) return false;
|
|
156
|
+
const candidate = instance;
|
|
157
|
+
return "name" in candidate && candidate.name === "langchain_tracer" && "copyWithTracingConfig" in candidate && typeof candidate.copyWithTracingConfig === "function" && "getRunTreeWithTracingConfig" in candidate && typeof candidate.getRunTreeWithTracingConfig === "function";
|
|
158
|
+
}
|
|
107
159
|
};
|
|
160
|
+
function _patchMissingTracingDefaults(tracer, run) {
|
|
161
|
+
if (tracer.tracingMetadata) {
|
|
162
|
+
run.extra ??= {};
|
|
163
|
+
const metadata = run.extra.metadata ?? {};
|
|
164
|
+
let didPatchMetadata = false;
|
|
165
|
+
for (const [key, value] of Object.entries(tracer.tracingMetadata)) if (!Object.prototype.hasOwnProperty.call(metadata, key) || OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)) {
|
|
166
|
+
if (metadata[key] !== value) {
|
|
167
|
+
metadata[key] = value;
|
|
168
|
+
didPatchMetadata = true;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (didPatchMetadata) run.extra.metadata = metadata;
|
|
172
|
+
}
|
|
173
|
+
if (tracer.tracingTags.length > 0) run.tags = Array.from(new Set([...run.tags ?? [], ...tracer.tracingTags]));
|
|
174
|
+
}
|
|
108
175
|
//#endregion
|
|
109
176
|
exports.LangChainTracer = LangChainTracer;
|
|
177
|
+
exports.OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS = OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS;
|
|
110
178
|
Object.defineProperty(exports, "tracer_langchain_exports", {
|
|
111
179
|
enumerable: true,
|
|
112
180
|
get: function() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.cjs","names":["AIMessage","mergeUsageMetadata","BaseTracer","getDefaultLangChainClientSingleton","RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAsDA,SAAS,iCACP,aAC2B;CAC3B,IAAI,SAAoC,KAAA;AACxC,MAAK,MAAM,mBAAmB,YAC5B,MAAK,MAAM,cAAc,gBACvB,KACEA,WAAAA,UAAU,WAAW,WAAW,QAAQ,IACxC,WAAW,QAAQ,mBAAmB,KAAA,EAEtC,UAASC,iBAAAA,mBAAmB,QAAQ,WAAW,QAAQ,eAAe;AAI5E,QAAO;;AAGT,IAAa,kBAAb,MAAa,wBACHC,qBAAAA,WAEV;CACE,OAAO;CAEP;CAEA;CAEA;CAEA;CAEA,iBAAiB;CAEjB,YAAY,SAAgC,EAAE,EAAE;AAC9C,QAAM,OAAO;EACb,MAAM,EAAE,WAAW,aAAa,QAAQ,aAAa;AAErD,OAAK,cAAc,gBAAA,GAAA,UAAA,wBAAsC;AACzD,OAAK,WAAW;AAChB,OAAK,YAAY;AACjB,OAAK,SAAS,UAAUC,eAAAA,oCAAoC;EAE5D,MAAM,gBAAgB,gBAAgB,qBAAqB;AAC3D,MAAI,cACF,MAAK,kBAAkB,cAAc;;CAIzC,MAAgB,WAAW,MAA0B;CAIrD,MAAM,YAAY,KAAyB;AACzC,MAAI,CAAC,IAAI,OAAO,iBAEd,OADgB,KAAK,4BAA4B,IAAI,GAAG,EACzC,SAAS;;CAI5B,MAAM,YAAY,KAAyB;EACzC,MAAM,UAAU,KAAK,4BAA4B,IAAI,GAAG;AACxD,MAAI,IAAI,OAAO,iBACb,OAAM,SAAS,SAAS;MAExB,OAAM,SAAS,UAAU;;CAI7B,SAAS,KAA0B;EAEjC,MAAM,UAAU,IAAI;AAGpB,MAAI,SAAS,aAAa;GACxB,MAAM,gBAAgB,iCACpB,QAAQ,YACT;AACD,OAAI,kBAAkB,KAAA,GAAW;AAC/B,QAAI,QAAQ,IAAI,SAAS,EAAE;IAC3B,MAAM,WACH,IAAI,MAAM,YAAoD,EAAE;AACnE,aAAS,iBAAiB;AAC1B,QAAI,MAAM,WAAW;;;;CAK3B,OAAO,IAA6B;AAClC,SAAO,KAAK,WAAW,IAAI,GAAG;;CAGhC,kBAAkB,SAAkB;AAClC,OAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;EACxC,IAAI,UAAmB;EACvB,MAAM,0BAAU,IAAI,KAAa;AACjC,SAAO,QAAQ,YAAY;AACzB,OAAI,QAAQ,IAAI,QAAQ,GAAG,CAAE;AAC7B,WAAQ,IAAI,QAAQ,GAAG;AAEvB,OAAI,CAAC,QAAQ,WAAY;AACzB,aAAU,QAAQ;;AAEpB,UAAQ,OAAO;EAEf,MAAM,QAAQ,CAAC,QAAQ;AACvB,SAAO,MAAM,SAAS,GAAG;GACvB,MAAM,UAAU,MAAM,OAAO;AAC7B,OAAI,CAAC,WAAW,QAAQ,IAAI,QAAQ,GAAG,CAAE;AACzC,WAAQ,IAAI,QAAQ,GAAG;AAEvB,QAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;AACxC,OAAI,QAAQ,WACV,OAAM,KAAK,GAAG,QAAQ,WAAW;;AAIrC,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,WAAW,QAAQ,YAAY,KAAK;AACzC,OAAK,cAAc,QAAQ,gBAAgB,KAAK;AAChD,OAAK,YAAY,QAAQ,wBAAwB,KAAK;;CAGxD,4BAA4B,IAAiC;EAC3D,MAAM,UAAU,KAAK,WAAW,IAAI,GAAG;AACvC,MAAI,CAAC,QAAS,QAAO,KAAA;AAErB,SAAO,IAAIC,oBAAAA,QAAQ;GACjB,GAAG;GACH,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,UAAU,KAAK;GACf,sBAAsB,KAAK;GAC3B,gBAAgB;GACjB,CAAC;;CAGJ,OAAO,sBAA2C;AAChD,MAAI;AACF,WAAA,GAAA,+BAAA,mBAOI,KAAK;UAEH;AACN"}
|
|
1
|
+
{"version":3,"file":"tracer_langchain.cjs","names":["AIMessage","mergeUsageMetadata","BaseTracer","getDefaultLangChainClientSingleton","RunTree"],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n metadata?: Record<string, unknown>;\n tags?: string[];\n}\n\n/**\n * Keys that should be inherited from `tracerInheritableMetadata` even when\n * the run already has a value for them. This lets nested contexts\n * (e.g. a subagent invoked from inside a parent agent) override a\n * LangSmith-only tracing metadata value that was set by an ancestor.\n *\n * Keep this list very small: every key here loses the default\n * \"first wins\" protection and is always clobbered by the nearest\n * enclosing tracer config. Only keys that are strictly for LangSmith\n * tracing bookkeeping should be added.\n */\nexport const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS = new Set<string>([\n \"ls_agent_type\",\n]);\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n tracingMetadata?: Record<string, unknown>;\n\n tracingTags: string[] = [];\n\n constructor(protected fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas, metadata, tags } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n this.tracingMetadata = metadata ? { ...metadata } : undefined;\n this.tracingTags = tags ?? [];\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n _patchMissingTracingDefaults(this, run);\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n _patchMissingTracingDefaults(this, run);\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n copyWithTracingConfig({\n metadata,\n tags,\n }: {\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): LangChainTracer {\n let mergedMetadata: Record<string, unknown> | undefined;\n if (metadata === undefined) {\n mergedMetadata = this.tracingMetadata\n ? { ...this.tracingMetadata }\n : undefined;\n } else if (this.tracingMetadata === undefined) {\n mergedMetadata = { ...metadata };\n } else {\n mergedMetadata = { ...this.tracingMetadata };\n for (const [key, value] of Object.entries(metadata)) {\n // For allowlisted LangSmith-only inheritable metadata keys (e.g.\n // `ls_agent_type`), nested callers are allowed to OVERRIDE the\n // value inherited from an ancestor. For all other keys we keep\n // the existing \"first wins\" behavior so that ancestor-provided\n // tracing metadata is not accidentally clobbered by child runs.\n if (\n !Object.prototype.hasOwnProperty.call(mergedMetadata, key) ||\n OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)\n ) {\n mergedMetadata[key] = value;\n }\n }\n }\n\n const mergedTags = tags\n ? Array.from(new Set([...this.tracingTags, ...tags]))\n : [...this.tracingTags];\n\n const copied = new LangChainTracer({\n ...this.fields,\n metadata: mergedMetadata,\n tags: mergedTags,\n });\n copied.runMap = this.runMap;\n copied.runTreeMap = this.runTreeMap;\n return copied;\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n this.fields = {\n ...this.fields,\n client: this.client,\n replicas: this.replicas,\n projectName: this.projectName,\n exampleId: this.exampleId,\n };\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n\n static [Symbol.hasInstance](instance: unknown): boolean {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n const candidate = instance as Record<string, unknown>;\n return (\n \"name\" in candidate &&\n candidate.name === \"langchain_tracer\" &&\n \"copyWithTracingConfig\" in candidate &&\n typeof candidate.copyWithTracingConfig === \"function\" &&\n \"getRunTreeWithTracingConfig\" in candidate &&\n typeof candidate.getRunTreeWithTracingConfig === \"function\"\n );\n }\n}\n\nfunction _patchMissingTracingDefaults(tracer: LangChainTracer, run: Run): void {\n if (tracer.tracingMetadata) {\n run.extra ??= {};\n const metadata: Record<string, unknown> =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n let didPatchMetadata = false;\n for (const [key, value] of Object.entries(tracer.tracingMetadata)) {\n // `OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS` are a small, LangSmith-only\n // allowlist that bypasses the \"first wins\" merge so a nested caller\n // (e.g. a subagent) can override a parent-set value.\n if (\n !Object.prototype.hasOwnProperty.call(metadata, key) ||\n OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)\n ) {\n if (metadata[key] !== value) {\n metadata[key] = value;\n didPatchMetadata = true;\n }\n }\n }\n if (didPatchMetadata) {\n run.extra.metadata = metadata;\n }\n }\n\n if (tracer.tracingTags.length > 0) {\n run.tags = Array.from(\n new Set([...(run.tags ?? []), ...tracer.tracingTags])\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -27,24 +27,49 @@ interface LangChainTracerFields extends BaseCallbackHandlerInput {
|
|
|
27
27
|
projectName?: string;
|
|
28
28
|
client?: LangSmithTracingClientInterface;
|
|
29
29
|
replicas?: RunTreeConfig["replicas"];
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
tags?: string[];
|
|
30
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Keys that should be inherited from `tracerInheritableMetadata` even when
|
|
35
|
+
* the run already has a value for them. This lets nested contexts
|
|
36
|
+
* (e.g. a subagent invoked from inside a parent agent) override a
|
|
37
|
+
* LangSmith-only tracing metadata value that was set by an ancestor.
|
|
38
|
+
*
|
|
39
|
+
* Keep this list very small: every key here loses the default
|
|
40
|
+
* "first wins" protection and is always clobbered by the nearest
|
|
41
|
+
* enclosing tracer config. Only keys that are strictly for LangSmith
|
|
42
|
+
* tracing bookkeeping should be added.
|
|
43
|
+
*/
|
|
44
|
+
declare const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS: Set<string>;
|
|
31
45
|
declare class LangChainTracer extends BaseTracer implements LangChainTracerFields {
|
|
46
|
+
protected fields: LangChainTracerFields;
|
|
32
47
|
name: string;
|
|
33
48
|
projectName?: string;
|
|
34
49
|
exampleId?: string;
|
|
35
50
|
client: LangSmithTracingClientInterface;
|
|
36
51
|
replicas?: RunTreeConfig["replicas"];
|
|
37
52
|
usesRunTreeMap: boolean;
|
|
53
|
+
tracingMetadata?: Record<string, unknown>;
|
|
54
|
+
tracingTags: string[];
|
|
38
55
|
constructor(fields?: LangChainTracerFields);
|
|
39
56
|
protected persistRun(_run: Run): Promise<void>;
|
|
40
57
|
onRunCreate(run: Run): Promise<void>;
|
|
41
58
|
onRunUpdate(run: Run): Promise<void>;
|
|
42
59
|
onLLMEnd(run: Run$2): void;
|
|
60
|
+
copyWithTracingConfig({
|
|
61
|
+
metadata,
|
|
62
|
+
tags
|
|
63
|
+
}: {
|
|
64
|
+
metadata?: Record<string, unknown>;
|
|
65
|
+
tags?: string[];
|
|
66
|
+
}): LangChainTracer;
|
|
43
67
|
getRun(id: string): Run | undefined;
|
|
44
68
|
updateFromRunTree(runTree: RunTree): void;
|
|
45
69
|
getRunTreeWithTracingConfig(id: string): RunTree | undefined;
|
|
46
70
|
static getTraceableRunTree(): RunTree | undefined;
|
|
71
|
+
static [Symbol.hasInstance](instance: unknown): boolean;
|
|
47
72
|
}
|
|
48
73
|
//#endregion
|
|
49
|
-
export { LangChainTracer, LangChainTracerFields, Run, RunCreate2, RunUpdate };
|
|
74
|
+
export { LangChainTracer, LangChainTracerFields, OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS, Run, RunCreate2, RunUpdate };
|
|
50
75
|
//# sourceMappingURL=tracer_langchain.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.d.cts","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"mappings":";;;;;;;UAqBiB,GAAA,SAAY,OAAA;EAC3B,EAAA;EACA,UAAA;EACA,qBAAA;EACA,YAAA;EACA,QAAA;AAAA;AAAA,UAGe,UAAA,SAAmB,SAAA;EAClC,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,WAAA;EACjC,MAAA,EAAQ,OAAA;EACR,MAAA,EAAQ,KAAA;EACR,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,wBAAA;EAC7C,SAAA;EACA,WAAA;EACA,MAAA,GAAS,+BAAA;EACT,QAAA,GAAW,aAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"tracer_langchain.d.cts","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"mappings":";;;;;;;UAqBiB,GAAA,SAAY,OAAA;EAC3B,EAAA;EACA,UAAA;EACA,qBAAA;EACA,YAAA;EACA,QAAA;AAAA;AAAA,UAGe,UAAA,SAAmB,SAAA;EAClC,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,WAAA;EACjC,MAAA,EAAQ,OAAA;EACR,MAAA,EAAQ,KAAA;EACR,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,wBAAA;EAC7C,SAAA;EACA,WAAA;EACA,MAAA,GAAS,+BAAA;EACT,QAAA,GAAW,aAAA;EACX,QAAA,GAAW,MAAA;EACX,IAAA;AAAA;;;;;;;;;;;;cAcW,+CAAA,EAA+C,GAAA;AAAA,cA2B/C,eAAA,SACH,UAAA,YACG,qBAAA;EAAA,UAkBW,MAAA,EAAQ,qBAAA;EAhB9B,IAAA;EAEA,WAAA;EAEA,SAAA;EAEA,MAAA,EAAQ,+BAAA;EAER,QAAA,GAAW,aAAA;EAEX,cAAA;EAEA,eAAA,GAAkB,MAAA;EAElB,WAAA;EAEA,WAAA,CAAsB,MAAA,GAAQ,qBAAA;EAAA,UAiBd,UAAA,CAAW,IAAA,EAAM,GAAA,GAAM,OAAA;EAIjC,WAAA,CAAY,GAAA,EAAK,GAAA,GAAM,OAAA;EAQvB,WAAA,CAAY,GAAA,EAAK,GAAA,GAAM,OAAA;EAU7B,QAAA,CAAS,GAAA,EAAK,KAAA;EAmBd,qBAAA,CAAA;IACE,QAAA;IACA;EAAA;IAEA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,eAAA;EAuCJ,MAAA,CAAO,EAAA,WAAa,GAAA;EAIpB,iBAAA,CAAkB,OAAA,EAAS,OAAA;EAsC3B,2BAAA,CAA4B,EAAA,WAAa,OAAA;EAAA,OAclC,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAgBtB,MAAA,CAAO,WAAA,EAAa,QAAA;AAAA"}
|
|
@@ -27,24 +27,49 @@ interface LangChainTracerFields extends BaseCallbackHandlerInput {
|
|
|
27
27
|
projectName?: string;
|
|
28
28
|
client?: LangSmithTracingClientInterface;
|
|
29
29
|
replicas?: RunTreeConfig["replicas"];
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
tags?: string[];
|
|
30
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Keys that should be inherited from `tracerInheritableMetadata` even when
|
|
35
|
+
* the run already has a value for them. This lets nested contexts
|
|
36
|
+
* (e.g. a subagent invoked from inside a parent agent) override a
|
|
37
|
+
* LangSmith-only tracing metadata value that was set by an ancestor.
|
|
38
|
+
*
|
|
39
|
+
* Keep this list very small: every key here loses the default
|
|
40
|
+
* "first wins" protection and is always clobbered by the nearest
|
|
41
|
+
* enclosing tracer config. Only keys that are strictly for LangSmith
|
|
42
|
+
* tracing bookkeeping should be added.
|
|
43
|
+
*/
|
|
44
|
+
declare const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS: Set<string>;
|
|
31
45
|
declare class LangChainTracer extends BaseTracer implements LangChainTracerFields {
|
|
46
|
+
protected fields: LangChainTracerFields;
|
|
32
47
|
name: string;
|
|
33
48
|
projectName?: string;
|
|
34
49
|
exampleId?: string;
|
|
35
50
|
client: LangSmithTracingClientInterface;
|
|
36
51
|
replicas?: RunTreeConfig["replicas"];
|
|
37
52
|
usesRunTreeMap: boolean;
|
|
53
|
+
tracingMetadata?: Record<string, unknown>;
|
|
54
|
+
tracingTags: string[];
|
|
38
55
|
constructor(fields?: LangChainTracerFields);
|
|
39
56
|
protected persistRun(_run: Run): Promise<void>;
|
|
40
57
|
onRunCreate(run: Run): Promise<void>;
|
|
41
58
|
onRunUpdate(run: Run): Promise<void>;
|
|
42
59
|
onLLMEnd(run: Run$2): void;
|
|
60
|
+
copyWithTracingConfig({
|
|
61
|
+
metadata,
|
|
62
|
+
tags
|
|
63
|
+
}: {
|
|
64
|
+
metadata?: Record<string, unknown>;
|
|
65
|
+
tags?: string[];
|
|
66
|
+
}): LangChainTracer;
|
|
43
67
|
getRun(id: string): Run | undefined;
|
|
44
68
|
updateFromRunTree(runTree: RunTree): void;
|
|
45
69
|
getRunTreeWithTracingConfig(id: string): RunTree | undefined;
|
|
46
70
|
static getTraceableRunTree(): RunTree | undefined;
|
|
71
|
+
static [Symbol.hasInstance](instance: unknown): boolean;
|
|
47
72
|
}
|
|
48
73
|
//#endregion
|
|
49
|
-
export { LangChainTracer, LangChainTracerFields, Run, RunCreate2, RunUpdate };
|
|
74
|
+
export { LangChainTracer, LangChainTracerFields, OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS, Run, RunCreate2, RunUpdate };
|
|
50
75
|
//# sourceMappingURL=tracer_langchain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.d.ts","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"mappings":";;;;;;;UAqBiB,GAAA,SAAY,OAAA;EAC3B,EAAA;EACA,UAAA;EACA,qBAAA;EACA,YAAA;EACA,QAAA;AAAA;AAAA,UAGe,UAAA,SAAmB,SAAA;EAClC,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,WAAA;EACjC,MAAA,EAAQ,OAAA;EACR,MAAA,EAAQ,KAAA;EACR,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,wBAAA;EAC7C,SAAA;EACA,WAAA;EACA,MAAA,GAAS,+BAAA;EACT,QAAA,GAAW,aAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"tracer_langchain.d.ts","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"mappings":";;;;;;;UAqBiB,GAAA,SAAY,OAAA;EAC3B,EAAA;EACA,UAAA;EACA,qBAAA;EACA,YAAA;EACA,QAAA;AAAA;AAAA,UAGe,UAAA,SAAmB,SAAA;EAClC,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,WAAA;EACjC,MAAA,EAAQ,OAAA;EACR,MAAA,EAAQ,KAAA;EACR,QAAA;EACA,YAAA;AAAA;AAAA,UAGe,qBAAA,SAA8B,wBAAA;EAC7C,SAAA;EACA,WAAA;EACA,MAAA,GAAS,+BAAA;EACT,QAAA,GAAW,aAAA;EACX,QAAA,GAAW,MAAA;EACX,IAAA;AAAA;;;;;;;;;;;;cAcW,+CAAA,EAA+C,GAAA;AAAA,cA2B/C,eAAA,SACH,UAAA,YACG,qBAAA;EAAA,UAkBW,MAAA,EAAQ,qBAAA;EAhB9B,IAAA;EAEA,WAAA;EAEA,SAAA;EAEA,MAAA,EAAQ,+BAAA;EAER,QAAA,GAAW,aAAA;EAEX,cAAA;EAEA,eAAA,GAAkB,MAAA;EAElB,WAAA;EAEA,WAAA,CAAsB,MAAA,GAAQ,qBAAA;EAAA,UAiBd,UAAA,CAAW,IAAA,EAAM,GAAA,GAAM,OAAA;EAIjC,WAAA,CAAY,GAAA,EAAK,GAAA,GAAM,OAAA;EAQvB,WAAA,CAAY,GAAA,EAAK,GAAA,GAAM,OAAA;EAU7B,QAAA,CAAS,GAAA,EAAK,KAAA;EAmBd,qBAAA,CAAA;IACE,QAAA;IACA;EAAA;IAEA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,eAAA;EAuCJ,MAAA,CAAO,EAAA,WAAa,GAAA;EAIpB,iBAAA,CAAkB,OAAA,EAAS,OAAA;EAsC3B,2BAAA,CAA4B,EAAA,WAAa,OAAA;EAAA,OAclC,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAgBtB,MAAA,CAAO,WAAA,EAAa,QAAA;AAAA"}
|
|
@@ -7,7 +7,22 @@ import { RunTree } from "langsmith/run_trees";
|
|
|
7
7
|
import { getDefaultProjectName } from "langsmith";
|
|
8
8
|
import { getCurrentRunTree } from "langsmith/singletons/traceable";
|
|
9
9
|
//#region src/tracers/tracer_langchain.ts
|
|
10
|
-
var tracer_langchain_exports = /* @__PURE__ */ __exportAll({
|
|
10
|
+
var tracer_langchain_exports = /* @__PURE__ */ __exportAll({
|
|
11
|
+
LangChainTracer: () => LangChainTracer,
|
|
12
|
+
OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS: () => OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Keys that should be inherited from `tracerInheritableMetadata` even when
|
|
16
|
+
* the run already has a value for them. This lets nested contexts
|
|
17
|
+
* (e.g. a subagent invoked from inside a parent agent) override a
|
|
18
|
+
* LangSmith-only tracing metadata value that was set by an ancestor.
|
|
19
|
+
*
|
|
20
|
+
* Keep this list very small: every key here loses the default
|
|
21
|
+
* "first wins" protection and is always clobbered by the nearest
|
|
22
|
+
* enclosing tracer config. Only keys that are strictly for LangSmith
|
|
23
|
+
* tracing bookkeeping should be added.
|
|
24
|
+
*/
|
|
25
|
+
const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS = new Set(["ls_agent_type"]);
|
|
11
26
|
/**
|
|
12
27
|
* Extract usage_metadata from chat generations.
|
|
13
28
|
*
|
|
@@ -26,21 +41,28 @@ var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
|
26
41
|
client;
|
|
27
42
|
replicas;
|
|
28
43
|
usesRunTreeMap = true;
|
|
44
|
+
tracingMetadata;
|
|
45
|
+
tracingTags = [];
|
|
29
46
|
constructor(fields = {}) {
|
|
30
47
|
super(fields);
|
|
31
|
-
|
|
48
|
+
this.fields = fields;
|
|
49
|
+
const { exampleId, projectName, client, replicas, metadata, tags } = fields;
|
|
32
50
|
this.projectName = projectName ?? getDefaultProjectName();
|
|
33
51
|
this.replicas = replicas;
|
|
34
52
|
this.exampleId = exampleId;
|
|
35
53
|
this.client = client ?? getDefaultLangChainClientSingleton();
|
|
54
|
+
this.tracingMetadata = metadata ? { ...metadata } : void 0;
|
|
55
|
+
this.tracingTags = tags ?? [];
|
|
36
56
|
const traceableTree = LangChainTracer.getTraceableRunTree();
|
|
37
57
|
if (traceableTree) this.updateFromRunTree(traceableTree);
|
|
38
58
|
}
|
|
39
59
|
async persistRun(_run) {}
|
|
40
60
|
async onRunCreate(run) {
|
|
61
|
+
_patchMissingTracingDefaults(this, run);
|
|
41
62
|
if (!run.extra?.lc_defers_inputs) await this.getRunTreeWithTracingConfig(run.id)?.postRun();
|
|
42
63
|
}
|
|
43
64
|
async onRunUpdate(run) {
|
|
65
|
+
_patchMissingTracingDefaults(this, run);
|
|
44
66
|
const runTree = this.getRunTreeWithTracingConfig(run.id);
|
|
45
67
|
if (run.extra?.lc_defers_inputs) await runTree?.postRun();
|
|
46
68
|
else await runTree?.patchRun();
|
|
@@ -57,6 +79,24 @@ var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
|
57
79
|
}
|
|
58
80
|
}
|
|
59
81
|
}
|
|
82
|
+
copyWithTracingConfig({ metadata, tags }) {
|
|
83
|
+
let mergedMetadata;
|
|
84
|
+
if (metadata === void 0) mergedMetadata = this.tracingMetadata ? { ...this.tracingMetadata } : void 0;
|
|
85
|
+
else if (this.tracingMetadata === void 0) mergedMetadata = { ...metadata };
|
|
86
|
+
else {
|
|
87
|
+
mergedMetadata = { ...this.tracingMetadata };
|
|
88
|
+
for (const [key, value] of Object.entries(metadata)) if (!Object.prototype.hasOwnProperty.call(mergedMetadata, key) || OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)) mergedMetadata[key] = value;
|
|
89
|
+
}
|
|
90
|
+
const mergedTags = tags ? Array.from(new Set([...this.tracingTags, ...tags])) : [...this.tracingTags];
|
|
91
|
+
const copied = new LangChainTracer({
|
|
92
|
+
...this.fields,
|
|
93
|
+
metadata: mergedMetadata,
|
|
94
|
+
tags: mergedTags
|
|
95
|
+
});
|
|
96
|
+
copied.runMap = this.runMap;
|
|
97
|
+
copied.runTreeMap = this.runTreeMap;
|
|
98
|
+
return copied;
|
|
99
|
+
}
|
|
60
100
|
getRun(id) {
|
|
61
101
|
return this.runTreeMap.get(id);
|
|
62
102
|
}
|
|
@@ -83,6 +123,13 @@ var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
|
83
123
|
this.replicas = runTree.replicas ?? this.replicas;
|
|
84
124
|
this.projectName = runTree.project_name ?? this.projectName;
|
|
85
125
|
this.exampleId = runTree.reference_example_id ?? this.exampleId;
|
|
126
|
+
this.fields = {
|
|
127
|
+
...this.fields,
|
|
128
|
+
client: this.client,
|
|
129
|
+
replicas: this.replicas,
|
|
130
|
+
projectName: this.projectName,
|
|
131
|
+
exampleId: this.exampleId
|
|
132
|
+
};
|
|
86
133
|
}
|
|
87
134
|
getRunTreeWithTracingConfig(id) {
|
|
88
135
|
const runTree = this.runTreeMap.get(id);
|
|
@@ -103,8 +150,28 @@ var LangChainTracer = class LangChainTracer extends BaseTracer {
|
|
|
103
150
|
return;
|
|
104
151
|
}
|
|
105
152
|
}
|
|
153
|
+
static [Symbol.hasInstance](instance) {
|
|
154
|
+
if (typeof instance !== "object" || instance === null) return false;
|
|
155
|
+
const candidate = instance;
|
|
156
|
+
return "name" in candidate && candidate.name === "langchain_tracer" && "copyWithTracingConfig" in candidate && typeof candidate.copyWithTracingConfig === "function" && "getRunTreeWithTracingConfig" in candidate && typeof candidate.getRunTreeWithTracingConfig === "function";
|
|
157
|
+
}
|
|
106
158
|
};
|
|
159
|
+
function _patchMissingTracingDefaults(tracer, run) {
|
|
160
|
+
if (tracer.tracingMetadata) {
|
|
161
|
+
run.extra ??= {};
|
|
162
|
+
const metadata = run.extra.metadata ?? {};
|
|
163
|
+
let didPatchMetadata = false;
|
|
164
|
+
for (const [key, value] of Object.entries(tracer.tracingMetadata)) if (!Object.prototype.hasOwnProperty.call(metadata, key) || OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)) {
|
|
165
|
+
if (metadata[key] !== value) {
|
|
166
|
+
metadata[key] = value;
|
|
167
|
+
didPatchMetadata = true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (didPatchMetadata) run.extra.metadata = metadata;
|
|
171
|
+
}
|
|
172
|
+
if (tracer.tracingTags.length > 0) run.tags = Array.from(new Set([...run.tags ?? [], ...tracer.tracingTags]));
|
|
173
|
+
}
|
|
107
174
|
//#endregion
|
|
108
|
-
export { LangChainTracer, tracer_langchain_exports };
|
|
175
|
+
export { LangChainTracer, OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS, tracer_langchain_exports };
|
|
109
176
|
|
|
110
177
|
//# sourceMappingURL=tracer_langchain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer_langchain.js","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n}\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n constructor(fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAsDA,SAAS,iCACP,aAC2B;CAC3B,IAAI,SAAoC,KAAA;AACxC,MAAK,MAAM,mBAAmB,YAC5B,MAAK,MAAM,cAAc,gBACvB,KACE,UAAU,WAAW,WAAW,QAAQ,IACxC,WAAW,QAAQ,mBAAmB,KAAA,EAEtC,UAAS,mBAAmB,QAAQ,WAAW,QAAQ,eAAe;AAI5E,QAAO;;AAGT,IAAa,kBAAb,MAAa,wBACH,WAEV;CACE,OAAO;CAEP;CAEA;CAEA;CAEA;CAEA,iBAAiB;CAEjB,YAAY,SAAgC,EAAE,EAAE;AAC9C,QAAM,OAAO;EACb,MAAM,EAAE,WAAW,aAAa,QAAQ,aAAa;AAErD,OAAK,cAAc,eAAe,uBAAuB;AACzD,OAAK,WAAW;AAChB,OAAK,YAAY;AACjB,OAAK,SAAS,UAAU,oCAAoC;EAE5D,MAAM,gBAAgB,gBAAgB,qBAAqB;AAC3D,MAAI,cACF,MAAK,kBAAkB,cAAc;;CAIzC,MAAgB,WAAW,MAA0B;CAIrD,MAAM,YAAY,KAAyB;AACzC,MAAI,CAAC,IAAI,OAAO,iBAEd,OADgB,KAAK,4BAA4B,IAAI,GAAG,EACzC,SAAS;;CAI5B,MAAM,YAAY,KAAyB;EACzC,MAAM,UAAU,KAAK,4BAA4B,IAAI,GAAG;AACxD,MAAI,IAAI,OAAO,iBACb,OAAM,SAAS,SAAS;MAExB,OAAM,SAAS,UAAU;;CAI7B,SAAS,KAA0B;EAEjC,MAAM,UAAU,IAAI;AAGpB,MAAI,SAAS,aAAa;GACxB,MAAM,gBAAgB,iCACpB,QAAQ,YACT;AACD,OAAI,kBAAkB,KAAA,GAAW;AAC/B,QAAI,QAAQ,IAAI,SAAS,EAAE;IAC3B,MAAM,WACH,IAAI,MAAM,YAAoD,EAAE;AACnE,aAAS,iBAAiB;AAC1B,QAAI,MAAM,WAAW;;;;CAK3B,OAAO,IAA6B;AAClC,SAAO,KAAK,WAAW,IAAI,GAAG;;CAGhC,kBAAkB,SAAkB;AAClC,OAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;EACxC,IAAI,UAAmB;EACvB,MAAM,0BAAU,IAAI,KAAa;AACjC,SAAO,QAAQ,YAAY;AACzB,OAAI,QAAQ,IAAI,QAAQ,GAAG,CAAE;AAC7B,WAAQ,IAAI,QAAQ,GAAG;AAEvB,OAAI,CAAC,QAAQ,WAAY;AACzB,aAAU,QAAQ;;AAEpB,UAAQ,OAAO;EAEf,MAAM,QAAQ,CAAC,QAAQ;AACvB,SAAO,MAAM,SAAS,GAAG;GACvB,MAAM,UAAU,MAAM,OAAO;AAC7B,OAAI,CAAC,WAAW,QAAQ,IAAI,QAAQ,GAAG,CAAE;AACzC,WAAQ,IAAI,QAAQ,GAAG;AAEvB,QAAK,WAAW,IAAI,QAAQ,IAAI,QAAQ;AACxC,OAAI,QAAQ,WACV,OAAM,KAAK,GAAG,QAAQ,WAAW;;AAIrC,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,WAAW,QAAQ,YAAY,KAAK;AACzC,OAAK,cAAc,QAAQ,gBAAgB,KAAK;AAChD,OAAK,YAAY,QAAQ,wBAAwB,KAAK;;CAGxD,4BAA4B,IAAiC;EAC3D,MAAM,UAAU,KAAK,WAAW,IAAI,GAAG;AACvC,MAAI,CAAC,QAAS,QAAO,KAAA;AAErB,SAAO,IAAI,QAAQ;GACjB,GAAG;GACH,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,UAAU,KAAK;GACf,sBAAsB,KAAK;GAC3B,gBAAgB;GACjB,CAAC;;CAGJ,OAAO,sBAA2C;AAChD,MAAI;AACF,UAII,kBAGA,KAAK;UAEH;AACN"}
|
|
1
|
+
{"version":3,"file":"tracer_langchain.js","names":[],"sources":["../../src/tracers/tracer_langchain.ts"],"sourcesContent":["import {\n type Client,\n type LangSmithTracingClientInterface,\n getDefaultProjectName,\n} from \"langsmith\";\nimport { RunTree, type RunTreeConfig } from \"langsmith/run_trees\";\nimport { getCurrentRunTree } from \"langsmith/singletons/traceable\";\n\nimport {\n BaseRun,\n RunCreate,\n RunUpdate as BaseRunUpdate,\n KVMap,\n} from \"langsmith/schemas\";\nimport { BaseTracer, Run as BaseTracerRun } from \"./base.js\";\nimport { BaseCallbackHandlerInput } from \"../callbacks/base.js\";\nimport { getDefaultLangChainClientSingleton } from \"../singletons/tracer.js\";\nimport { ChatGeneration } from \"../outputs.js\";\nimport { AIMessage } from \"../messages/ai.js\";\nimport { mergeUsageMetadata, UsageMetadata } from \"../messages/metadata.js\";\n\nexport interface Run extends BaseRun {\n id: string;\n child_runs: this[];\n child_execution_order: number;\n dotted_order?: string;\n trace_id?: string;\n}\n\nexport interface RunCreate2 extends RunCreate {\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface RunUpdate extends BaseRunUpdate {\n events: BaseRun[\"events\"];\n inputs: KVMap;\n trace_id?: string;\n dotted_order?: string;\n}\n\nexport interface LangChainTracerFields extends BaseCallbackHandlerInput {\n exampleId?: string;\n projectName?: string;\n client?: LangSmithTracingClientInterface;\n replicas?: RunTreeConfig[\"replicas\"];\n metadata?: Record<string, unknown>;\n tags?: string[];\n}\n\n/**\n * Keys that should be inherited from `tracerInheritableMetadata` even when\n * the run already has a value for them. This lets nested contexts\n * (e.g. a subagent invoked from inside a parent agent) override a\n * LangSmith-only tracing metadata value that was set by an ancestor.\n *\n * Keep this list very small: every key here loses the default\n * \"first wins\" protection and is always clobbered by the nearest\n * enclosing tracer config. Only keys that are strictly for LangSmith\n * tracing bookkeeping should be added.\n */\nexport const OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS = new Set<string>([\n \"ls_agent_type\",\n]);\n\n/**\n * Extract usage_metadata from chat generations.\n *\n * Iterates through generations to find and aggregates all usage_metadata\n * found in chat messages. This is typically present in chat model outputs.\n */\nfunction _getUsageMetadataFromGenerations(\n generations: ChatGeneration[][]\n): UsageMetadata | undefined {\n let output: UsageMetadata | undefined = undefined;\n for (const generationBatch of generations) {\n for (const generation of generationBatch) {\n if (\n AIMessage.isInstance(generation.message) &&\n generation.message.usage_metadata !== undefined\n ) {\n output = mergeUsageMetadata(output, generation.message.usage_metadata);\n }\n }\n }\n return output;\n}\n\nexport class LangChainTracer\n extends BaseTracer\n implements LangChainTracerFields\n{\n name = \"langchain_tracer\";\n\n projectName?: string;\n\n exampleId?: string;\n\n client: LangSmithTracingClientInterface;\n\n replicas?: RunTreeConfig[\"replicas\"];\n\n usesRunTreeMap = true;\n\n tracingMetadata?: Record<string, unknown>;\n\n tracingTags: string[] = [];\n\n constructor(protected fields: LangChainTracerFields = {}) {\n super(fields);\n const { exampleId, projectName, client, replicas, metadata, tags } = fields;\n\n this.projectName = projectName ?? getDefaultProjectName();\n this.replicas = replicas;\n this.exampleId = exampleId;\n this.client = client ?? getDefaultLangChainClientSingleton();\n this.tracingMetadata = metadata ? { ...metadata } : undefined;\n this.tracingTags = tags ?? [];\n\n const traceableTree = LangChainTracer.getTraceableRunTree();\n if (traceableTree) {\n this.updateFromRunTree(traceableTree);\n }\n }\n\n protected async persistRun(_run: Run): Promise<void> {\n // empty\n }\n\n async onRunCreate(run: Run): Promise<void> {\n _patchMissingTracingDefaults(this, run);\n if (!run.extra?.lc_defers_inputs) {\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n await runTree?.postRun();\n }\n }\n\n async onRunUpdate(run: Run): Promise<void> {\n _patchMissingTracingDefaults(this, run);\n const runTree = this.getRunTreeWithTracingConfig(run.id);\n if (run.extra?.lc_defers_inputs) {\n await runTree?.postRun();\n } else {\n await runTree?.patchRun();\n }\n }\n\n onLLMEnd(run: BaseTracerRun): void {\n // Extract usage_metadata from outputs and store in extra.metadata\n const outputs = run.outputs as\n | { generations?: ChatGeneration[][] }\n | undefined;\n if (outputs?.generations) {\n const usageMetadata = _getUsageMetadataFromGenerations(\n outputs.generations\n );\n if (usageMetadata !== undefined) {\n run.extra = run.extra ?? {};\n const metadata =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n metadata.usage_metadata = usageMetadata;\n run.extra.metadata = metadata;\n }\n }\n }\n\n copyWithTracingConfig({\n metadata,\n tags,\n }: {\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): LangChainTracer {\n let mergedMetadata: Record<string, unknown> | undefined;\n if (metadata === undefined) {\n mergedMetadata = this.tracingMetadata\n ? { ...this.tracingMetadata }\n : undefined;\n } else if (this.tracingMetadata === undefined) {\n mergedMetadata = { ...metadata };\n } else {\n mergedMetadata = { ...this.tracingMetadata };\n for (const [key, value] of Object.entries(metadata)) {\n // For allowlisted LangSmith-only inheritable metadata keys (e.g.\n // `ls_agent_type`), nested callers are allowed to OVERRIDE the\n // value inherited from an ancestor. For all other keys we keep\n // the existing \"first wins\" behavior so that ancestor-provided\n // tracing metadata is not accidentally clobbered by child runs.\n if (\n !Object.prototype.hasOwnProperty.call(mergedMetadata, key) ||\n OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)\n ) {\n mergedMetadata[key] = value;\n }\n }\n }\n\n const mergedTags = tags\n ? Array.from(new Set([...this.tracingTags, ...tags]))\n : [...this.tracingTags];\n\n const copied = new LangChainTracer({\n ...this.fields,\n metadata: mergedMetadata,\n tags: mergedTags,\n });\n copied.runMap = this.runMap;\n copied.runTreeMap = this.runTreeMap;\n return copied;\n }\n\n getRun(id: string): Run | undefined {\n return this.runTreeMap.get(id);\n }\n\n updateFromRunTree(runTree: RunTree) {\n this.runTreeMap.set(runTree.id, runTree);\n let rootRun: RunTree = runTree;\n const visited = new Set<string>();\n while (rootRun.parent_run) {\n if (visited.has(rootRun.id)) break;\n visited.add(rootRun.id);\n\n if (!rootRun.parent_run) break;\n rootRun = rootRun.parent_run as RunTree;\n }\n visited.clear();\n\n const queue = [rootRun];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || visited.has(current.id)) continue;\n visited.add(current.id);\n\n this.runTreeMap.set(current.id, current);\n if (current.child_runs) {\n queue.push(...current.child_runs);\n }\n }\n\n this.client = runTree.client ?? this.client;\n this.replicas = runTree.replicas ?? this.replicas;\n this.projectName = runTree.project_name ?? this.projectName;\n this.exampleId = runTree.reference_example_id ?? this.exampleId;\n this.fields = {\n ...this.fields,\n client: this.client,\n replicas: this.replicas,\n projectName: this.projectName,\n exampleId: this.exampleId,\n };\n }\n\n getRunTreeWithTracingConfig(id: string): RunTree | undefined {\n const runTree = this.runTreeMap.get(id);\n if (!runTree) return undefined;\n\n return new RunTree({\n ...runTree,\n client: this.client as Client,\n project_name: this.projectName,\n replicas: this.replicas,\n reference_example_id: this.exampleId,\n tracingEnabled: true,\n });\n }\n\n static getTraceableRunTree(): RunTree | undefined {\n try {\n return (\n // The type cast here provides forward compatibility. Old versions of LangSmith will just\n // ignore the permitAbsentRunTree arg.\n (\n getCurrentRunTree as (\n permitAbsentRunTree: boolean\n ) => ReturnType<typeof getCurrentRunTree> | undefined\n )(true)\n );\n } catch {\n return undefined;\n }\n }\n\n static [Symbol.hasInstance](instance: unknown): boolean {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n const candidate = instance as Record<string, unknown>;\n return (\n \"name\" in candidate &&\n candidate.name === \"langchain_tracer\" &&\n \"copyWithTracingConfig\" in candidate &&\n typeof candidate.copyWithTracingConfig === \"function\" &&\n \"getRunTreeWithTracingConfig\" in candidate &&\n typeof candidate.getRunTreeWithTracingConfig === \"function\"\n );\n }\n}\n\nfunction _patchMissingTracingDefaults(tracer: LangChainTracer, run: Run): void {\n if (tracer.tracingMetadata) {\n run.extra ??= {};\n const metadata: Record<string, unknown> =\n (run.extra.metadata as Record<string, unknown> | undefined) ?? {};\n let didPatchMetadata = false;\n for (const [key, value] of Object.entries(tracer.tracingMetadata)) {\n // `OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS` are a small, LangSmith-only\n // allowlist that bypasses the \"first wins\" merge so a nested caller\n // (e.g. a subagent) can override a parent-set value.\n if (\n !Object.prototype.hasOwnProperty.call(metadata, key) ||\n OVERRIDABLE_LANGSMITH_INHERITABLE_METADATA_KEYS.has(key)\n ) {\n if (metadata[key] !== value) {\n metadata[key] = value;\n didPatchMetadata = true;\n }\n }\n }\n if (didPatchMetadata) {\n run.extra.metadata = metadata;\n }\n }\n\n if (tracer.tracingTags.length > 0) {\n run.tags = Array.from(\n new Set([...(run.tags ?? []), ...tracer.tracingTags])\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,9 +3,13 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
|
3
3
|
const require_signal = require("./signal.cjs");
|
|
4
4
|
const require_index = require("./p-retry/index.cjs");
|
|
5
5
|
let p_queue = require("p-queue");
|
|
6
|
-
p_queue = require_runtime.__toESM(p_queue);
|
|
6
|
+
p_queue = require_runtime.__toESM(p_queue, 1);
|
|
7
7
|
//#region src/utils/async_caller.ts
|
|
8
|
-
var async_caller_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
8
|
+
var async_caller_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
9
|
+
AsyncCaller: () => AsyncCaller,
|
|
10
|
+
classifyRateLimitError: () => classifyRateLimitError,
|
|
11
|
+
parseRetryAfterMs: () => parseRetryAfterMs
|
|
12
|
+
});
|
|
9
13
|
const STATUS_NO_RETRY = [
|
|
10
14
|
400,
|
|
11
15
|
401,
|
|
@@ -17,6 +21,110 @@ const STATUS_NO_RETRY = [
|
|
|
17
21
|
407,
|
|
18
22
|
409
|
|
19
23
|
];
|
|
24
|
+
const RETRY_AFTER_AUTO_RETRY_THRESHOLD_MS = 6e4;
|
|
25
|
+
const QUOTA_EXHAUSTED_MESSAGE_PATTERNS = [
|
|
26
|
+
/insufficient[_ -]?quota/i,
|
|
27
|
+
/exceeded (?:your|the current|the available).+quota/i,
|
|
28
|
+
/usage quota/i,
|
|
29
|
+
/quota (?:has been )?exhausted/i,
|
|
30
|
+
/billing/i,
|
|
31
|
+
/credit balance/i,
|
|
32
|
+
/out of credits/i,
|
|
33
|
+
/will reset at/i
|
|
34
|
+
];
|
|
35
|
+
const RETRY_AFTER_MESSAGE_PATTERN = /(?:try again in|retry after)\s+(\d+(?:\.\d+)?)\s*(milliseconds?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h)\b/i;
|
|
36
|
+
function getResponseStatus(error) {
|
|
37
|
+
return typeof error === "object" && error !== null && "response" in error && typeof error.response === "object" && error.response !== null && "status" in error.response && typeof error.response.status === "number" ? error.response.status : void 0;
|
|
38
|
+
}
|
|
39
|
+
function getDirectStatus(error) {
|
|
40
|
+
if (typeof error !== "object" || error === null) return;
|
|
41
|
+
if ("status" in error && typeof error.status === "number") return error.status;
|
|
42
|
+
if ("statusCode" in error && typeof error.statusCode === "number") return error.statusCode;
|
|
43
|
+
}
|
|
44
|
+
function getErrorMessage(error) {
|
|
45
|
+
return typeof error === "object" && error !== null && "message" in error && typeof error.message === "string" ? error.message : void 0;
|
|
46
|
+
}
|
|
47
|
+
function getErrorCode(error) {
|
|
48
|
+
if (typeof error !== "object" || error === null) return;
|
|
49
|
+
if ("code" in error && typeof error.code === "string") return error.code;
|
|
50
|
+
return "error" in error && typeof error.error === "object" && error.error !== null && "code" in error.error && typeof error.error.code === "string" ? error.error.code : void 0;
|
|
51
|
+
}
|
|
52
|
+
function _getRetryAfterHeader(error) {
|
|
53
|
+
if (error?.headers) {
|
|
54
|
+
if (typeof error.headers.get === "function") return error.headers.get("retry-after");
|
|
55
|
+
return error.headers["retry-after"] ?? error.headers["Retry-After"];
|
|
56
|
+
}
|
|
57
|
+
if (error?.response?.headers) {
|
|
58
|
+
if (typeof error.response.headers.get === "function") return error.response.headers.get("retry-after");
|
|
59
|
+
return error.response.headers["retry-after"] ?? error.response.headers["Retry-After"];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function parseRetryAfterFromMessageMs(message) {
|
|
63
|
+
if (message == null) return;
|
|
64
|
+
const match = RETRY_AFTER_MESSAGE_PATTERN.exec(message);
|
|
65
|
+
if (!match) return;
|
|
66
|
+
const rawValue = Number(match[1]);
|
|
67
|
+
const unit = match[2]?.toLowerCase();
|
|
68
|
+
if (Number.isNaN(rawValue) || !unit) return;
|
|
69
|
+
if (unit === "ms" || unit.startsWith("millisecond")) return rawValue;
|
|
70
|
+
if (unit === "m" || unit.startsWith("min")) return rawValue * 6e4;
|
|
71
|
+
if (unit === "h" || unit.startsWith("hr") || unit.startsWith("hour")) return rawValue * 36e5;
|
|
72
|
+
return rawValue * 1e3;
|
|
73
|
+
}
|
|
74
|
+
function coerceError(error, fallbackMessage) {
|
|
75
|
+
if (error instanceof Error) return error;
|
|
76
|
+
const coerced = new Error(fallbackMessage);
|
|
77
|
+
if (typeof error === "object" && error !== null) Object.assign(coerced, error);
|
|
78
|
+
return coerced;
|
|
79
|
+
}
|
|
80
|
+
function setRateLimitMetadata(error, classification) {
|
|
81
|
+
if (typeof error !== "object" || error === null) return;
|
|
82
|
+
const mutableError = error;
|
|
83
|
+
mutableError.rateLimitType = classification.action;
|
|
84
|
+
mutableError.rateLimitReason = classification.reason;
|
|
85
|
+
if (classification.retryAfterMs !== void 0) mutableError.retryAfterMs = classification.retryAfterMs;
|
|
86
|
+
}
|
|
87
|
+
function parseRetryAfterMs(headerValue) {
|
|
88
|
+
if (headerValue == null) return;
|
|
89
|
+
const trimmed = headerValue.trim();
|
|
90
|
+
if (!trimmed) return;
|
|
91
|
+
const seconds = Number(trimmed);
|
|
92
|
+
if (!Number.isNaN(seconds) && seconds >= 0) return seconds * 1e3;
|
|
93
|
+
const date = Date.parse(trimmed);
|
|
94
|
+
if (!Number.isNaN(date)) {
|
|
95
|
+
const delayMs = date - Date.now();
|
|
96
|
+
return delayMs > 0 ? delayMs : 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function classifyRateLimitError(error) {
|
|
100
|
+
if ((getResponseStatus(error) ?? getDirectStatus(error)) !== 429) return;
|
|
101
|
+
if (getErrorCode(error) === "insufficient_quota") return {
|
|
102
|
+
action: "stop",
|
|
103
|
+
reason: "insufficient_quota"
|
|
104
|
+
};
|
|
105
|
+
const message = getErrorMessage(error);
|
|
106
|
+
if (message && QUOTA_EXHAUSTED_MESSAGE_PATTERNS.some((pattern) => pattern.test(message))) return {
|
|
107
|
+
action: "stop",
|
|
108
|
+
reason: "quota_message"
|
|
109
|
+
};
|
|
110
|
+
const retryAfterMs = parseRetryAfterMs(_getRetryAfterHeader(error)) ?? parseRetryAfterFromMessageMs(message);
|
|
111
|
+
if (retryAfterMs !== void 0) {
|
|
112
|
+
if (retryAfterMs <= RETRY_AFTER_AUTO_RETRY_THRESHOLD_MS) return {
|
|
113
|
+
action: "wait",
|
|
114
|
+
retryAfterMs,
|
|
115
|
+
reason: "retry_after_hint"
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
action: "capacity",
|
|
119
|
+
retryAfterMs,
|
|
120
|
+
reason: "retry_after_too_large"
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
action: "capacity",
|
|
125
|
+
reason: "headerless_429"
|
|
126
|
+
};
|
|
127
|
+
}
|
|
20
128
|
/**
|
|
21
129
|
* The default failed attempt handler for the AsyncCaller.
|
|
22
130
|
* @param error - The error to handle.
|
|
@@ -26,13 +134,26 @@ const defaultFailedAttemptHandler = (error) => {
|
|
|
26
134
|
if (typeof error !== "object" || error === null) return;
|
|
27
135
|
if ("message" in error && typeof error.message === "string" && (error.message.startsWith("Cancel") || error.message.startsWith("AbortError")) || "name" in error && typeof error.name === "string" && error.name === "AbortError") throw error;
|
|
28
136
|
if ("code" in error && typeof error.code === "string" && error.code === "ECONNABORTED") throw error;
|
|
29
|
-
const
|
|
30
|
-
const directStatus = "status" in error && typeof error.status === "number" ? error.status : void 0;
|
|
31
|
-
const status = responseStatus ?? directStatus;
|
|
137
|
+
const status = getResponseStatus(error) ?? getDirectStatus(error);
|
|
32
138
|
if (status && STATUS_NO_RETRY.includes(+status)) throw error;
|
|
33
|
-
if ((
|
|
34
|
-
const err =
|
|
139
|
+
if (getErrorCode(error) === "insufficient_quota") {
|
|
140
|
+
const err = coerceError(error, getErrorMessage(error) ?? "Insufficient quota");
|
|
35
141
|
err.name = "InsufficientQuotaError";
|
|
142
|
+
setRateLimitMetadata(err, {
|
|
143
|
+
action: "stop",
|
|
144
|
+
reason: "insufficient_quota"
|
|
145
|
+
});
|
|
146
|
+
throw err;
|
|
147
|
+
}
|
|
148
|
+
const rateLimitClassification = classifyRateLimitError(error);
|
|
149
|
+
if (rateLimitClassification) {
|
|
150
|
+
if (rateLimitClassification.action === "wait") {
|
|
151
|
+
setRateLimitMetadata(error, rateLimitClassification);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const err = coerceError(error, getErrorMessage(error) ?? "Rate limit exceeded");
|
|
155
|
+
if (err.name === "Error") err.name = rateLimitClassification.action === "stop" ? "RateLimitQuotaExhaustedError" : "RateLimitCapacityError";
|
|
156
|
+
setRateLimitMetadata(err, rateLimitClassification);
|
|
36
157
|
throw err;
|
|
37
158
|
}
|
|
38
159
|
};
|
|
@@ -58,7 +179,8 @@ var AsyncCaller = class {
|
|
|
58
179
|
this.maxConcurrency = params.maxConcurrency ?? Infinity;
|
|
59
180
|
this.maxRetries = params.maxRetries ?? 6;
|
|
60
181
|
this.onFailedAttempt = params.onFailedAttempt ?? defaultFailedAttemptHandler;
|
|
61
|
-
|
|
182
|
+
const PQueue = "default" in p_queue.default ? p_queue.default.default : p_queue.default;
|
|
183
|
+
this.queue = new PQueue({ concurrency: this.maxConcurrency });
|
|
62
184
|
}
|
|
63
185
|
async call(callable, ...args) {
|
|
64
186
|
return this.queue.add(() => require_index.default(() => callable(...args).catch((error) => {
|
|
@@ -96,5 +218,7 @@ Object.defineProperty(exports, "async_caller_exports", {
|
|
|
96
218
|
return async_caller_exports;
|
|
97
219
|
}
|
|
98
220
|
});
|
|
221
|
+
exports.classifyRateLimitError = classifyRateLimitError;
|
|
222
|
+
exports.parseRetryAfterMs = parseRetryAfterMs;
|
|
99
223
|
|
|
100
224
|
//# sourceMappingURL=async_caller.cjs.map
|