langchain 0.3.26__py3-none-any.whl → 0.3.27__py3-none-any.whl
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.
Potentially problematic release.
This version of langchain might be problematic. Click here for more details.
- langchain/__init__.py +110 -96
- langchain/_api/__init__.py +2 -2
- langchain/_api/deprecation.py +3 -3
- langchain/_api/module_import.py +51 -46
- langchain/_api/path.py +1 -1
- langchain/adapters/openai.py +8 -8
- langchain/agents/__init__.py +15 -12
- langchain/agents/agent.py +160 -133
- langchain/agents/agent_iterator.py +31 -14
- langchain/agents/agent_toolkits/__init__.py +7 -6
- langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
- langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
- langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
- langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
- langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
- langchain/agents/agent_toolkits/csv/__init__.py +4 -2
- langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
- langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
- langchain/agents/agent_toolkits/github/toolkit.py +9 -9
- langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
- langchain/agents/agent_toolkits/json/base.py +1 -1
- langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
- langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
- langchain/agents/agent_toolkits/openapi/base.py +1 -1
- langchain/agents/agent_toolkits/openapi/planner.py +2 -2
- langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
- langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
- langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
- langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
- langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
- langchain/agents/agent_toolkits/powerbi/base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
- langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/python/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
- langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/sql/prompt.py +1 -1
- langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/vectorstore/base.py +2 -2
- langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
- langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
- langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
- langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
- langchain/agents/agent_types.py +6 -6
- langchain/agents/chat/base.py +6 -12
- langchain/agents/chat/output_parser.py +9 -6
- langchain/agents/chat/prompt.py +3 -4
- langchain/agents/conversational/base.py +9 -5
- langchain/agents/conversational/output_parser.py +4 -2
- langchain/agents/conversational/prompt.py +2 -3
- langchain/agents/conversational_chat/base.py +7 -5
- langchain/agents/conversational_chat/output_parser.py +9 -11
- langchain/agents/conversational_chat/prompt.py +5 -6
- langchain/agents/format_scratchpad/__init__.py +3 -3
- langchain/agents/format_scratchpad/log_to_messages.py +1 -1
- langchain/agents/format_scratchpad/openai_functions.py +8 -6
- langchain/agents/format_scratchpad/tools.py +5 -3
- langchain/agents/format_scratchpad/xml.py +33 -2
- langchain/agents/initialize.py +16 -8
- langchain/agents/json_chat/base.py +18 -18
- langchain/agents/json_chat/prompt.py +2 -3
- langchain/agents/load_tools.py +2 -1
- langchain/agents/loading.py +28 -18
- langchain/agents/mrkl/base.py +9 -4
- langchain/agents/mrkl/output_parser.py +17 -13
- langchain/agents/mrkl/prompt.py +1 -2
- langchain/agents/openai_assistant/base.py +80 -70
- langchain/agents/openai_functions_agent/base.py +46 -37
- langchain/agents/openai_functions_multi_agent/base.py +39 -26
- langchain/agents/openai_tools/base.py +8 -8
- langchain/agents/output_parsers/__init__.py +3 -3
- langchain/agents/output_parsers/json.py +6 -6
- langchain/agents/output_parsers/openai_functions.py +15 -7
- langchain/agents/output_parsers/openai_tools.py +9 -4
- langchain/agents/output_parsers/react_json_single_input.py +10 -5
- langchain/agents/output_parsers/react_single_input.py +15 -11
- langchain/agents/output_parsers/self_ask.py +3 -2
- langchain/agents/output_parsers/tools.py +18 -13
- langchain/agents/output_parsers/xml.py +99 -28
- langchain/agents/react/agent.py +4 -4
- langchain/agents/react/base.py +22 -17
- langchain/agents/react/output_parser.py +5 -6
- langchain/agents/react/textworld_prompt.py +0 -1
- langchain/agents/react/wiki_prompt.py +14 -15
- langchain/agents/schema.py +3 -2
- langchain/agents/self_ask_with_search/base.py +19 -15
- langchain/agents/self_ask_with_search/prompt.py +0 -1
- langchain/agents/structured_chat/base.py +14 -11
- langchain/agents/structured_chat/output_parser.py +16 -18
- langchain/agents/structured_chat/prompt.py +3 -4
- langchain/agents/tool_calling_agent/base.py +7 -6
- langchain/agents/tools.py +2 -2
- langchain/agents/utils.py +2 -3
- langchain/agents/xml/base.py +5 -5
- langchain/agents/xml/prompt.py +1 -2
- langchain/cache.py +12 -12
- langchain/callbacks/__init__.py +11 -11
- langchain/callbacks/aim_callback.py +2 -2
- langchain/callbacks/argilla_callback.py +1 -1
- langchain/callbacks/arize_callback.py +1 -1
- langchain/callbacks/arthur_callback.py +1 -1
- langchain/callbacks/base.py +7 -7
- langchain/callbacks/clearml_callback.py +1 -1
- langchain/callbacks/comet_ml_callback.py +1 -1
- langchain/callbacks/confident_callback.py +1 -1
- langchain/callbacks/context_callback.py +1 -1
- langchain/callbacks/flyte_callback.py +1 -1
- langchain/callbacks/human.py +2 -2
- langchain/callbacks/infino_callback.py +1 -1
- langchain/callbacks/labelstudio_callback.py +1 -1
- langchain/callbacks/llmonitor_callback.py +1 -1
- langchain/callbacks/manager.py +5 -5
- langchain/callbacks/mlflow_callback.py +2 -2
- langchain/callbacks/openai_info.py +1 -1
- langchain/callbacks/promptlayer_callback.py +1 -1
- langchain/callbacks/sagemaker_callback.py +1 -1
- langchain/callbacks/streaming_aiter.py +4 -1
- langchain/callbacks/streaming_aiter_final_only.py +5 -3
- langchain/callbacks/streaming_stdout_final_only.py +5 -3
- langchain/callbacks/streamlit/__init__.py +3 -2
- langchain/callbacks/streamlit/mutable_expander.py +1 -1
- langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
- langchain/callbacks/tracers/__init__.py +1 -1
- langchain/callbacks/tracers/comet.py +1 -1
- langchain/callbacks/tracers/evaluation.py +1 -1
- langchain/callbacks/tracers/log_stream.py +1 -1
- langchain/callbacks/tracers/logging.py +1 -1
- langchain/callbacks/tracers/stdout.py +1 -1
- langchain/callbacks/trubrics_callback.py +1 -1
- langchain/callbacks/utils.py +4 -4
- langchain/callbacks/wandb_callback.py +1 -1
- langchain/callbacks/whylabs_callback.py +1 -1
- langchain/chains/api/base.py +36 -22
- langchain/chains/api/news_docs.py +1 -2
- langchain/chains/api/open_meteo_docs.py +1 -2
- langchain/chains/api/openapi/requests_chain.py +1 -1
- langchain/chains/api/openapi/response_chain.py +1 -1
- langchain/chains/api/podcast_docs.py +1 -2
- langchain/chains/api/prompt.py +1 -2
- langchain/chains/api/tmdb_docs.py +1 -2
- langchain/chains/base.py +88 -54
- langchain/chains/chat_vector_db/prompts.py +2 -3
- langchain/chains/combine_documents/__init__.py +1 -1
- langchain/chains/combine_documents/base.py +23 -10
- langchain/chains/combine_documents/map_reduce.py +38 -30
- langchain/chains/combine_documents/map_rerank.py +33 -20
- langchain/chains/combine_documents/reduce.py +47 -26
- langchain/chains/combine_documents/refine.py +26 -17
- langchain/chains/combine_documents/stuff.py +19 -12
- langchain/chains/constitutional_ai/base.py +4 -4
- langchain/chains/constitutional_ai/principles.py +22 -25
- langchain/chains/constitutional_ai/prompts.py +25 -28
- langchain/chains/conversation/base.py +5 -3
- langchain/chains/conversation/memory.py +5 -5
- langchain/chains/conversation/prompt.py +5 -5
- langchain/chains/conversational_retrieval/base.py +41 -20
- langchain/chains/conversational_retrieval/prompts.py +2 -3
- langchain/chains/elasticsearch_database/base.py +8 -9
- langchain/chains/elasticsearch_database/prompts.py +2 -3
- langchain/chains/ernie_functions/__init__.py +2 -2
- langchain/chains/example_generator.py +3 -1
- langchain/chains/flare/base.py +26 -12
- langchain/chains/graph_qa/cypher.py +2 -2
- langchain/chains/graph_qa/falkordb.py +1 -1
- langchain/chains/graph_qa/gremlin.py +1 -1
- langchain/chains/graph_qa/neptune_sparql.py +1 -1
- langchain/chains/graph_qa/prompts.py +2 -2
- langchain/chains/history_aware_retriever.py +2 -1
- langchain/chains/hyde/base.py +6 -5
- langchain/chains/hyde/prompts.py +5 -6
- langchain/chains/llm.py +77 -61
- langchain/chains/llm_bash/__init__.py +2 -1
- langchain/chains/llm_checker/base.py +7 -5
- langchain/chains/llm_checker/prompt.py +3 -4
- langchain/chains/llm_math/base.py +16 -9
- langchain/chains/llm_math/prompt.py +1 -2
- langchain/chains/llm_summarization_checker/base.py +9 -6
- langchain/chains/llm_symbolic_math/__init__.py +2 -1
- langchain/chains/loading.py +151 -95
- langchain/chains/mapreduce.py +4 -3
- langchain/chains/moderation.py +8 -9
- langchain/chains/natbot/base.py +8 -8
- langchain/chains/natbot/crawler.py +73 -76
- langchain/chains/natbot/prompt.py +2 -3
- langchain/chains/openai_functions/__init__.py +7 -7
- langchain/chains/openai_functions/base.py +13 -10
- langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
- langchain/chains/openai_functions/extraction.py +19 -19
- langchain/chains/openai_functions/openapi.py +35 -35
- langchain/chains/openai_functions/qa_with_structure.py +19 -12
- langchain/chains/openai_functions/tagging.py +2 -4
- langchain/chains/openai_tools/extraction.py +7 -8
- langchain/chains/qa_generation/base.py +4 -3
- langchain/chains/qa_generation/prompt.py +5 -5
- langchain/chains/qa_with_sources/base.py +14 -6
- langchain/chains/qa_with_sources/loading.py +16 -8
- langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
- langchain/chains/qa_with_sources/refine_prompts.py +0 -1
- langchain/chains/qa_with_sources/retrieval.py +14 -5
- langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
- langchain/chains/qa_with_sources/vector_db.py +17 -6
- langchain/chains/query_constructor/base.py +34 -33
- langchain/chains/query_constructor/ir.py +4 -4
- langchain/chains/query_constructor/parser.py +37 -32
- langchain/chains/query_constructor/prompt.py +5 -6
- langchain/chains/question_answering/chain.py +21 -10
- langchain/chains/question_answering/map_reduce_prompt.py +14 -14
- langchain/chains/question_answering/map_rerank_prompt.py +3 -3
- langchain/chains/question_answering/refine_prompts.py +2 -5
- langchain/chains/question_answering/stuff_prompt.py +5 -5
- langchain/chains/retrieval.py +1 -3
- langchain/chains/retrieval_qa/base.py +34 -27
- langchain/chains/retrieval_qa/prompt.py +1 -2
- langchain/chains/router/__init__.py +3 -3
- langchain/chains/router/base.py +24 -20
- langchain/chains/router/embedding_router.py +12 -8
- langchain/chains/router/llm_router.py +17 -16
- langchain/chains/router/multi_prompt.py +2 -2
- langchain/chains/router/multi_retrieval_qa.py +10 -5
- langchain/chains/sequential.py +30 -18
- langchain/chains/sql_database/prompt.py +14 -16
- langchain/chains/sql_database/query.py +6 -5
- langchain/chains/structured_output/__init__.py +1 -1
- langchain/chains/structured_output/base.py +75 -67
- langchain/chains/summarize/chain.py +11 -5
- langchain/chains/summarize/map_reduce_prompt.py +0 -1
- langchain/chains/summarize/stuff_prompt.py +0 -1
- langchain/chains/transform.py +5 -6
- langchain/chat_loaders/facebook_messenger.py +1 -1
- langchain/chat_loaders/langsmith.py +1 -1
- langchain/chat_loaders/utils.py +3 -3
- langchain/chat_models/__init__.py +20 -19
- langchain/chat_models/anthropic.py +1 -1
- langchain/chat_models/azureml_endpoint.py +1 -1
- langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
- langchain/chat_models/base.py +160 -123
- langchain/chat_models/bedrock.py +1 -1
- langchain/chat_models/fake.py +1 -1
- langchain/chat_models/meta.py +1 -1
- langchain/chat_models/pai_eas_endpoint.py +1 -1
- langchain/chat_models/promptlayer_openai.py +1 -1
- langchain/chat_models/volcengine_maas.py +1 -1
- langchain/docstore/base.py +1 -1
- langchain/document_loaders/__init__.py +9 -9
- langchain/document_loaders/airbyte.py +3 -3
- langchain/document_loaders/assemblyai.py +1 -1
- langchain/document_loaders/azure_blob_storage_container.py +1 -1
- langchain/document_loaders/azure_blob_storage_file.py +1 -1
- langchain/document_loaders/baiducloud_bos_file.py +1 -1
- langchain/document_loaders/base.py +1 -1
- langchain/document_loaders/blob_loaders/__init__.py +1 -1
- langchain/document_loaders/blockchain.py +1 -1
- langchain/document_loaders/chatgpt.py +1 -1
- langchain/document_loaders/college_confidential.py +1 -1
- langchain/document_loaders/confluence.py +1 -1
- langchain/document_loaders/email.py +1 -1
- langchain/document_loaders/facebook_chat.py +1 -1
- langchain/document_loaders/markdown.py +1 -1
- langchain/document_loaders/notebook.py +1 -1
- langchain/document_loaders/org_mode.py +1 -1
- langchain/document_loaders/parsers/__init__.py +1 -1
- langchain/document_loaders/parsers/docai.py +1 -1
- langchain/document_loaders/parsers/generic.py +1 -1
- langchain/document_loaders/parsers/html/__init__.py +1 -1
- langchain/document_loaders/parsers/html/bs4.py +1 -1
- langchain/document_loaders/parsers/language/cobol.py +1 -1
- langchain/document_loaders/parsers/language/python.py +1 -1
- langchain/document_loaders/parsers/msword.py +1 -1
- langchain/document_loaders/parsers/pdf.py +5 -5
- langchain/document_loaders/parsers/registry.py +1 -1
- langchain/document_loaders/pdf.py +8 -8
- langchain/document_loaders/powerpoint.py +1 -1
- langchain/document_loaders/pyspark_dataframe.py +1 -1
- langchain/document_loaders/telegram.py +2 -2
- langchain/document_loaders/tencent_cos_directory.py +1 -1
- langchain/document_loaders/unstructured.py +5 -5
- langchain/document_loaders/url_playwright.py +1 -1
- langchain/document_loaders/whatsapp_chat.py +1 -1
- langchain/document_loaders/youtube.py +2 -2
- langchain/document_transformers/__init__.py +3 -3
- langchain/document_transformers/beautiful_soup_transformer.py +1 -1
- langchain/document_transformers/doctran_text_extract.py +1 -1
- langchain/document_transformers/doctran_text_qa.py +1 -1
- langchain/document_transformers/doctran_text_translate.py +1 -1
- langchain/document_transformers/embeddings_redundant_filter.py +3 -3
- langchain/document_transformers/google_translate.py +1 -1
- langchain/document_transformers/html2text.py +1 -1
- langchain/document_transformers/nuclia_text_transform.py +1 -1
- langchain/embeddings/__init__.py +5 -5
- langchain/embeddings/base.py +33 -24
- langchain/embeddings/cache.py +36 -31
- langchain/embeddings/fake.py +1 -1
- langchain/embeddings/huggingface.py +2 -2
- langchain/evaluation/__init__.py +22 -22
- langchain/evaluation/agents/trajectory_eval_chain.py +23 -23
- langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
- langchain/evaluation/comparison/__init__.py +1 -1
- langchain/evaluation/comparison/eval_chain.py +20 -13
- langchain/evaluation/comparison/prompt.py +1 -2
- langchain/evaluation/criteria/__init__.py +1 -1
- langchain/evaluation/criteria/eval_chain.py +20 -11
- langchain/evaluation/criteria/prompt.py +2 -3
- langchain/evaluation/embedding_distance/base.py +23 -20
- langchain/evaluation/loading.py +15 -11
- langchain/evaluation/parsing/base.py +4 -1
- langchain/evaluation/parsing/json_distance.py +5 -2
- langchain/evaluation/parsing/json_schema.py +12 -8
- langchain/evaluation/qa/__init__.py +1 -1
- langchain/evaluation/qa/eval_chain.py +12 -5
- langchain/evaluation/qa/eval_prompt.py +7 -8
- langchain/evaluation/qa/generate_chain.py +2 -1
- langchain/evaluation/qa/generate_prompt.py +2 -4
- langchain/evaluation/schema.py +38 -30
- langchain/evaluation/scoring/__init__.py +1 -1
- langchain/evaluation/scoring/eval_chain.py +22 -15
- langchain/evaluation/scoring/prompt.py +0 -1
- langchain/evaluation/string_distance/base.py +14 -9
- langchain/globals.py +12 -11
- langchain/graphs/__init__.py +6 -6
- langchain/graphs/graph_document.py +1 -1
- langchain/graphs/networkx_graph.py +2 -2
- langchain/hub.py +9 -11
- langchain/indexes/__init__.py +3 -3
- langchain/indexes/_sql_record_manager.py +63 -46
- langchain/indexes/prompts/entity_extraction.py +1 -2
- langchain/indexes/prompts/entity_summarization.py +1 -2
- langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
- langchain/indexes/vectorstore.py +35 -19
- langchain/llms/__init__.py +13 -13
- langchain/llms/ai21.py +1 -1
- langchain/llms/azureml_endpoint.py +4 -4
- langchain/llms/base.py +15 -7
- langchain/llms/bedrock.py +1 -1
- langchain/llms/cloudflare_workersai.py +1 -1
- langchain/llms/gradient_ai.py +1 -1
- langchain/llms/loading.py +1 -1
- langchain/llms/openai.py +1 -1
- langchain/llms/sagemaker_endpoint.py +1 -1
- langchain/load/dump.py +1 -1
- langchain/load/load.py +1 -1
- langchain/load/serializable.py +3 -3
- langchain/memory/__init__.py +3 -3
- langchain/memory/buffer.py +9 -7
- langchain/memory/chat_memory.py +14 -8
- langchain/memory/chat_message_histories/__init__.py +1 -1
- langchain/memory/chat_message_histories/astradb.py +1 -1
- langchain/memory/chat_message_histories/cassandra.py +1 -1
- langchain/memory/chat_message_histories/cosmos_db.py +1 -1
- langchain/memory/chat_message_histories/dynamodb.py +1 -1
- langchain/memory/chat_message_histories/elasticsearch.py +1 -1
- langchain/memory/chat_message_histories/file.py +1 -1
- langchain/memory/chat_message_histories/firestore.py +1 -1
- langchain/memory/chat_message_histories/momento.py +1 -1
- langchain/memory/chat_message_histories/mongodb.py +1 -1
- langchain/memory/chat_message_histories/neo4j.py +1 -1
- langchain/memory/chat_message_histories/postgres.py +1 -1
- langchain/memory/chat_message_histories/redis.py +1 -1
- langchain/memory/chat_message_histories/rocksetdb.py +1 -1
- langchain/memory/chat_message_histories/singlestoredb.py +1 -1
- langchain/memory/chat_message_histories/streamlit.py +1 -1
- langchain/memory/chat_message_histories/upstash_redis.py +1 -1
- langchain/memory/chat_message_histories/xata.py +1 -1
- langchain/memory/chat_message_histories/zep.py +1 -1
- langchain/memory/combined.py +13 -12
- langchain/memory/entity.py +84 -61
- langchain/memory/prompt.py +10 -11
- langchain/memory/readonly.py +0 -2
- langchain/memory/simple.py +1 -3
- langchain/memory/summary.py +13 -11
- langchain/memory/summary_buffer.py +17 -8
- langchain/memory/utils.py +3 -2
- langchain/memory/vectorstore.py +12 -5
- langchain/memory/vectorstore_token_buffer_memory.py +5 -5
- langchain/model_laboratory.py +12 -11
- langchain/output_parsers/__init__.py +4 -4
- langchain/output_parsers/boolean.py +7 -4
- langchain/output_parsers/combining.py +10 -5
- langchain/output_parsers/datetime.py +32 -31
- langchain/output_parsers/enum.py +5 -3
- langchain/output_parsers/fix.py +52 -52
- langchain/output_parsers/format_instructions.py +6 -8
- langchain/output_parsers/json.py +2 -2
- langchain/output_parsers/list.py +2 -2
- langchain/output_parsers/loading.py +9 -9
- langchain/output_parsers/openai_functions.py +3 -3
- langchain/output_parsers/openai_tools.py +1 -1
- langchain/output_parsers/pandas_dataframe.py +43 -47
- langchain/output_parsers/prompts.py +1 -2
- langchain/output_parsers/rail_parser.py +1 -1
- langchain/output_parsers/regex.py +7 -8
- langchain/output_parsers/regex_dict.py +7 -10
- langchain/output_parsers/retry.py +77 -78
- langchain/output_parsers/structured.py +11 -6
- langchain/output_parsers/yaml.py +15 -11
- langchain/prompts/__init__.py +5 -3
- langchain/prompts/base.py +5 -5
- langchain/prompts/chat.py +8 -8
- langchain/prompts/example_selector/__init__.py +3 -1
- langchain/prompts/example_selector/semantic_similarity.py +2 -2
- langchain/prompts/few_shot.py +1 -1
- langchain/prompts/loading.py +3 -3
- langchain/prompts/prompt.py +1 -1
- langchain/retrievers/__init__.py +5 -5
- langchain/retrievers/bedrock.py +2 -2
- langchain/retrievers/bm25.py +1 -1
- langchain/retrievers/contextual_compression.py +14 -8
- langchain/retrievers/docarray.py +1 -1
- langchain/retrievers/document_compressors/__init__.py +5 -4
- langchain/retrievers/document_compressors/base.py +12 -6
- langchain/retrievers/document_compressors/chain_extract.py +2 -2
- langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
- langchain/retrievers/document_compressors/chain_filter.py +9 -9
- langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
- langchain/retrievers/document_compressors/cohere_rerank.py +15 -15
- langchain/retrievers/document_compressors/embeddings_filter.py +21 -17
- langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
- langchain/retrievers/document_compressors/listwise_rerank.py +7 -5
- langchain/retrievers/ensemble.py +28 -25
- langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
- langchain/retrievers/google_vertex_ai_search.py +2 -2
- langchain/retrievers/kendra.py +10 -10
- langchain/retrievers/llama_index.py +1 -1
- langchain/retrievers/merger_retriever.py +11 -11
- langchain/retrievers/milvus.py +1 -1
- langchain/retrievers/multi_query.py +32 -26
- langchain/retrievers/multi_vector.py +20 -8
- langchain/retrievers/parent_document_retriever.py +18 -9
- langchain/retrievers/re_phraser.py +6 -5
- langchain/retrievers/self_query/base.py +138 -127
- langchain/retrievers/time_weighted_retriever.py +18 -7
- langchain/retrievers/zilliz.py +1 -1
- langchain/runnables/openai_functions.py +6 -2
- langchain/schema/__init__.py +23 -23
- langchain/schema/cache.py +1 -1
- langchain/schema/callbacks/base.py +7 -7
- langchain/schema/callbacks/manager.py +19 -19
- langchain/schema/callbacks/tracers/base.py +1 -1
- langchain/schema/callbacks/tracers/evaluation.py +1 -1
- langchain/schema/callbacks/tracers/langchain.py +1 -1
- langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
- langchain/schema/callbacks/tracers/log_stream.py +1 -1
- langchain/schema/callbacks/tracers/schemas.py +8 -8
- langchain/schema/callbacks/tracers/stdout.py +3 -3
- langchain/schema/document.py +1 -1
- langchain/schema/language_model.py +2 -2
- langchain/schema/messages.py +12 -12
- langchain/schema/output.py +3 -3
- langchain/schema/output_parser.py +3 -3
- langchain/schema/runnable/__init__.py +3 -3
- langchain/schema/runnable/base.py +9 -9
- langchain/schema/runnable/config.py +5 -5
- langchain/schema/runnable/configurable.py +1 -1
- langchain/schema/runnable/history.py +1 -1
- langchain/schema/runnable/passthrough.py +1 -1
- langchain/schema/runnable/utils.py +16 -16
- langchain/schema/vectorstore.py +1 -1
- langchain/smith/__init__.py +1 -1
- langchain/smith/evaluation/__init__.py +2 -2
- langchain/smith/evaluation/config.py +10 -7
- langchain/smith/evaluation/name_generation.py +3 -3
- langchain/smith/evaluation/progress.py +11 -2
- langchain/smith/evaluation/runner_utils.py +179 -127
- langchain/smith/evaluation/string_run_evaluator.py +75 -68
- langchain/storage/__init__.py +2 -2
- langchain/storage/_lc_store.py +4 -2
- langchain/storage/encoder_backed.py +6 -2
- langchain/storage/file_system.py +19 -16
- langchain/storage/in_memory.py +1 -1
- langchain/storage/upstash_redis.py +1 -1
- langchain/text_splitter.py +15 -15
- langchain/tools/__init__.py +28 -26
- langchain/tools/ainetwork/app.py +1 -1
- langchain/tools/ainetwork/base.py +1 -1
- langchain/tools/ainetwork/owner.py +1 -1
- langchain/tools/ainetwork/rule.py +1 -1
- langchain/tools/ainetwork/transfer.py +1 -1
- langchain/tools/ainetwork/value.py +1 -1
- langchain/tools/amadeus/closest_airport.py +1 -1
- langchain/tools/amadeus/flight_search.py +1 -1
- langchain/tools/azure_cognitive_services/__init__.py +1 -1
- langchain/tools/base.py +4 -4
- langchain/tools/bearly/tool.py +1 -1
- langchain/tools/bing_search/__init__.py +1 -1
- langchain/tools/bing_search/tool.py +1 -1
- langchain/tools/dataforseo_api_search/__init__.py +1 -1
- langchain/tools/dataforseo_api_search/tool.py +1 -1
- langchain/tools/ddg_search/tool.py +1 -1
- langchain/tools/e2b_data_analysis/tool.py +2 -2
- langchain/tools/edenai/__init__.py +1 -1
- langchain/tools/file_management/__init__.py +1 -1
- langchain/tools/file_management/copy.py +1 -1
- langchain/tools/file_management/delete.py +1 -1
- langchain/tools/gmail/__init__.py +2 -2
- langchain/tools/gmail/get_message.py +1 -1
- langchain/tools/gmail/search.py +1 -1
- langchain/tools/gmail/send_message.py +1 -1
- langchain/tools/google_finance/__init__.py +1 -1
- langchain/tools/google_finance/tool.py +1 -1
- langchain/tools/google_scholar/__init__.py +1 -1
- langchain/tools/google_scholar/tool.py +1 -1
- langchain/tools/google_search/__init__.py +1 -1
- langchain/tools/google_search/tool.py +1 -1
- langchain/tools/google_serper/__init__.py +1 -1
- langchain/tools/google_serper/tool.py +1 -1
- langchain/tools/google_trends/__init__.py +1 -1
- langchain/tools/google_trends/tool.py +1 -1
- langchain/tools/jira/tool.py +20 -1
- langchain/tools/json/tool.py +25 -3
- langchain/tools/memorize/tool.py +1 -1
- langchain/tools/multion/__init__.py +1 -1
- langchain/tools/multion/update_session.py +1 -1
- langchain/tools/office365/__init__.py +2 -2
- langchain/tools/office365/events_search.py +1 -1
- langchain/tools/office365/messages_search.py +1 -1
- langchain/tools/office365/send_event.py +1 -1
- langchain/tools/office365/send_message.py +1 -1
- langchain/tools/openapi/utils/api_models.py +6 -6
- langchain/tools/playwright/__init__.py +5 -5
- langchain/tools/playwright/click.py +1 -1
- langchain/tools/playwright/extract_hyperlinks.py +1 -1
- langchain/tools/playwright/get_elements.py +1 -1
- langchain/tools/playwright/navigate.py +1 -1
- langchain/tools/plugin.py +2 -2
- langchain/tools/powerbi/tool.py +1 -1
- langchain/tools/python/__init__.py +2 -1
- langchain/tools/reddit_search/tool.py +1 -1
- langchain/tools/render.py +2 -2
- langchain/tools/requests/tool.py +2 -2
- langchain/tools/searchapi/tool.py +1 -1
- langchain/tools/searx_search/tool.py +1 -1
- langchain/tools/slack/get_message.py +1 -1
- langchain/tools/spark_sql/tool.py +1 -1
- langchain/tools/sql_database/tool.py +1 -1
- langchain/tools/tavily_search/__init__.py +1 -1
- langchain/tools/tavily_search/tool.py +1 -1
- langchain/tools/zapier/__init__.py +1 -1
- langchain/tools/zapier/tool.py +24 -2
- langchain/utilities/__init__.py +4 -4
- langchain/utilities/arcee.py +4 -4
- langchain/utilities/clickup.py +4 -4
- langchain/utilities/dalle_image_generator.py +1 -1
- langchain/utilities/dataforseo_api_search.py +1 -1
- langchain/utilities/opaqueprompts.py +1 -1
- langchain/utilities/reddit_search.py +1 -1
- langchain/utilities/sql_database.py +1 -1
- langchain/utilities/tavily_search.py +1 -1
- langchain/utilities/vertexai.py +2 -2
- langchain/utils/__init__.py +1 -1
- langchain/utils/aiter.py +1 -1
- langchain/utils/html.py +3 -3
- langchain/utils/input.py +1 -1
- langchain/utils/iter.py +1 -1
- langchain/utils/json_schema.py +1 -3
- langchain/utils/strings.py +1 -1
- langchain/utils/utils.py +6 -6
- langchain/vectorstores/__init__.py +5 -5
- langchain/vectorstores/alibabacloud_opensearch.py +1 -1
- langchain/vectorstores/azure_cosmos_db.py +1 -1
- langchain/vectorstores/clickhouse.py +1 -1
- langchain/vectorstores/elastic_vector_search.py +1 -1
- langchain/vectorstores/elasticsearch.py +2 -2
- langchain/vectorstores/myscale.py +1 -1
- langchain/vectorstores/neo4j_vector.py +1 -1
- langchain/vectorstores/pgembedding.py +1 -1
- langchain/vectorstores/qdrant.py +1 -1
- langchain/vectorstores/redis/__init__.py +1 -1
- langchain/vectorstores/redis/base.py +1 -1
- langchain/vectorstores/redis/filters.py +4 -4
- langchain/vectorstores/redis/schema.py +6 -6
- langchain/vectorstores/sklearn.py +2 -2
- langchain/vectorstores/starrocks.py +1 -1
- langchain/vectorstores/utils.py +1 -1
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/METADATA +4 -4
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/RECORD +580 -580
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
langchain/chat_models/base.py
CHANGED
|
@@ -28,15 +28,15 @@ from langchain_core.runnables.schema import StreamEvent
|
|
|
28
28
|
from langchain_core.tools import BaseTool
|
|
29
29
|
from langchain_core.tracers import RunLog, RunLogPatch
|
|
30
30
|
from pydantic import BaseModel
|
|
31
|
-
from typing_extensions import TypeAlias
|
|
31
|
+
from typing_extensions import TypeAlias, override
|
|
32
32
|
|
|
33
33
|
__all__ = [
|
|
34
|
-
"init_chat_model",
|
|
35
34
|
# For backwards compatibility
|
|
36
35
|
"BaseChatModel",
|
|
37
36
|
"SimpleChatModel",
|
|
38
|
-
"generate_from_stream",
|
|
39
37
|
"agenerate_from_stream",
|
|
38
|
+
"generate_from_stream",
|
|
39
|
+
"init_chat_model",
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
|
|
@@ -86,59 +86,60 @@ def init_chat_model(
|
|
|
86
86
|
config_prefix: Optional[str] = None,
|
|
87
87
|
**kwargs: Any,
|
|
88
88
|
) -> Union[BaseChatModel, _ConfigurableModel]:
|
|
89
|
-
"""Initialize a ChatModel
|
|
89
|
+
"""Initialize a ChatModel in a single line using the model's name and provider.
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
.. note::
|
|
92
|
+
Must have the integration package corresponding to the model provider installed.
|
|
93
|
+
You should look at the `provider integration's API reference <https://python.langchain.com/api_reference/reference.html#integrations>`__
|
|
94
|
+
to see what parameters are supported by the model.
|
|
93
95
|
|
|
94
96
|
Args:
|
|
95
|
-
model: The name of the model, e.g.
|
|
97
|
+
model: The name of the model, e.g. ``'o3-mini'``, ``'claude-3-5-sonnet-latest'``. You can
|
|
96
98
|
also specify model and model provider in a single argument using
|
|
97
|
-
'{model_provider}:{model}' format, e.g.
|
|
99
|
+
``'{model_provider}:{model}'`` format, e.g. ``'openai:o1'``.
|
|
98
100
|
model_provider: The model provider if not specified as part of model arg (see
|
|
99
101
|
above). Supported model_provider values and the corresponding integration
|
|
100
102
|
package are:
|
|
101
103
|
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
104
|
+
- ``openai`` -> ``langchain-openai``
|
|
105
|
+
- ``anthropic`` -> ``langchain-anthropic``
|
|
106
|
+
- ``azure_openai`` -> ``langchain-openai``
|
|
107
|
+
- ``azure_ai`` -> ``langchain-azure-ai``
|
|
108
|
+
- ``google_vertexai`` -> ``langchain-google-vertexai``
|
|
109
|
+
- ``google_genai`` -> ``langchain-google-genai``
|
|
110
|
+
- ``bedrock`` -> ``langchain-aws``
|
|
111
|
+
- ``bedrock_converse`` -> ``langchain-aws``
|
|
112
|
+
- ``cohere`` -> ``langchain-cohere``
|
|
113
|
+
- ``fireworks`` -> ``langchain-fireworks``
|
|
114
|
+
- ``together`` -> ``langchain-together``
|
|
115
|
+
- ``mistralai`` -> ``langchain-mistralai``
|
|
116
|
+
- ``huggingface`` -> ``langchain-huggingface``
|
|
117
|
+
- ``groq`` -> ``langchain-groq``
|
|
118
|
+
- ``ollama`` -> ``langchain-ollama``
|
|
119
|
+
- ``google_anthropic_vertex`` -> ``langchain-google-vertexai``
|
|
120
|
+
- ``deepseek`` -> ``langchain-deepseek``
|
|
121
|
+
- ``ibm`` -> ``langchain-ibm``
|
|
122
|
+
- ``nvidia`` -> ``langchain-nvidia-ai-endpoints``
|
|
123
|
+
- ``xai`` -> ``langchain-xai``
|
|
124
|
+
- ``perplexity`` -> ``langchain-perplexity``
|
|
123
125
|
|
|
124
126
|
Will attempt to infer model_provider from model if not specified. The
|
|
125
127
|
following providers will be inferred based on these model prefixes:
|
|
126
128
|
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
configurable_fields: Which model parameters are
|
|
138
|
-
configurable:
|
|
129
|
+
- ``gpt-3...`` | ``gpt-4...`` | ``o1...`` -> ``openai``
|
|
130
|
+
- ``claude...`` -> ``anthropic``
|
|
131
|
+
- ``amazon...`` -> ``bedrock``
|
|
132
|
+
- ``gemini...`` -> ``google_vertexai``
|
|
133
|
+
- ``command...`` -> ``cohere``
|
|
134
|
+
- ``accounts/fireworks...`` -> ``fireworks``
|
|
135
|
+
- ``mistral...`` -> ``mistralai``
|
|
136
|
+
- ``deepseek...`` -> ``deepseek``
|
|
137
|
+
- ``grok...`` -> ``xai``
|
|
138
|
+
- ``sonar...`` -> ``perplexity``
|
|
139
|
+
configurable_fields: Which model parameters are configurable:
|
|
139
140
|
|
|
140
141
|
- None: No configurable fields.
|
|
141
|
-
-
|
|
142
|
+
- ``'any'``: All fields are configurable. **See Security Note below.**
|
|
142
143
|
- Union[List[str], Tuple[str, ...]]: Specified fields are configurable.
|
|
143
144
|
|
|
144
145
|
Fields are assumed to have config_prefix stripped if there is a
|
|
@@ -146,15 +147,15 @@ def init_chat_model(
|
|
|
146
147
|
not specified, then defaults to ``("model", "model_provider")``.
|
|
147
148
|
|
|
148
149
|
***Security Note***: Setting ``configurable_fields="any"`` means fields like
|
|
149
|
-
api_key
|
|
150
|
+
``api_key``, ``base_url``, etc. can be altered at runtime, potentially redirecting
|
|
150
151
|
model requests to a different service/user. Make sure that if you're
|
|
151
152
|
accepting untrusted configurations that you enumerate the
|
|
152
153
|
``configurable_fields=(...)`` explicitly.
|
|
153
154
|
|
|
154
|
-
config_prefix: If config_prefix is a non-empty string then model will be
|
|
155
|
+
config_prefix: If ``'config_prefix'`` is a non-empty string then model will be
|
|
155
156
|
configurable at runtime via the
|
|
156
157
|
``config["configurable"]["{config_prefix}_{param}"]`` keys. If
|
|
157
|
-
config_prefix is an empty string then model will be configurable via
|
|
158
|
+
``'config_prefix'`` is an empty string then model will be configurable via
|
|
158
159
|
``config["configurable"]["{param}"]``.
|
|
159
160
|
temperature: Model temperature.
|
|
160
161
|
max_tokens: Max output tokens.
|
|
@@ -315,27 +316,32 @@ def init_chat_model(
|
|
|
315
316
|
warnings.warn(
|
|
316
317
|
f"{config_prefix=} has been set but no fields are configurable. Set "
|
|
317
318
|
f"`configurable_fields=(...)` to specify the model params that are "
|
|
318
|
-
f"configurable."
|
|
319
|
+
f"configurable.",
|
|
320
|
+
stacklevel=2,
|
|
319
321
|
)
|
|
320
322
|
|
|
321
323
|
if not configurable_fields:
|
|
322
324
|
return _init_chat_model_helper(
|
|
323
|
-
cast(str, model),
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if model:
|
|
327
|
-
kwargs["model"] = model
|
|
328
|
-
if model_provider:
|
|
329
|
-
kwargs["model_provider"] = model_provider
|
|
330
|
-
return _ConfigurableModel(
|
|
331
|
-
default_config=kwargs,
|
|
332
|
-
config_prefix=config_prefix,
|
|
333
|
-
configurable_fields=configurable_fields,
|
|
325
|
+
cast(str, model),
|
|
326
|
+
model_provider=model_provider,
|
|
327
|
+
**kwargs,
|
|
334
328
|
)
|
|
329
|
+
if model:
|
|
330
|
+
kwargs["model"] = model
|
|
331
|
+
if model_provider:
|
|
332
|
+
kwargs["model_provider"] = model_provider
|
|
333
|
+
return _ConfigurableModel(
|
|
334
|
+
default_config=kwargs,
|
|
335
|
+
config_prefix=config_prefix,
|
|
336
|
+
configurable_fields=configurable_fields,
|
|
337
|
+
)
|
|
335
338
|
|
|
336
339
|
|
|
337
340
|
def _init_chat_model_helper(
|
|
338
|
-
model: str,
|
|
341
|
+
model: str,
|
|
342
|
+
*,
|
|
343
|
+
model_provider: Optional[str] = None,
|
|
344
|
+
**kwargs: Any,
|
|
339
345
|
) -> BaseChatModel:
|
|
340
346
|
model, model_provider = _parse_model(model, model_provider)
|
|
341
347
|
if model_provider == "openai":
|
|
@@ -343,42 +349,42 @@ def _init_chat_model_helper(
|
|
|
343
349
|
from langchain_openai import ChatOpenAI
|
|
344
350
|
|
|
345
351
|
return ChatOpenAI(model=model, **kwargs)
|
|
346
|
-
|
|
352
|
+
if model_provider == "anthropic":
|
|
347
353
|
_check_pkg("langchain_anthropic")
|
|
348
354
|
from langchain_anthropic import ChatAnthropic
|
|
349
355
|
|
|
350
356
|
return ChatAnthropic(model=model, **kwargs) # type: ignore[call-arg,unused-ignore]
|
|
351
|
-
|
|
357
|
+
if model_provider == "azure_openai":
|
|
352
358
|
_check_pkg("langchain_openai")
|
|
353
359
|
from langchain_openai import AzureChatOpenAI
|
|
354
360
|
|
|
355
361
|
return AzureChatOpenAI(model=model, **kwargs)
|
|
356
|
-
|
|
362
|
+
if model_provider == "azure_ai":
|
|
357
363
|
_check_pkg("langchain_azure_ai")
|
|
358
364
|
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
|
|
359
365
|
|
|
360
366
|
return AzureAIChatCompletionsModel(model=model, **kwargs)
|
|
361
|
-
|
|
367
|
+
if model_provider == "cohere":
|
|
362
368
|
_check_pkg("langchain_cohere")
|
|
363
369
|
from langchain_cohere import ChatCohere
|
|
364
370
|
|
|
365
371
|
return ChatCohere(model=model, **kwargs)
|
|
366
|
-
|
|
372
|
+
if model_provider == "google_vertexai":
|
|
367
373
|
_check_pkg("langchain_google_vertexai")
|
|
368
374
|
from langchain_google_vertexai import ChatVertexAI
|
|
369
375
|
|
|
370
376
|
return ChatVertexAI(model=model, **kwargs)
|
|
371
|
-
|
|
377
|
+
if model_provider == "google_genai":
|
|
372
378
|
_check_pkg("langchain_google_genai")
|
|
373
379
|
from langchain_google_genai import ChatGoogleGenerativeAI
|
|
374
380
|
|
|
375
381
|
return ChatGoogleGenerativeAI(model=model, **kwargs)
|
|
376
|
-
|
|
382
|
+
if model_provider == "fireworks":
|
|
377
383
|
_check_pkg("langchain_fireworks")
|
|
378
384
|
from langchain_fireworks import ChatFireworks
|
|
379
385
|
|
|
380
386
|
return ChatFireworks(model=model, **kwargs)
|
|
381
|
-
|
|
387
|
+
if model_provider == "ollama":
|
|
382
388
|
try:
|
|
383
389
|
_check_pkg("langchain_ollama")
|
|
384
390
|
from langchain_ollama import ChatOllama
|
|
@@ -393,73 +399,72 @@ def _init_chat_model_helper(
|
|
|
393
399
|
_check_pkg("langchain_ollama")
|
|
394
400
|
|
|
395
401
|
return ChatOllama(model=model, **kwargs)
|
|
396
|
-
|
|
402
|
+
if model_provider == "together":
|
|
397
403
|
_check_pkg("langchain_together")
|
|
398
404
|
from langchain_together import ChatTogether
|
|
399
405
|
|
|
400
406
|
return ChatTogether(model=model, **kwargs)
|
|
401
|
-
|
|
407
|
+
if model_provider == "mistralai":
|
|
402
408
|
_check_pkg("langchain_mistralai")
|
|
403
409
|
from langchain_mistralai import ChatMistralAI
|
|
404
410
|
|
|
405
411
|
return ChatMistralAI(model=model, **kwargs) # type: ignore[call-arg,unused-ignore]
|
|
406
|
-
|
|
412
|
+
if model_provider == "huggingface":
|
|
407
413
|
_check_pkg("langchain_huggingface")
|
|
408
414
|
from langchain_huggingface import ChatHuggingFace
|
|
409
415
|
|
|
410
416
|
return ChatHuggingFace(model_id=model, **kwargs)
|
|
411
|
-
|
|
417
|
+
if model_provider == "groq":
|
|
412
418
|
_check_pkg("langchain_groq")
|
|
413
419
|
from langchain_groq import ChatGroq
|
|
414
420
|
|
|
415
421
|
return ChatGroq(model=model, **kwargs)
|
|
416
|
-
|
|
422
|
+
if model_provider == "bedrock":
|
|
417
423
|
_check_pkg("langchain_aws")
|
|
418
424
|
from langchain_aws import ChatBedrock
|
|
419
425
|
|
|
420
426
|
# TODO: update to use model= once ChatBedrock supports
|
|
421
427
|
return ChatBedrock(model_id=model, **kwargs)
|
|
422
|
-
|
|
428
|
+
if model_provider == "bedrock_converse":
|
|
423
429
|
_check_pkg("langchain_aws")
|
|
424
430
|
from langchain_aws import ChatBedrockConverse
|
|
425
431
|
|
|
426
432
|
return ChatBedrockConverse(model=model, **kwargs)
|
|
427
|
-
|
|
433
|
+
if model_provider == "google_anthropic_vertex":
|
|
428
434
|
_check_pkg("langchain_google_vertexai")
|
|
429
435
|
from langchain_google_vertexai.model_garden import ChatAnthropicVertex
|
|
430
436
|
|
|
431
437
|
return ChatAnthropicVertex(model=model, **kwargs)
|
|
432
|
-
|
|
438
|
+
if model_provider == "deepseek":
|
|
433
439
|
_check_pkg("langchain_deepseek", pkg_kebab="langchain-deepseek")
|
|
434
440
|
from langchain_deepseek import ChatDeepSeek
|
|
435
441
|
|
|
436
442
|
return ChatDeepSeek(model=model, **kwargs)
|
|
437
|
-
|
|
443
|
+
if model_provider == "nvidia":
|
|
438
444
|
_check_pkg("langchain_nvidia_ai_endpoints")
|
|
439
445
|
from langchain_nvidia_ai_endpoints import ChatNVIDIA
|
|
440
446
|
|
|
441
447
|
return ChatNVIDIA(model=model, **kwargs)
|
|
442
|
-
|
|
448
|
+
if model_provider == "ibm":
|
|
443
449
|
_check_pkg("langchain_ibm")
|
|
444
450
|
from langchain_ibm import ChatWatsonx
|
|
445
451
|
|
|
446
452
|
return ChatWatsonx(model_id=model, **kwargs)
|
|
447
|
-
|
|
453
|
+
if model_provider == "xai":
|
|
448
454
|
_check_pkg("langchain_xai")
|
|
449
455
|
from langchain_xai import ChatXAI
|
|
450
456
|
|
|
451
457
|
return ChatXAI(model=model, **kwargs)
|
|
452
|
-
|
|
458
|
+
if model_provider == "perplexity":
|
|
453
459
|
_check_pkg("langchain_perplexity")
|
|
454
460
|
from langchain_perplexity import ChatPerplexity
|
|
455
461
|
|
|
456
462
|
return ChatPerplexity(model=model, **kwargs)
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
)
|
|
463
|
+
supported = ", ".join(_SUPPORTED_PROVIDERS)
|
|
464
|
+
msg = (
|
|
465
|
+
f"Unsupported {model_provider=}.\n\nSupported model providers are: {supported}"
|
|
466
|
+
)
|
|
467
|
+
raise ValueError(msg)
|
|
463
468
|
|
|
464
469
|
|
|
465
470
|
_SUPPORTED_PROVIDERS = {
|
|
@@ -489,26 +494,25 @@ _SUPPORTED_PROVIDERS = {
|
|
|
489
494
|
def _attempt_infer_model_provider(model_name: str) -> Optional[str]:
|
|
490
495
|
if any(model_name.startswith(pre) for pre in ("gpt-3", "gpt-4", "o1", "o3")):
|
|
491
496
|
return "openai"
|
|
492
|
-
|
|
497
|
+
if model_name.startswith("claude"):
|
|
493
498
|
return "anthropic"
|
|
494
|
-
|
|
499
|
+
if model_name.startswith("command"):
|
|
495
500
|
return "cohere"
|
|
496
|
-
|
|
501
|
+
if model_name.startswith("accounts/fireworks"):
|
|
497
502
|
return "fireworks"
|
|
498
|
-
|
|
503
|
+
if model_name.startswith("gemini"):
|
|
499
504
|
return "google_vertexai"
|
|
500
|
-
|
|
505
|
+
if model_name.startswith("amazon."):
|
|
501
506
|
return "bedrock"
|
|
502
|
-
|
|
507
|
+
if model_name.startswith("mistral"):
|
|
503
508
|
return "mistralai"
|
|
504
|
-
|
|
509
|
+
if model_name.startswith("deepseek"):
|
|
505
510
|
return "deepseek"
|
|
506
|
-
|
|
511
|
+
if model_name.startswith("grok"):
|
|
507
512
|
return "xai"
|
|
508
|
-
|
|
513
|
+
if model_name.startswith("sonar"):
|
|
509
514
|
return "perplexity"
|
|
510
|
-
|
|
511
|
-
return None
|
|
515
|
+
return None
|
|
512
516
|
|
|
513
517
|
|
|
514
518
|
def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
|
|
@@ -521,10 +525,11 @@ def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
|
|
|
521
525
|
model = ":".join(model.split(":")[1:])
|
|
522
526
|
model_provider = model_provider or _attempt_infer_model_provider(model)
|
|
523
527
|
if not model_provider:
|
|
524
|
-
|
|
528
|
+
msg = (
|
|
525
529
|
f"Unable to infer model provider for {model=}, please specify "
|
|
526
530
|
f"model_provider directly."
|
|
527
531
|
)
|
|
532
|
+
raise ValueError(msg)
|
|
528
533
|
model_provider = model_provider.replace("-", "_").lower()
|
|
529
534
|
return model, model_provider
|
|
530
535
|
|
|
@@ -532,9 +537,10 @@ def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
|
|
|
532
537
|
def _check_pkg(pkg: str, *, pkg_kebab: Optional[str] = None) -> None:
|
|
533
538
|
if not util.find_spec(pkg):
|
|
534
539
|
pkg_kebab = pkg_kebab if pkg_kebab is not None else pkg.replace("_", "-")
|
|
535
|
-
|
|
540
|
+
msg = (
|
|
536
541
|
f"Unable to import {pkg}. Please install with `pip install -U {pkg_kebab}`"
|
|
537
542
|
)
|
|
543
|
+
raise ImportError(msg)
|
|
538
544
|
|
|
539
545
|
|
|
540
546
|
def _remove_prefix(s: str, prefix: str) -> str:
|
|
@@ -567,7 +573,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
567
573
|
else config_prefix
|
|
568
574
|
)
|
|
569
575
|
self._queued_declarative_operations: list[tuple[str, tuple, dict]] = list(
|
|
570
|
-
queued_declarative_operations
|
|
576
|
+
queued_declarative_operations,
|
|
571
577
|
)
|
|
572
578
|
|
|
573
579
|
def __getattr__(self, name: str) -> Any:
|
|
@@ -579,7 +585,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
579
585
|
# self._model()).
|
|
580
586
|
def queue(*args: Any, **kwargs: Any) -> _ConfigurableModel:
|
|
581
587
|
queued_declarative_operations = list(
|
|
582
|
-
self._queued_declarative_operations
|
|
588
|
+
self._queued_declarative_operations,
|
|
583
589
|
)
|
|
584
590
|
queued_declarative_operations.append((name, args, kwargs))
|
|
585
591
|
return _ConfigurableModel(
|
|
@@ -592,14 +598,13 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
592
598
|
)
|
|
593
599
|
|
|
594
600
|
return queue
|
|
595
|
-
|
|
601
|
+
if self._default_config and (model := self._model()) and hasattr(model, name):
|
|
596
602
|
return getattr(model, name)
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
raise AttributeError(msg)
|
|
603
|
+
msg = f"{name} is not a BaseChatModel attribute"
|
|
604
|
+
if self._default_config:
|
|
605
|
+
msg += " and is not implemented on the default model"
|
|
606
|
+
msg += "."
|
|
607
|
+
raise AttributeError(msg)
|
|
603
608
|
|
|
604
609
|
def _model(self, config: Optional[RunnableConfig] = None) -> Runnable:
|
|
605
610
|
params = {**self._default_config, **self._model_params(config)}
|
|
@@ -642,7 +647,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
642
647
|
"with_config",
|
|
643
648
|
(),
|
|
644
649
|
{"config": remaining_config},
|
|
645
|
-
)
|
|
650
|
+
),
|
|
646
651
|
)
|
|
647
652
|
return _ConfigurableModel(
|
|
648
653
|
default_config={**self._default_config, **model_params},
|
|
@@ -670,6 +675,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
670
675
|
list[AnyMessage],
|
|
671
676
|
]
|
|
672
677
|
|
|
678
|
+
@override
|
|
673
679
|
def invoke(
|
|
674
680
|
self,
|
|
675
681
|
input: LanguageModelInput,
|
|
@@ -678,6 +684,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
678
684
|
) -> Any:
|
|
679
685
|
return self._model(config).invoke(input, config=config, **kwargs)
|
|
680
686
|
|
|
687
|
+
@override
|
|
681
688
|
async def ainvoke(
|
|
682
689
|
self,
|
|
683
690
|
input: LanguageModelInput,
|
|
@@ -686,6 +693,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
686
693
|
) -> Any:
|
|
687
694
|
return await self._model(config).ainvoke(input, config=config, **kwargs)
|
|
688
695
|
|
|
696
|
+
@override
|
|
689
697
|
def stream(
|
|
690
698
|
self,
|
|
691
699
|
input: LanguageModelInput,
|
|
@@ -694,6 +702,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
694
702
|
) -> Iterator[Any]:
|
|
695
703
|
yield from self._model(config).stream(input, config=config, **kwargs)
|
|
696
704
|
|
|
705
|
+
@override
|
|
697
706
|
async def astream(
|
|
698
707
|
self,
|
|
699
708
|
input: LanguageModelInput,
|
|
@@ -717,14 +726,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
717
726
|
if isinstance(config, list):
|
|
718
727
|
config = config[0]
|
|
719
728
|
return self._model(config).batch(
|
|
720
|
-
inputs,
|
|
729
|
+
inputs,
|
|
730
|
+
config=config,
|
|
731
|
+
return_exceptions=return_exceptions,
|
|
732
|
+
**kwargs,
|
|
721
733
|
)
|
|
722
734
|
# If multiple configs default to Runnable.batch which uses executor to invoke
|
|
723
735
|
# in parallel.
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
736
|
+
return super().batch(
|
|
737
|
+
inputs,
|
|
738
|
+
config=config,
|
|
739
|
+
return_exceptions=return_exceptions,
|
|
740
|
+
**kwargs,
|
|
741
|
+
)
|
|
728
742
|
|
|
729
743
|
async def abatch(
|
|
730
744
|
self,
|
|
@@ -740,14 +754,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
740
754
|
if isinstance(config, list):
|
|
741
755
|
config = config[0]
|
|
742
756
|
return await self._model(config).abatch(
|
|
743
|
-
inputs,
|
|
757
|
+
inputs,
|
|
758
|
+
config=config,
|
|
759
|
+
return_exceptions=return_exceptions,
|
|
760
|
+
**kwargs,
|
|
744
761
|
)
|
|
745
762
|
# If multiple configs default to Runnable.batch which uses executor to invoke
|
|
746
763
|
# in parallel.
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
764
|
+
return await super().abatch(
|
|
765
|
+
inputs,
|
|
766
|
+
config=config,
|
|
767
|
+
return_exceptions=return_exceptions,
|
|
768
|
+
**kwargs,
|
|
769
|
+
)
|
|
751
770
|
|
|
752
771
|
def batch_as_completed(
|
|
753
772
|
self,
|
|
@@ -763,13 +782,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
763
782
|
if isinstance(config, list):
|
|
764
783
|
config = config[0]
|
|
765
784
|
yield from self._model(cast(RunnableConfig, config)).batch_as_completed( # type: ignore[call-overload]
|
|
766
|
-
inputs,
|
|
785
|
+
inputs,
|
|
786
|
+
config=config,
|
|
787
|
+
return_exceptions=return_exceptions,
|
|
788
|
+
**kwargs,
|
|
767
789
|
)
|
|
768
790
|
# If multiple configs default to Runnable.batch which uses executor to invoke
|
|
769
791
|
# in parallel.
|
|
770
792
|
else:
|
|
771
793
|
yield from super().batch_as_completed( # type: ignore[call-overload]
|
|
772
|
-
inputs,
|
|
794
|
+
inputs,
|
|
795
|
+
config=config,
|
|
796
|
+
return_exceptions=return_exceptions,
|
|
797
|
+
**kwargs,
|
|
773
798
|
)
|
|
774
799
|
|
|
775
800
|
async def abatch_as_completed(
|
|
@@ -786,19 +811,26 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
786
811
|
if isinstance(config, list):
|
|
787
812
|
config = config[0]
|
|
788
813
|
async for x in self._model(
|
|
789
|
-
cast(RunnableConfig, config)
|
|
814
|
+
cast(RunnableConfig, config),
|
|
790
815
|
).abatch_as_completed( # type: ignore[call-overload]
|
|
791
|
-
inputs,
|
|
816
|
+
inputs,
|
|
817
|
+
config=config,
|
|
818
|
+
return_exceptions=return_exceptions,
|
|
819
|
+
**kwargs,
|
|
792
820
|
):
|
|
793
821
|
yield x
|
|
794
822
|
# If multiple configs default to Runnable.batch which uses executor to invoke
|
|
795
823
|
# in parallel.
|
|
796
824
|
else:
|
|
797
825
|
async for x in super().abatch_as_completed( # type: ignore[call-overload]
|
|
798
|
-
inputs,
|
|
826
|
+
inputs,
|
|
827
|
+
config=config,
|
|
828
|
+
return_exceptions=return_exceptions,
|
|
829
|
+
**kwargs,
|
|
799
830
|
):
|
|
800
831
|
yield x
|
|
801
832
|
|
|
833
|
+
@override
|
|
802
834
|
def transform(
|
|
803
835
|
self,
|
|
804
836
|
input: Iterator[LanguageModelInput],
|
|
@@ -807,6 +839,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
807
839
|
) -> Iterator[Any]:
|
|
808
840
|
yield from self._model(config).transform(input, config=config, **kwargs)
|
|
809
841
|
|
|
842
|
+
@override
|
|
810
843
|
async def atransform(
|
|
811
844
|
self,
|
|
812
845
|
input: AsyncIterator[LanguageModelInput],
|
|
@@ -850,6 +883,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
850
883
|
**kwargs: Any,
|
|
851
884
|
) -> AsyncIterator[RunLog]: ...
|
|
852
885
|
|
|
886
|
+
@override
|
|
853
887
|
async def astream_log(
|
|
854
888
|
self,
|
|
855
889
|
input: Any,
|
|
@@ -880,6 +914,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
880
914
|
):
|
|
881
915
|
yield x
|
|
882
916
|
|
|
917
|
+
@override
|
|
883
918
|
async def astream_events(
|
|
884
919
|
self,
|
|
885
920
|
input: Any,
|
|
@@ -918,6 +953,8 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
|
|
|
918
953
|
|
|
919
954
|
# Explicitly added to satisfy downstream linters.
|
|
920
955
|
def with_structured_output(
|
|
921
|
-
self,
|
|
956
|
+
self,
|
|
957
|
+
schema: Union[dict, type[BaseModel]],
|
|
958
|
+
**kwargs: Any,
|
|
922
959
|
) -> Runnable[LanguageModelInput, Union[dict, BaseModel]]:
|
|
923
960
|
return self.__getattr__("with_structured_output")(schema, **kwargs)
|
langchain/chat_models/bedrock.py
CHANGED
langchain/chat_models/fake.py
CHANGED
langchain/chat_models/meta.py
CHANGED
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"convert_messages_to_prompt_llama": "langchain_community.chat_models.meta"
|
|
12
|
+
"convert_messages_to_prompt_llama": "langchain_community.chat_models.meta",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
|
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"PaiEasChatEndpoint": "langchain_community.chat_models.pai_eas_endpoint"
|
|
12
|
+
"PaiEasChatEndpoint": "langchain_community.chat_models.pai_eas_endpoint",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
|
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"PromptLayerChatOpenAI": "langchain_community.chat_models.promptlayer_openai"
|
|
12
|
+
"PromptLayerChatOpenAI": "langchain_community.chat_models.promptlayer_openai",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
|