langchain-core 1.2.5__tar.gz → 1.2.7__tar.gz
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.
- {langchain_core-1.2.5 → langchain_core-1.2.7}/PKG-INFO +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_api/__init__.py +19 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_api/internal.py +2 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/caches.py +1 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/base.py +14 -13
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/manager.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/document_loaders/langsmith.py +3 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/indexing/api.py +11 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/base.py +22 -6
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/chat_models.py +24 -4
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/llms.py +4 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/model_profile.py +1 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/load.py +20 -6
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/serializable.py +9 -8
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/ai.py +23 -23
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/base.py +5 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/content.py +199 -135
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/utils.py +71 -24
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/base.py +3 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/openai_functions.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/pydantic.py +12 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompt_values.py +18 -5
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/base.py +13 -13
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/chat.py +17 -10
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/dict.py +7 -4
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/few_shot_with_templates.py +2 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/image.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/message.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/string.py +18 -10
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/base.py +4 -4
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/config.py +3 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/graph_mermaid.py +10 -7
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/graph_png.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/router.py +4 -4
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/utils.py +9 -3
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/base.py +11 -5
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/convert.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/retriever.py +4 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/simple.py +3 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/structured.py +3 -2
- langchain_core-1.2.7/langchain_core/tracers/_compat.py +93 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/context.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/core.py +4 -4
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/evaluation.py +3 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/event_stream.py +3 -3
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/langchain.py +5 -3
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/log_stream.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/run_collector.py +2 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/_merge.py +10 -11
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/env.py +2 -2
- langchain_core-1.2.7/langchain_core/utils/formatting.py +80 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/function_calling.py +28 -27
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/html.py +8 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/json.py +24 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/json_schema.py +20 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/mustache.py +20 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/pydantic.py +13 -12
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/usage.py +21 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/vectorstores/__init__.py +19 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/vectorstores/utils.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/version.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/pyproject.toml +4 -10
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/benchmarks/test_async_callbacks.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/benchmarks/test_imports.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/test_sync_callback_manager.py +0 -5
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/document_loaders/test_langsmith.py +3 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/example_selectors/test_base.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/example_selectors/test_length_based_example_selector.py +15 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/fake/callbacks.py +4 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/chat_models/test_base.py +16 -23
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/chat_models/test_cache.py +59 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/test_utils.py +4 -3
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_openai_tools.py +11 -7
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_pydantic_parser.py +2 -6
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/outputs/test_chat_generation.py +4 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/__snapshots__/test_chat.ambr +0 -20
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_chat.py +322 -46
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_few_shot.py +5 -3
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_loading.py +1 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_prompt.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_structured.py +4 -5
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/pydantic_utils.py +23 -22
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/__snapshots__/test_graph.ambr +0 -10
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/__snapshots__/test_runnable.ambr +0 -80
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_concurrency.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_config.py +2 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_fallbacks.py +21 -21
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_graph.py +45 -2
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_history.py +8 -9
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_runnable.py +55 -54
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_runnable_events_v1.py +7 -11
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_runnable_events_v2.py +3 -9
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_tracing_interops.py +16 -8
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_utils.py +6 -5
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/stores/test_in_memory.py +3 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_messages.py +8 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_tools.py +148 -44
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_async_base_tracer.py +63 -46
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_base_tracer.py +63 -46
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_langchain.py +4 -2
- langchain_core-1.2.7/tests/unit_tests/utils/test_formatting.py +127 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_function_calling.py +11 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_json_schema.py +78 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_utils.py +104 -1
- {langchain_core-1.2.5 → langchain_core-1.2.7}/uv.lock +142 -68
- langchain_core-1.2.5/langchain_core/utils/formatting.py +0 -51
- {langchain_core-1.2.5 → langchain_core-1.2.7}/.gitignore +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/Makefile +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/README.md +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/extended_testing_deps.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_api/beta_decorator.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_api/deprecation.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_api/path.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/_import_utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/agents.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/file.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/stdout.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/streaming_stdout.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/callbacks/usage.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/chat_history.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/chat_loaders.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/chat_sessions.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/document_loaders/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/document_loaders/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/document_loaders/blob_loaders.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/documents/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/documents/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/documents/compressor.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/documents/transformers.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/embeddings/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/embeddings/embeddings.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/embeddings/fake.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/env.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/example_selectors/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/example_selectors/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/example_selectors/length_based.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/example_selectors/semantic_similarity.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/exceptions.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/globals.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/indexing/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/indexing/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/indexing/in_memory.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/_utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/fake.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/language_models/fake_chat_models.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/_validation.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/dump.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/load/mapping.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/anthropic.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/bedrock.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/bedrock_converse.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/google_genai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/google_vertexai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/groq.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/langchain_v0.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/block_translators/openai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/chat.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/function.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/human.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/modifier.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/system.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/messages/tool.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/format_instructions.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/json.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/list.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/openai_tools.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/string.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/transform.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/output_parsers/xml.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/chat_generation.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/chat_result.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/generation.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/llm_result.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/outputs/run_info.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/few_shot.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/loading.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/prompt.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/prompts/structured.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/py.typed +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/rate_limiters.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/retrievers.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/branch.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/configurable.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/fallbacks.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/graph.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/graph_ascii.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/history.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/passthrough.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/retry.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/runnables/schema.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/stores.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/structured_query.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/sys_info.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tools/render.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/_streaming.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/memory_stream.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/root_listeners.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/schemas.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/tracers/stdout.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/aiter.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/image.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/input.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/interactive_env.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/iter.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/strings.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/utils/uuid.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/vectorstores/base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/langchain_core/vectorstores/in_memory.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/scripts/check_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/scripts/lint_imports.sh +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/benchmarks/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/integration_tests/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/integration_tests/test_compile.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/_api/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/_api/test_beta_decorator.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/_api/test_deprecation.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/_api/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/_api/test_path.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/caches/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/caches/test_in_memory_cache.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/test_async_callback_manager.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/test_dispatch_custom_event.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/callbacks/test_usage_callback.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/chat_history/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/chat_history/test_chat_history.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/conftest.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/data/prompt_file.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/data/prompts/prompt_extra_args.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/data/prompts/prompt_missing_args.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/data/prompts/simple_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/dependencies/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/dependencies/test_dependencies.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/document_loaders/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/document_loaders/test_base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/documents/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/documents/test_document.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/documents/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/documents/test_str.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/embeddings/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/embeddings/test_deterministic_embedding.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/example_selectors/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/example_selectors/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/example_selectors/test_similarity.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/example-non-utf8.csv +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/example-non-utf8.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/example-utf8.csv +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/example-utf8.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/example_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/examples.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/examples.yaml +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/few_shot_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/few_shot_prompt.yaml +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/few_shot_prompt_example_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/few_shot_prompt_examples_in.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/few_shot_prompt_yaml_examples.yaml +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/jinja_injection_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/jinja_injection_prompt.yaml +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/prompt_with_output_parser.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/simple_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/simple_prompt.yaml +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/simple_prompt_with_template_file.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/examples/simple_template.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/fake/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/fake/test_fake_chat_model.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/test_hashed_document.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/test_in_memory_indexer.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/test_in_memory_record_manager.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/test_indexing.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/indexing/test_public_api.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/chat_models/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/chat_models/test_benchmark.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/chat_models/test_rate_limiting.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/llms/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/llms/test_base.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/llms/test_cache.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/language_models/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/load/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/load/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/load/test_secret_injection.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/load/test_serializable.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_anthropic.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_bedrock.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_bedrock_converse.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_google_genai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_groq.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_langchain_v0.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_openai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/block_translators/test_registration.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/test_ai.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/messages/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_base_parsers.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_json.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_list_parser.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_openai_functions.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/output_parsers/test_xml_parser.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/outputs/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/outputs/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompt_file.txt +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/__snapshots__/test_prompt.ambr +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/prompt_extra_args.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/prompt_missing_args.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/simple_prompt.json +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_dict.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_few_shot_with_templates.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_image.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_string.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/prompts/test_utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/rate_limiters/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/rate_limiters/test_in_memory_rate_limiter.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/__snapshots__/test_fallbacks.ambr +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_configurable.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/runnables/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/stores/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/stubs.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_globals.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_outputs.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_prompt_values.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_pydantic_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_pydantic_serde.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_retrievers.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_setup.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/test_sys_info.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_automatic_metadata.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_memory_stream.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_run_collector.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/tracers/test_schemas.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_aiter.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_env.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_html.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_imports.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_iter.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_pydantic.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_rm_titles.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_strings.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_usage.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/utils/test_uuid_utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/vectorstores/__init__.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/vectorstores/test_in_memory.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/vectorstores/test_utils.py +0 -0
- {langchain_core-1.2.5 → langchain_core-1.2.7}/tests/unit_tests/vectorstores/test_vectorstore.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langchain-core
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.7
|
|
4
4
|
Summary: Building applications with LLMs through composability
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/langchain_core/
|
|
@@ -58,6 +58,20 @@ _dynamic_imports = {
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
def __getattr__(attr_name: str) -> object:
|
|
61
|
+
"""Dynamically import and return an attribute from a submodule.
|
|
62
|
+
|
|
63
|
+
This function enables lazy loading of API functions from submodules, reducing
|
|
64
|
+
initial import time and circular dependency issues.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
attr_name: Name of the attribute to import.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
The imported attribute object.
|
|
71
|
+
|
|
72
|
+
Raises:
|
|
73
|
+
AttributeError: If the attribute is not a valid dynamic import.
|
|
74
|
+
"""
|
|
61
75
|
module_name = _dynamic_imports.get(attr_name)
|
|
62
76
|
result = import_attr(attr_name, module_name, __spec__.parent)
|
|
63
77
|
globals()[attr_name] = result
|
|
@@ -65,4 +79,9 @@ def __getattr__(attr_name: str) -> object:
|
|
|
65
79
|
|
|
66
80
|
|
|
67
81
|
def __dir__() -> list[str]:
|
|
82
|
+
"""Return a list of available attributes for this module.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
List of attribute names that can be imported from this module.
|
|
86
|
+
"""
|
|
68
87
|
return list(__all__)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import inspect
|
|
2
|
+
from typing import cast
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def is_caller_internal(depth: int = 2) -> bool:
|
|
@@ -16,7 +17,7 @@ def is_caller_internal(depth: int = 2) -> bool:
|
|
|
16
17
|
return False
|
|
17
18
|
# Directly access the module name from the frame's global variables
|
|
18
19
|
module_globals = frame.f_globals
|
|
19
|
-
caller_module_name = module_globals.get("__name__", "")
|
|
20
|
+
caller_module_name = cast("str", module_globals.get("__name__", ""))
|
|
20
21
|
return caller_module_name.startswith("langchain")
|
|
21
22
|
finally:
|
|
22
23
|
del frame
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Distinct from provider-based [prompt caching](https://docs.langchain.com/oss/python/langchain/models#prompt-caching).
|
|
4
4
|
|
|
5
5
|
!!! warning "Beta feature"
|
|
6
|
+
|
|
6
7
|
This is a beta feature. Please be wary of deploying experimental code to production
|
|
7
8
|
unless you've taken appropriate precautions.
|
|
8
9
|
|
|
@@ -960,28 +960,29 @@ class BaseCallbackManager(CallbackManagerMixin):
|
|
|
960
960
|
# ['tag2', 'tag1']
|
|
961
961
|
```
|
|
962
962
|
""" # noqa: E501
|
|
963
|
-
|
|
963
|
+
# Combine handlers and inheritable_handlers separately, using sets
|
|
964
|
+
# to deduplicate (order not preserved)
|
|
965
|
+
combined_handlers = list(set(self.handlers) | set(other.handlers))
|
|
966
|
+
combined_inheritable = list(
|
|
967
|
+
set(self.inheritable_handlers) | set(other.inheritable_handlers)
|
|
968
|
+
)
|
|
969
|
+
|
|
970
|
+
return self.__class__(
|
|
964
971
|
parent_run_id=self.parent_run_id or other.parent_run_id,
|
|
965
|
-
handlers=
|
|
966
|
-
inheritable_handlers=
|
|
972
|
+
handlers=combined_handlers,
|
|
973
|
+
inheritable_handlers=combined_inheritable,
|
|
967
974
|
tags=list(set(self.tags + other.tags)),
|
|
968
975
|
inheritable_tags=list(set(self.inheritable_tags + other.inheritable_tags)),
|
|
969
976
|
metadata={
|
|
970
977
|
**self.metadata,
|
|
971
978
|
**other.metadata,
|
|
972
979
|
},
|
|
980
|
+
inheritable_metadata={
|
|
981
|
+
**self.inheritable_metadata,
|
|
982
|
+
**other.inheritable_metadata,
|
|
983
|
+
},
|
|
973
984
|
)
|
|
974
985
|
|
|
975
|
-
handlers = self.handlers + other.handlers
|
|
976
|
-
inheritable_handlers = self.inheritable_handlers + other.inheritable_handlers
|
|
977
|
-
|
|
978
|
-
for handler in handlers:
|
|
979
|
-
manager.add_handler(handler)
|
|
980
|
-
|
|
981
|
-
for handler in inheritable_handlers:
|
|
982
|
-
manager.add_handler(handler, inherit=True)
|
|
983
|
-
return manager
|
|
984
|
-
|
|
985
986
|
@property
|
|
986
987
|
def is_async(self) -> bool:
|
|
987
988
|
"""Whether the callback manager is async."""
|
|
@@ -12,7 +12,6 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
12
12
|
from contextlib import asynccontextmanager, contextmanager
|
|
13
13
|
from contextvars import copy_context
|
|
14
14
|
from typing import TYPE_CHECKING, Any, TypeVar, cast
|
|
15
|
-
from uuid import UUID
|
|
16
15
|
|
|
17
16
|
from langsmith.run_helpers import get_tracing_context
|
|
18
17
|
from typing_extensions import Self, override
|
|
@@ -44,6 +43,7 @@ from langchain_core.utils.uuid import uuid7
|
|
|
44
43
|
|
|
45
44
|
if TYPE_CHECKING:
|
|
46
45
|
from collections.abc import AsyncGenerator, Coroutine, Generator, Sequence
|
|
46
|
+
from uuid import UUID
|
|
47
47
|
|
|
48
48
|
from tenacity import RetryCallState
|
|
49
49
|
|
|
@@ -11,6 +11,7 @@ from typing_extensions import override
|
|
|
11
11
|
|
|
12
12
|
from langchain_core.document_loaders.base import BaseLoader
|
|
13
13
|
from langchain_core.documents import Document
|
|
14
|
+
from langchain_core.tracers._compat import pydantic_to_dict
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class LangSmithLoader(BaseLoader):
|
|
@@ -118,14 +119,14 @@ class LangSmithLoader(BaseLoader):
|
|
|
118
119
|
for key in self.content_key:
|
|
119
120
|
content = content[key]
|
|
120
121
|
content_str = self.format_content(content)
|
|
121
|
-
metadata = example
|
|
122
|
+
metadata = pydantic_to_dict(example)
|
|
122
123
|
# Stringify datetime and UUID types.
|
|
123
124
|
for k in ("dataset_id", "created_at", "modified_at", "source_run_id", "id"):
|
|
124
125
|
metadata[k] = str(metadata[k]) if metadata[k] else metadata[k]
|
|
125
126
|
yield Document(content_str, metadata=metadata)
|
|
126
127
|
|
|
127
128
|
|
|
128
|
-
def _stringify(x: str | dict) -> str:
|
|
129
|
+
def _stringify(x: str | dict[str, Any]) -> str:
|
|
129
130
|
if isinstance(x, str):
|
|
130
131
|
return x
|
|
131
132
|
try:
|
|
@@ -242,6 +242,17 @@ def _delete(
|
|
|
242
242
|
vector_store: VectorStore | DocumentIndex,
|
|
243
243
|
ids: list[str],
|
|
244
244
|
) -> None:
|
|
245
|
+
"""Delete documents from a vector store or document index by their IDs.
|
|
246
|
+
|
|
247
|
+
Args:
|
|
248
|
+
vector_store: The vector store or document index to delete from.
|
|
249
|
+
ids: List of document IDs to delete.
|
|
250
|
+
|
|
251
|
+
Raises:
|
|
252
|
+
IndexingException: If the delete operation fails.
|
|
253
|
+
TypeError: If the `vector_store` is neither a `VectorStore` nor a
|
|
254
|
+
`DocumentIndex`.
|
|
255
|
+
"""
|
|
245
256
|
if isinstance(vector_store, VectorStore):
|
|
246
257
|
delete_ok = vector_store.delete(ids)
|
|
247
258
|
if delete_ok is not None and delete_ok is False:
|
|
@@ -12,13 +12,14 @@ from typing import (
|
|
|
12
12
|
Literal,
|
|
13
13
|
TypeAlias,
|
|
14
14
|
TypeVar,
|
|
15
|
+
cast,
|
|
15
16
|
)
|
|
16
17
|
|
|
17
18
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
18
19
|
from typing_extensions import TypedDict, override
|
|
19
20
|
|
|
20
|
-
from langchain_core.caches import BaseCache
|
|
21
|
-
from langchain_core.callbacks import Callbacks
|
|
21
|
+
from langchain_core.caches import BaseCache # noqa: TC001
|
|
22
|
+
from langchain_core.callbacks import Callbacks # noqa: TC001
|
|
22
23
|
from langchain_core.globals import get_verbose
|
|
23
24
|
from langchain_core.messages import (
|
|
24
25
|
AIMessage,
|
|
@@ -86,13 +87,28 @@ def get_tokenizer() -> Any:
|
|
|
86
87
|
return GPT2TokenizerFast.from_pretrained("gpt2")
|
|
87
88
|
|
|
88
89
|
|
|
90
|
+
_GPT2_TOKENIZER_WARNED = False
|
|
91
|
+
|
|
92
|
+
|
|
89
93
|
def _get_token_ids_default_method(text: str) -> list[int]:
|
|
90
|
-
"""Encode the text into token IDs."""
|
|
91
|
-
#
|
|
94
|
+
"""Encode the text into token IDs using the fallback GPT-2 tokenizer."""
|
|
95
|
+
global _GPT2_TOKENIZER_WARNED # noqa: PLW0603
|
|
96
|
+
if not _GPT2_TOKENIZER_WARNED:
|
|
97
|
+
warnings.warn(
|
|
98
|
+
"Using fallback GPT-2 tokenizer for token counting. "
|
|
99
|
+
"Token counts may be inaccurate for non-GPT-2 models. "
|
|
100
|
+
"For accurate counts, use a model-specific method if available.",
|
|
101
|
+
stacklevel=3,
|
|
102
|
+
)
|
|
103
|
+
_GPT2_TOKENIZER_WARNED = True
|
|
104
|
+
|
|
92
105
|
tokenizer = get_tokenizer()
|
|
93
106
|
|
|
94
|
-
#
|
|
95
|
-
|
|
107
|
+
# Pass verbose=False to suppress the "Token indices sequence length is longer than
|
|
108
|
+
# the specified maximum sequence length" warning from HuggingFace. This warning is
|
|
109
|
+
# about GPT-2's 1024 token context limit, but we're only using the tokenizer for
|
|
110
|
+
# counting, not for model input.
|
|
111
|
+
return cast("list[int]", tokenizer.encode(text, verbose=False))
|
|
96
112
|
|
|
97
113
|
|
|
98
114
|
LanguageModelInput = PromptValue | str | Sequence[MessageLikeRepresentation]
|
|
@@ -341,6 +341,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC):
|
|
|
341
341
|
"""Profile detailing model capabilities.
|
|
342
342
|
|
|
343
343
|
!!! warning "Beta feature"
|
|
344
|
+
|
|
344
345
|
This is a beta feature. The format of model profiles is subject to change.
|
|
345
346
|
|
|
346
347
|
If not specified, automatically loaded from the provider package on initialization
|
|
@@ -358,7 +359,10 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC):
|
|
|
358
359
|
|
|
359
360
|
@cached_property
|
|
360
361
|
def _serialized(self) -> dict[str, Any]:
|
|
361
|
-
|
|
362
|
+
# self is always a Serializable object in this case, thus the result is
|
|
363
|
+
# guaranteed to be a dict since dumps uses the default callback, which uses
|
|
364
|
+
# obj.to_json which always returns TypedDict subclasses
|
|
365
|
+
return cast("dict[str, Any]", dumpd(self))
|
|
362
366
|
|
|
363
367
|
# --- Runnable methods ---
|
|
364
368
|
|
|
@@ -461,7 +465,7 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC):
|
|
|
461
465
|
|
|
462
466
|
# Check if a runtime streaming flag has been passed in.
|
|
463
467
|
if "stream" in kwargs:
|
|
464
|
-
return kwargs["stream"]
|
|
468
|
+
return bool(kwargs["stream"])
|
|
465
469
|
|
|
466
470
|
if "streaming" in self.model_fields_set:
|
|
467
471
|
streaming_value = getattr(self, "streaming", None)
|
|
@@ -1144,7 +1148,15 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC):
|
|
|
1144
1148
|
if check_cache:
|
|
1145
1149
|
if llm_cache:
|
|
1146
1150
|
llm_string = self._get_llm_string(stop=stop, **kwargs)
|
|
1147
|
-
|
|
1151
|
+
normalized_messages = [
|
|
1152
|
+
(
|
|
1153
|
+
msg.model_copy(update={"id": None})
|
|
1154
|
+
if getattr(msg, "id", None) is not None
|
|
1155
|
+
else msg
|
|
1156
|
+
)
|
|
1157
|
+
for msg in messages
|
|
1158
|
+
]
|
|
1159
|
+
prompt = dumps(normalized_messages)
|
|
1148
1160
|
cache_val = llm_cache.lookup(prompt, llm_string)
|
|
1149
1161
|
if isinstance(cache_val, list):
|
|
1150
1162
|
converted_generations = self._convert_cached_generations(cache_val)
|
|
@@ -1262,7 +1274,15 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC):
|
|
|
1262
1274
|
if check_cache:
|
|
1263
1275
|
if llm_cache:
|
|
1264
1276
|
llm_string = self._get_llm_string(stop=stop, **kwargs)
|
|
1265
|
-
|
|
1277
|
+
normalized_messages = [
|
|
1278
|
+
(
|
|
1279
|
+
msg.model_copy(update={"id": None})
|
|
1280
|
+
if getattr(msg, "id", None) is not None
|
|
1281
|
+
else msg
|
|
1282
|
+
)
|
|
1283
|
+
for msg in messages
|
|
1284
|
+
]
|
|
1285
|
+
prompt = dumps(normalized_messages)
|
|
1266
1286
|
cache_val = await llm_cache.alookup(prompt, llm_string)
|
|
1267
1287
|
if isinstance(cache_val, list):
|
|
1268
1288
|
converted_generations = self._convert_cached_generations(cache_val)
|
|
@@ -301,7 +301,10 @@ class BaseLLM(BaseLanguageModel[str], ABC):
|
|
|
301
301
|
|
|
302
302
|
@functools.cached_property
|
|
303
303
|
def _serialized(self) -> dict[str, Any]:
|
|
304
|
-
|
|
304
|
+
# self is always a Serializable object in this case, thus the result is
|
|
305
|
+
# guaranteed to be a dict since dumps uses the default callback, which uses
|
|
306
|
+
# obj.to_json which always returns TypedDict subclasses
|
|
307
|
+
return cast("dict[str, Any]", dumpd(self))
|
|
305
308
|
|
|
306
309
|
# --- Runnable methods ---
|
|
307
310
|
|
|
@@ -490,17 +490,23 @@ def loads(
|
|
|
490
490
|
core LangChain types (messages, prompts, documents, etc.). See
|
|
491
491
|
`langchain_core.load.mapping` for the full list.
|
|
492
492
|
|
|
493
|
+
!!! warning "Beta feature"
|
|
494
|
+
|
|
495
|
+
This is a beta feature. Please be wary of deploying experimental code to
|
|
496
|
+
production unless you've taken appropriate precautions.
|
|
497
|
+
|
|
493
498
|
Args:
|
|
494
499
|
text: The string to load.
|
|
495
500
|
allowed_objects: Allowlist of classes that can be deserialized.
|
|
496
501
|
|
|
497
502
|
- `'core'` (default): Allow classes defined in the serialization mappings
|
|
498
|
-
for langchain_core
|
|
503
|
+
for `langchain_core`.
|
|
499
504
|
- `'all'`: Allow classes defined in the serialization mappings.
|
|
500
505
|
|
|
501
506
|
This includes core LangChain types (messages, prompts, documents, etc.)
|
|
502
507
|
and trusted partner integrations. See `langchain_core.load.mapping` for
|
|
503
508
|
the full list.
|
|
509
|
+
|
|
504
510
|
- Explicit list of classes: Only those specific classes are allowed.
|
|
505
511
|
- `[]`: Disallow all deserialization (will raise on any object).
|
|
506
512
|
secrets_map: A map of secrets to load.
|
|
@@ -522,8 +528,9 @@ def loads(
|
|
|
522
528
|
If provided, this function is called with `(class_path, kwargs)` where
|
|
523
529
|
`class_path` is the class path tuple and `kwargs` is the kwargs dict.
|
|
524
530
|
The validator should raise an exception if the object should not be
|
|
525
|
-
deserialized, otherwise return `None`.
|
|
526
|
-
|
|
531
|
+
deserialized, otherwise return `None`.
|
|
532
|
+
|
|
533
|
+
Defaults to `default_init_validator` which blocks jinja2 templates.
|
|
527
534
|
|
|
528
535
|
Returns:
|
|
529
536
|
Revived LangChain objects.
|
|
@@ -566,17 +573,23 @@ def load(
|
|
|
566
573
|
core LangChain types (messages, prompts, documents, etc.). See
|
|
567
574
|
`langchain_core.load.mapping` for the full list.
|
|
568
575
|
|
|
576
|
+
!!! warning "Beta feature"
|
|
577
|
+
|
|
578
|
+
This is a beta feature. Please be wary of deploying experimental code to
|
|
579
|
+
production unless you've taken appropriate precautions.
|
|
580
|
+
|
|
569
581
|
Args:
|
|
570
582
|
obj: The object to load.
|
|
571
583
|
allowed_objects: Allowlist of classes that can be deserialized.
|
|
572
584
|
|
|
573
585
|
- `'core'` (default): Allow classes defined in the serialization mappings
|
|
574
|
-
for langchain_core
|
|
586
|
+
for `langchain_core`.
|
|
575
587
|
- `'all'`: Allow classes defined in the serialization mappings.
|
|
576
588
|
|
|
577
589
|
This includes core LangChain types (messages, prompts, documents, etc.)
|
|
578
590
|
and trusted partner integrations. See `langchain_core.load.mapping` for
|
|
579
591
|
the full list.
|
|
592
|
+
|
|
580
593
|
- Explicit list of classes: Only those specific classes are allowed.
|
|
581
594
|
- `[]`: Disallow all deserialization (will raise on any object).
|
|
582
595
|
secrets_map: A map of secrets to load.
|
|
@@ -598,8 +611,9 @@ def load(
|
|
|
598
611
|
If provided, this function is called with `(class_path, kwargs)` where
|
|
599
612
|
`class_path` is the class path tuple and `kwargs` is the kwargs dict.
|
|
600
613
|
The validator should raise an exception if the object should not be
|
|
601
|
-
deserialized, otherwise return `None`.
|
|
602
|
-
|
|
614
|
+
deserialized, otherwise return `None`.
|
|
615
|
+
|
|
616
|
+
Defaults to `default_init_validator` which blocks jinja2 templates.
|
|
603
617
|
|
|
604
618
|
Returns:
|
|
605
619
|
Revived LangChain objects.
|
|
@@ -92,11 +92,12 @@ class Serializable(BaseModel, ABC):
|
|
|
92
92
|
|
|
93
93
|
It relies on the following methods and properties:
|
|
94
94
|
|
|
95
|
-
- `is_lc_serializable
|
|
95
|
+
- [`is_lc_serializable`][langchain_core.load.serializable.Serializable.is_lc_serializable]: Is this class serializable?
|
|
96
|
+
|
|
96
97
|
By design, even if a class inherits from `Serializable`, it is not serializable
|
|
97
98
|
by default. This is to prevent accidental serialization of objects that should
|
|
98
99
|
not be serialized.
|
|
99
|
-
- `get_lc_namespace
|
|
100
|
+
- [`get_lc_namespace`][langchain_core.load.serializable.Serializable.get_lc_namespace]: Get the namespace of the LangChain object.
|
|
100
101
|
|
|
101
102
|
During deserialization, this namespace is used to identify
|
|
102
103
|
the correct class to instantiate.
|
|
@@ -105,10 +106,10 @@ class Serializable(BaseModel, ABC):
|
|
|
105
106
|
During deserialization an additional mapping is handle classes that have moved
|
|
106
107
|
or been renamed across package versions.
|
|
107
108
|
|
|
108
|
-
- `lc_secrets
|
|
109
|
-
- `lc_attributes
|
|
109
|
+
- [`lc_secrets`][langchain_core.load.serializable.Serializable.lc_secrets]: A map of constructor argument names to secret ids.
|
|
110
|
+
- [`lc_attributes`][langchain_core.load.serializable.Serializable.lc_attributes]: List of additional attribute names that should be included
|
|
110
111
|
as part of the serialized representation.
|
|
111
|
-
"""
|
|
112
|
+
""" # noqa: E501
|
|
112
113
|
|
|
113
114
|
# Remove default BaseModel init docstring.
|
|
114
115
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
@@ -132,12 +133,12 @@ class Serializable(BaseModel, ABC):
|
|
|
132
133
|
def get_lc_namespace(cls) -> list[str]:
|
|
133
134
|
"""Get the namespace of the LangChain object.
|
|
134
135
|
|
|
135
|
-
For example, if the class is `langchain.llms.openai.OpenAI
|
|
136
|
-
namespace is `["langchain", "llms", "openai"]`
|
|
136
|
+
For example, if the class is [`langchain.llms.openai.OpenAI`][langchain_openai.OpenAI],
|
|
137
|
+
then the namespace is `["langchain", "llms", "openai"]`
|
|
137
138
|
|
|
138
139
|
Returns:
|
|
139
140
|
The namespace.
|
|
140
|
-
"""
|
|
141
|
+
""" # noqa: E501
|
|
141
142
|
return cls.__module__.split(".")
|
|
142
143
|
|
|
143
144
|
@property
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"""AI message."""
|
|
2
2
|
|
|
3
|
+
import itertools
|
|
3
4
|
import json
|
|
4
5
|
import logging
|
|
5
6
|
import operator
|
|
6
7
|
from collections.abc import Sequence
|
|
7
8
|
from typing import Any, Literal, cast, overload
|
|
8
9
|
|
|
9
|
-
from pydantic import model_validator
|
|
10
|
+
from pydantic import Field, model_validator
|
|
10
11
|
from typing_extensions import NotRequired, Self, TypedDict, override
|
|
11
12
|
|
|
12
13
|
from langchain_core.messages import content as types
|
|
@@ -166,10 +167,10 @@ class AIMessage(BaseMessage):
|
|
|
166
167
|
(e.g., tool calls, usage metadata) added by the LangChain framework.
|
|
167
168
|
"""
|
|
168
169
|
|
|
169
|
-
tool_calls: list[ToolCall] =
|
|
170
|
+
tool_calls: list[ToolCall] = Field(default_factory=list)
|
|
170
171
|
"""If present, tool calls associated with the message."""
|
|
171
172
|
|
|
172
|
-
invalid_tool_calls: list[InvalidToolCall] =
|
|
173
|
+
invalid_tool_calls: list[InvalidToolCall] = Field(default_factory=list)
|
|
173
174
|
"""If present, tool calls with parsing errors associated with the message."""
|
|
174
175
|
|
|
175
176
|
usage_metadata: UsageMetadata | None = None
|
|
@@ -394,7 +395,7 @@ class AIMessageChunk(AIMessage, BaseMessageChunk):
|
|
|
394
395
|
type: Literal["AIMessageChunk"] = "AIMessageChunk" # type: ignore[assignment]
|
|
395
396
|
"""The type of the message (used for deserialization)."""
|
|
396
397
|
|
|
397
|
-
tool_call_chunks: list[ToolCallChunk] =
|
|
398
|
+
tool_call_chunks: list[ToolCallChunk] = Field(default_factory=list)
|
|
398
399
|
"""If provided, tool call chunks associated with the message."""
|
|
399
400
|
|
|
400
401
|
chunk_position: Literal["last"] | None = None
|
|
@@ -651,29 +652,28 @@ def add_ai_message_chunks(
|
|
|
651
652
|
else:
|
|
652
653
|
usage_metadata = None
|
|
653
654
|
|
|
655
|
+
# Ranks are defined by the order of preference. Higher is better:
|
|
656
|
+
# 2. Provider-assigned IDs (non lc_* and non lc_run-*)
|
|
657
|
+
# 1. lc_run-* IDs
|
|
658
|
+
# 0. lc_* and other remaining IDs
|
|
659
|
+
best_rank = -1
|
|
654
660
|
chunk_id = None
|
|
655
|
-
candidates = [left.id]
|
|
656
|
-
|
|
661
|
+
candidates = itertools.chain([left.id], (o.id for o in others))
|
|
662
|
+
|
|
657
663
|
for id_ in candidates:
|
|
658
|
-
if
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
):
|
|
664
|
+
if not id_:
|
|
665
|
+
continue
|
|
666
|
+
|
|
667
|
+
if not id_.startswith(LC_ID_PREFIX) and not id_.startswith(LC_AUTO_PREFIX):
|
|
663
668
|
chunk_id = id_
|
|
669
|
+
# Highest rank, return instantly
|
|
664
670
|
break
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
else:
|
|
672
|
-
# third pass: take any remaining ID (auto-generated lc_* IDs)
|
|
673
|
-
for id_ in candidates:
|
|
674
|
-
if id_:
|
|
675
|
-
chunk_id = id_
|
|
676
|
-
break
|
|
671
|
+
|
|
672
|
+
rank = 1 if id_.startswith(LC_ID_PREFIX) else 0
|
|
673
|
+
|
|
674
|
+
if rank > best_rank:
|
|
675
|
+
best_rank = rank
|
|
676
|
+
chunk_id = id_
|
|
677
677
|
|
|
678
678
|
chunk_position: Literal["last"] | None = (
|
|
679
679
|
"last" if any(x.chunk_position == "last" for x in [left, *others]) else None
|
|
@@ -266,6 +266,9 @@ class BaseMessage(Serializable):
|
|
|
266
266
|
|
|
267
267
|
Can be used as both property (`message.text`) and method (`message.text()`).
|
|
268
268
|
|
|
269
|
+
Handles both string and list content types (e.g. for content blocks). Only
|
|
270
|
+
extracts blocks with `type: 'text'`; other block types are ignored.
|
|
271
|
+
|
|
269
272
|
!!! deprecated
|
|
270
273
|
As of `langchain-core` 1.0.0, calling `.text()` as a method is deprecated.
|
|
271
274
|
Use `.text` as a property instead. This method will be removed in 2.0.0.
|
|
@@ -277,7 +280,7 @@ class BaseMessage(Serializable):
|
|
|
277
280
|
if isinstance(self.content, str):
|
|
278
281
|
text_value = self.content
|
|
279
282
|
else:
|
|
280
|
-
#
|
|
283
|
+
# Must be a list
|
|
281
284
|
blocks = [
|
|
282
285
|
block
|
|
283
286
|
for block in self.content
|
|
@@ -302,7 +305,7 @@ class BaseMessage(Serializable):
|
|
|
302
305
|
from langchain_core.prompts.chat import ChatPromptTemplate # noqa: PLC0415
|
|
303
306
|
|
|
304
307
|
prompt = ChatPromptTemplate(messages=[self])
|
|
305
|
-
return prompt
|
|
308
|
+
return prompt.__add__(other)
|
|
306
309
|
|
|
307
310
|
def pretty_repr(
|
|
308
311
|
self,
|