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/chains/loading.py
CHANGED
|
@@ -40,18 +40,20 @@ try:
|
|
|
40
40
|
except ImportError:
|
|
41
41
|
|
|
42
42
|
def load_llm(*args: Any, **kwargs: Any) -> None:
|
|
43
|
-
|
|
43
|
+
msg = (
|
|
44
44
|
"To use this load_llm functionality you must install the "
|
|
45
45
|
"langchain_community package. "
|
|
46
46
|
"You can install it with `pip install langchain_community`"
|
|
47
47
|
)
|
|
48
|
+
raise ImportError(msg)
|
|
48
49
|
|
|
49
50
|
def load_llm_from_config(*args: Any, **kwargs: Any) -> None:
|
|
50
|
-
|
|
51
|
+
msg = (
|
|
51
52
|
"To use this load_llm_from_config functionality you must install the "
|
|
52
53
|
"langchain_community package. "
|
|
53
54
|
"You can install it with `pip install langchain_community`"
|
|
54
55
|
)
|
|
56
|
+
raise ImportError(msg)
|
|
55
57
|
|
|
56
58
|
|
|
57
59
|
URL_BASE = "https://raw.githubusercontent.com/hwchase17/langchain-hub/master/chains/"
|
|
@@ -65,7 +67,8 @@ def _load_llm_chain(config: dict, **kwargs: Any) -> LLMChain:
|
|
|
65
67
|
elif "llm_path" in config:
|
|
66
68
|
llm = load_llm(config.pop("llm_path"), **kwargs)
|
|
67
69
|
else:
|
|
68
|
-
|
|
70
|
+
msg = "One of `llm` or `llm_path` must be present."
|
|
71
|
+
raise ValueError(msg)
|
|
69
72
|
|
|
70
73
|
if "prompt" in config:
|
|
71
74
|
prompt_config = config.pop("prompt")
|
|
@@ -73,7 +76,8 @@ def _load_llm_chain(config: dict, **kwargs: Any) -> LLMChain:
|
|
|
73
76
|
elif "prompt_path" in config:
|
|
74
77
|
prompt = load_prompt(config.pop("prompt_path"))
|
|
75
78
|
else:
|
|
76
|
-
|
|
79
|
+
msg = "One of `prompt` or `prompt_path` must be present."
|
|
80
|
+
raise ValueError(msg)
|
|
77
81
|
_load_output_parser(config)
|
|
78
82
|
|
|
79
83
|
return LLMChain(llm=llm, prompt=prompt, **config)
|
|
@@ -87,11 +91,13 @@ def _load_hyde_chain(config: dict, **kwargs: Any) -> HypotheticalDocumentEmbedde
|
|
|
87
91
|
elif "llm_chain_path" in config:
|
|
88
92
|
llm_chain = load_chain(config.pop("llm_chain_path"), **kwargs)
|
|
89
93
|
else:
|
|
90
|
-
|
|
94
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
95
|
+
raise ValueError(msg)
|
|
91
96
|
if "embeddings" in kwargs:
|
|
92
97
|
embeddings = kwargs.pop("embeddings")
|
|
93
98
|
else:
|
|
94
|
-
|
|
99
|
+
msg = "`embeddings` must be present."
|
|
100
|
+
raise ValueError(msg)
|
|
95
101
|
return HypotheticalDocumentEmbedder(
|
|
96
102
|
llm_chain=llm_chain,
|
|
97
103
|
base_embeddings=embeddings,
|
|
@@ -106,10 +112,12 @@ def _load_stuff_documents_chain(config: dict, **kwargs: Any) -> StuffDocumentsCh
|
|
|
106
112
|
elif "llm_chain_path" in config:
|
|
107
113
|
llm_chain = load_chain(config.pop("llm_chain_path"), **kwargs)
|
|
108
114
|
else:
|
|
109
|
-
|
|
115
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
116
|
+
raise ValueError(msg)
|
|
110
117
|
|
|
111
118
|
if not isinstance(llm_chain, LLMChain):
|
|
112
|
-
|
|
119
|
+
msg = f"Expected LLMChain, got {llm_chain}"
|
|
120
|
+
raise ValueError(msg) # noqa: TRY004
|
|
113
121
|
|
|
114
122
|
if "document_prompt" in config:
|
|
115
123
|
prompt_config = config.pop("document_prompt")
|
|
@@ -117,17 +125,19 @@ def _load_stuff_documents_chain(config: dict, **kwargs: Any) -> StuffDocumentsCh
|
|
|
117
125
|
elif "document_prompt_path" in config:
|
|
118
126
|
document_prompt = load_prompt(config.pop("document_prompt_path"))
|
|
119
127
|
else:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
)
|
|
128
|
+
msg = "One of `document_prompt` or `document_prompt_path` must be present."
|
|
129
|
+
raise ValueError(msg)
|
|
123
130
|
|
|
124
131
|
return StuffDocumentsChain(
|
|
125
|
-
llm_chain=llm_chain,
|
|
132
|
+
llm_chain=llm_chain,
|
|
133
|
+
document_prompt=document_prompt,
|
|
134
|
+
**config,
|
|
126
135
|
)
|
|
127
136
|
|
|
128
137
|
|
|
129
138
|
def _load_map_reduce_documents_chain(
|
|
130
|
-
config: dict,
|
|
139
|
+
config: dict,
|
|
140
|
+
**kwargs: Any,
|
|
131
141
|
) -> MapReduceDocumentsChain:
|
|
132
142
|
if "llm_chain" in config:
|
|
133
143
|
llm_chain_config = config.pop("llm_chain")
|
|
@@ -135,18 +145,22 @@ def _load_map_reduce_documents_chain(
|
|
|
135
145
|
elif "llm_chain_path" in config:
|
|
136
146
|
llm_chain = load_chain(config.pop("llm_chain_path"), **kwargs)
|
|
137
147
|
else:
|
|
138
|
-
|
|
148
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
149
|
+
raise ValueError(msg)
|
|
139
150
|
|
|
140
151
|
if not isinstance(llm_chain, LLMChain):
|
|
141
|
-
|
|
152
|
+
msg = f"Expected LLMChain, got {llm_chain}"
|
|
153
|
+
raise ValueError(msg) # noqa: TRY004
|
|
142
154
|
|
|
143
155
|
if "reduce_documents_chain" in config:
|
|
144
156
|
reduce_documents_chain = load_chain_from_config(
|
|
145
|
-
config.pop("reduce_documents_chain"),
|
|
157
|
+
config.pop("reduce_documents_chain"),
|
|
158
|
+
**kwargs,
|
|
146
159
|
)
|
|
147
160
|
elif "reduce_documents_chain_path" in config:
|
|
148
161
|
reduce_documents_chain = load_chain(
|
|
149
|
-
config.pop("reduce_documents_chain_path"),
|
|
162
|
+
config.pop("reduce_documents_chain_path"),
|
|
163
|
+
**kwargs,
|
|
150
164
|
)
|
|
151
165
|
else:
|
|
152
166
|
reduce_documents_chain = _load_reduce_documents_chain(config, **kwargs)
|
|
@@ -165,26 +179,31 @@ def _load_reduce_documents_chain(config: dict, **kwargs: Any) -> ReduceDocuments
|
|
|
165
179
|
if "combine_documents_chain" in config:
|
|
166
180
|
combine_document_chain_config = config.pop("combine_documents_chain")
|
|
167
181
|
combine_documents_chain = load_chain_from_config(
|
|
168
|
-
combine_document_chain_config,
|
|
182
|
+
combine_document_chain_config,
|
|
183
|
+
**kwargs,
|
|
169
184
|
)
|
|
170
185
|
elif "combine_document_chain" in config:
|
|
171
186
|
combine_document_chain_config = config.pop("combine_document_chain")
|
|
172
187
|
combine_documents_chain = load_chain_from_config(
|
|
173
|
-
combine_document_chain_config,
|
|
188
|
+
combine_document_chain_config,
|
|
189
|
+
**kwargs,
|
|
174
190
|
)
|
|
175
191
|
elif "combine_documents_chain_path" in config:
|
|
176
192
|
combine_documents_chain = load_chain(
|
|
177
|
-
config.pop("combine_documents_chain_path"),
|
|
193
|
+
config.pop("combine_documents_chain_path"),
|
|
194
|
+
**kwargs,
|
|
178
195
|
)
|
|
179
196
|
elif "combine_document_chain_path" in config:
|
|
180
197
|
combine_documents_chain = load_chain(
|
|
181
|
-
config.pop("combine_document_chain_path"),
|
|
198
|
+
config.pop("combine_document_chain_path"),
|
|
199
|
+
**kwargs,
|
|
182
200
|
)
|
|
183
201
|
else:
|
|
184
|
-
|
|
202
|
+
msg = (
|
|
185
203
|
"One of `combine_documents_chain` or "
|
|
186
204
|
"`combine_documents_chain_path` must be present."
|
|
187
205
|
)
|
|
206
|
+
raise ValueError(msg)
|
|
188
207
|
|
|
189
208
|
if "collapse_documents_chain" in config:
|
|
190
209
|
collapse_document_chain_config = config.pop("collapse_documents_chain")
|
|
@@ -192,11 +211,13 @@ def _load_reduce_documents_chain(config: dict, **kwargs: Any) -> ReduceDocuments
|
|
|
192
211
|
collapse_documents_chain = None
|
|
193
212
|
else:
|
|
194
213
|
collapse_documents_chain = load_chain_from_config(
|
|
195
|
-
collapse_document_chain_config,
|
|
214
|
+
collapse_document_chain_config,
|
|
215
|
+
**kwargs,
|
|
196
216
|
)
|
|
197
217
|
elif "collapse_documents_chain_path" in config:
|
|
198
218
|
collapse_documents_chain = load_chain(
|
|
199
|
-
config.pop("collapse_documents_chain_path"),
|
|
219
|
+
config.pop("collapse_documents_chain_path"),
|
|
220
|
+
**kwargs,
|
|
200
221
|
)
|
|
201
222
|
elif "collapse_document_chain" in config:
|
|
202
223
|
collapse_document_chain_config = config.pop("collapse_document_chain")
|
|
@@ -204,11 +225,13 @@ def _load_reduce_documents_chain(config: dict, **kwargs: Any) -> ReduceDocuments
|
|
|
204
225
|
collapse_documents_chain = None
|
|
205
226
|
else:
|
|
206
227
|
collapse_documents_chain = load_chain_from_config(
|
|
207
|
-
collapse_document_chain_config,
|
|
228
|
+
collapse_document_chain_config,
|
|
229
|
+
**kwargs,
|
|
208
230
|
)
|
|
209
231
|
elif "collapse_document_chain_path" in config:
|
|
210
232
|
collapse_documents_chain = load_chain(
|
|
211
|
-
config.pop("collapse_document_chain_path"),
|
|
233
|
+
config.pop("collapse_document_chain_path"),
|
|
234
|
+
**kwargs,
|
|
212
235
|
)
|
|
213
236
|
|
|
214
237
|
return ReduceDocumentsChain(
|
|
@@ -220,12 +243,13 @@ def _load_reduce_documents_chain(config: dict, **kwargs: Any) -> ReduceDocuments
|
|
|
220
243
|
|
|
221
244
|
def _load_llm_bash_chain(config: dict, **kwargs: Any) -> Any:
|
|
222
245
|
"""Load LLM Bash chain from config dict"""
|
|
223
|
-
|
|
246
|
+
msg = (
|
|
224
247
|
"LLMBash Chain is not available through LangChain anymore. "
|
|
225
248
|
"The relevant code can be found in langchain_experimental, "
|
|
226
249
|
"but it is not appropriate for production usage due to security "
|
|
227
250
|
"concerns. Please refer to langchain-experimental repository for more details."
|
|
228
251
|
)
|
|
252
|
+
raise NotImplementedError(msg)
|
|
229
253
|
|
|
230
254
|
|
|
231
255
|
def _load_llm_checker_chain(config: dict, **kwargs: Any) -> LLMCheckerChain:
|
|
@@ -235,15 +259,16 @@ def _load_llm_checker_chain(config: dict, **kwargs: Any) -> LLMCheckerChain:
|
|
|
235
259
|
elif "llm_path" in config:
|
|
236
260
|
llm = load_llm(config.pop("llm_path"), **kwargs)
|
|
237
261
|
else:
|
|
238
|
-
|
|
262
|
+
msg = "One of `llm` or `llm_path` must be present."
|
|
263
|
+
raise ValueError(msg)
|
|
239
264
|
if "create_draft_answer_prompt" in config:
|
|
240
265
|
create_draft_answer_prompt_config = config.pop("create_draft_answer_prompt")
|
|
241
266
|
create_draft_answer_prompt = load_prompt_from_config(
|
|
242
|
-
create_draft_answer_prompt_config
|
|
267
|
+
create_draft_answer_prompt_config,
|
|
243
268
|
)
|
|
244
269
|
elif "create_draft_answer_prompt_path" in config:
|
|
245
270
|
create_draft_answer_prompt = load_prompt(
|
|
246
|
-
config.pop("create_draft_answer_prompt_path")
|
|
271
|
+
config.pop("create_draft_answer_prompt_path"),
|
|
247
272
|
)
|
|
248
273
|
if "list_assertions_prompt" in config:
|
|
249
274
|
list_assertions_prompt_config = config.pop("list_assertions_prompt")
|
|
@@ -253,11 +278,11 @@ def _load_llm_checker_chain(config: dict, **kwargs: Any) -> LLMCheckerChain:
|
|
|
253
278
|
if "check_assertions_prompt" in config:
|
|
254
279
|
check_assertions_prompt_config = config.pop("check_assertions_prompt")
|
|
255
280
|
check_assertions_prompt = load_prompt_from_config(
|
|
256
|
-
check_assertions_prompt_config
|
|
281
|
+
check_assertions_prompt_config,
|
|
257
282
|
)
|
|
258
283
|
elif "check_assertions_prompt_path" in config:
|
|
259
284
|
check_assertions_prompt = load_prompt(
|
|
260
|
-
config.pop("check_assertions_prompt_path")
|
|
285
|
+
config.pop("check_assertions_prompt_path"),
|
|
261
286
|
)
|
|
262
287
|
if "revised_answer_prompt" in config:
|
|
263
288
|
revised_answer_prompt_config = config.pop("revised_answer_prompt")
|
|
@@ -290,7 +315,8 @@ def _load_llm_math_chain(config: dict, **kwargs: Any) -> LLMMathChain:
|
|
|
290
315
|
elif "llm_path" in config:
|
|
291
316
|
llm = load_llm(config.pop("llm_path"), **kwargs)
|
|
292
317
|
else:
|
|
293
|
-
|
|
318
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
319
|
+
raise ValueError(msg)
|
|
294
320
|
if "prompt" in config:
|
|
295
321
|
prompt_config = config.pop("prompt")
|
|
296
322
|
prompt = load_prompt_from_config(prompt_config)
|
|
@@ -298,12 +324,12 @@ def _load_llm_math_chain(config: dict, **kwargs: Any) -> LLMMathChain:
|
|
|
298
324
|
prompt = load_prompt(config.pop("prompt_path"))
|
|
299
325
|
if llm_chain:
|
|
300
326
|
return LLMMathChain(llm_chain=llm_chain, prompt=prompt, **config) # type: ignore[arg-type]
|
|
301
|
-
|
|
302
|
-
return LLMMathChain(llm=llm, prompt=prompt, **config)
|
|
327
|
+
return LLMMathChain(llm=llm, prompt=prompt, **config)
|
|
303
328
|
|
|
304
329
|
|
|
305
330
|
def _load_map_rerank_documents_chain(
|
|
306
|
-
config: dict,
|
|
331
|
+
config: dict,
|
|
332
|
+
**kwargs: Any,
|
|
307
333
|
) -> MapRerankDocumentsChain:
|
|
308
334
|
if "llm_chain" in config:
|
|
309
335
|
llm_chain_config = config.pop("llm_chain")
|
|
@@ -311,17 +337,19 @@ def _load_map_rerank_documents_chain(
|
|
|
311
337
|
elif "llm_chain_path" in config:
|
|
312
338
|
llm_chain = load_chain(config.pop("llm_chain_path"), **kwargs)
|
|
313
339
|
else:
|
|
314
|
-
|
|
340
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
341
|
+
raise ValueError(msg)
|
|
315
342
|
return MapRerankDocumentsChain(llm_chain=llm_chain, **config) # type: ignore[arg-type]
|
|
316
343
|
|
|
317
344
|
|
|
318
345
|
def _load_pal_chain(config: dict, **kwargs: Any) -> Any:
|
|
319
|
-
|
|
346
|
+
msg = (
|
|
320
347
|
"PALChain is not available through LangChain anymore. "
|
|
321
348
|
"The relevant code can be found in langchain_experimental, "
|
|
322
349
|
"but it is not appropriate for production usage due to security "
|
|
323
350
|
"concerns. Please refer to langchain-experimental repository for more details."
|
|
324
351
|
)
|
|
352
|
+
raise NotImplementedError(msg)
|
|
325
353
|
|
|
326
354
|
|
|
327
355
|
def _load_refine_documents_chain(config: dict, **kwargs: Any) -> RefineDocumentsChain:
|
|
@@ -331,18 +359,16 @@ def _load_refine_documents_chain(config: dict, **kwargs: Any) -> RefineDocuments
|
|
|
331
359
|
elif "initial_llm_chain_path" in config:
|
|
332
360
|
initial_llm_chain = load_chain(config.pop("initial_llm_chain_path"), **kwargs)
|
|
333
361
|
else:
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
)
|
|
362
|
+
msg = "One of `initial_llm_chain` or `initial_llm_chain_path` must be present."
|
|
363
|
+
raise ValueError(msg)
|
|
337
364
|
if "refine_llm_chain" in config:
|
|
338
365
|
refine_llm_chain_config = config.pop("refine_llm_chain")
|
|
339
366
|
refine_llm_chain = load_chain_from_config(refine_llm_chain_config, **kwargs)
|
|
340
367
|
elif "refine_llm_chain_path" in config:
|
|
341
368
|
refine_llm_chain = load_chain(config.pop("refine_llm_chain_path"), **kwargs)
|
|
342
369
|
else:
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
)
|
|
370
|
+
msg = "One of `refine_llm_chain` or `refine_llm_chain_path` must be present."
|
|
371
|
+
raise ValueError(msg)
|
|
346
372
|
if "document_prompt" in config:
|
|
347
373
|
prompt_config = config.pop("document_prompt")
|
|
348
374
|
document_prompt = load_prompt_from_config(prompt_config)
|
|
@@ -360,23 +386,26 @@ def _load_qa_with_sources_chain(config: dict, **kwargs: Any) -> QAWithSourcesCha
|
|
|
360
386
|
if "combine_documents_chain" in config:
|
|
361
387
|
combine_documents_chain_config = config.pop("combine_documents_chain")
|
|
362
388
|
combine_documents_chain = load_chain_from_config(
|
|
363
|
-
combine_documents_chain_config,
|
|
389
|
+
combine_documents_chain_config,
|
|
390
|
+
**kwargs,
|
|
364
391
|
)
|
|
365
392
|
elif "combine_documents_chain_path" in config:
|
|
366
393
|
combine_documents_chain = load_chain(
|
|
367
|
-
config.pop("combine_documents_chain_path"),
|
|
394
|
+
config.pop("combine_documents_chain_path"),
|
|
395
|
+
**kwargs,
|
|
368
396
|
)
|
|
369
397
|
else:
|
|
370
|
-
|
|
398
|
+
msg = (
|
|
371
399
|
"One of `combine_documents_chain` or "
|
|
372
400
|
"`combine_documents_chain_path` must be present."
|
|
373
401
|
)
|
|
402
|
+
raise ValueError(msg)
|
|
374
403
|
return QAWithSourcesChain(combine_documents_chain=combine_documents_chain, **config) # type: ignore[arg-type]
|
|
375
404
|
|
|
376
405
|
|
|
377
406
|
def _load_sql_database_chain(config: dict, **kwargs: Any) -> Any:
|
|
378
407
|
"""Load SQL Database chain from config dict."""
|
|
379
|
-
|
|
408
|
+
msg = (
|
|
380
409
|
"SQLDatabaseChain is not available through LangChain anymore. "
|
|
381
410
|
"The relevant code can be found in langchain_experimental, "
|
|
382
411
|
"but it is not appropriate for production usage due to security "
|
|
@@ -384,29 +413,35 @@ def _load_sql_database_chain(config: dict, **kwargs: Any) -> Any:
|
|
|
384
413
|
"or refer to this tutorial for best practices: "
|
|
385
414
|
"https://python.langchain.com/docs/tutorials/sql_qa/"
|
|
386
415
|
)
|
|
416
|
+
raise NotImplementedError(msg)
|
|
387
417
|
|
|
388
418
|
|
|
389
419
|
def _load_vector_db_qa_with_sources_chain(
|
|
390
|
-
config: dict,
|
|
420
|
+
config: dict,
|
|
421
|
+
**kwargs: Any,
|
|
391
422
|
) -> VectorDBQAWithSourcesChain:
|
|
392
423
|
if "vectorstore" in kwargs:
|
|
393
424
|
vectorstore = kwargs.pop("vectorstore")
|
|
394
425
|
else:
|
|
395
|
-
|
|
426
|
+
msg = "`vectorstore` must be present."
|
|
427
|
+
raise ValueError(msg)
|
|
396
428
|
if "combine_documents_chain" in config:
|
|
397
429
|
combine_documents_chain_config = config.pop("combine_documents_chain")
|
|
398
430
|
combine_documents_chain = load_chain_from_config(
|
|
399
|
-
combine_documents_chain_config,
|
|
431
|
+
combine_documents_chain_config,
|
|
432
|
+
**kwargs,
|
|
400
433
|
)
|
|
401
434
|
elif "combine_documents_chain_path" in config:
|
|
402
435
|
combine_documents_chain = load_chain(
|
|
403
|
-
config.pop("combine_documents_chain_path"),
|
|
436
|
+
config.pop("combine_documents_chain_path"),
|
|
437
|
+
**kwargs,
|
|
404
438
|
)
|
|
405
439
|
else:
|
|
406
|
-
|
|
440
|
+
msg = (
|
|
407
441
|
"One of `combine_documents_chain` or "
|
|
408
442
|
"`combine_documents_chain_path` must be present."
|
|
409
443
|
)
|
|
444
|
+
raise ValueError(msg)
|
|
410
445
|
return VectorDBQAWithSourcesChain(
|
|
411
446
|
combine_documents_chain=combine_documents_chain, # type: ignore[arg-type]
|
|
412
447
|
vectorstore=vectorstore,
|
|
@@ -418,21 +453,25 @@ def _load_retrieval_qa(config: dict, **kwargs: Any) -> RetrievalQA:
|
|
|
418
453
|
if "retriever" in kwargs:
|
|
419
454
|
retriever = kwargs.pop("retriever")
|
|
420
455
|
else:
|
|
421
|
-
|
|
456
|
+
msg = "`retriever` must be present."
|
|
457
|
+
raise ValueError(msg)
|
|
422
458
|
if "combine_documents_chain" in config:
|
|
423
459
|
combine_documents_chain_config = config.pop("combine_documents_chain")
|
|
424
460
|
combine_documents_chain = load_chain_from_config(
|
|
425
|
-
combine_documents_chain_config,
|
|
461
|
+
combine_documents_chain_config,
|
|
462
|
+
**kwargs,
|
|
426
463
|
)
|
|
427
464
|
elif "combine_documents_chain_path" in config:
|
|
428
465
|
combine_documents_chain = load_chain(
|
|
429
|
-
config.pop("combine_documents_chain_path"),
|
|
466
|
+
config.pop("combine_documents_chain_path"),
|
|
467
|
+
**kwargs,
|
|
430
468
|
)
|
|
431
469
|
else:
|
|
432
|
-
|
|
470
|
+
msg = (
|
|
433
471
|
"One of `combine_documents_chain` or "
|
|
434
472
|
"`combine_documents_chain_path` must be present."
|
|
435
473
|
)
|
|
474
|
+
raise ValueError(msg)
|
|
436
475
|
return RetrievalQA(
|
|
437
476
|
combine_documents_chain=combine_documents_chain, # type: ignore[arg-type]
|
|
438
477
|
retriever=retriever,
|
|
@@ -441,26 +480,31 @@ def _load_retrieval_qa(config: dict, **kwargs: Any) -> RetrievalQA:
|
|
|
441
480
|
|
|
442
481
|
|
|
443
482
|
def _load_retrieval_qa_with_sources_chain(
|
|
444
|
-
config: dict,
|
|
483
|
+
config: dict,
|
|
484
|
+
**kwargs: Any,
|
|
445
485
|
) -> RetrievalQAWithSourcesChain:
|
|
446
486
|
if "retriever" in kwargs:
|
|
447
487
|
retriever = kwargs.pop("retriever")
|
|
448
488
|
else:
|
|
449
|
-
|
|
489
|
+
msg = "`retriever` must be present."
|
|
490
|
+
raise ValueError(msg)
|
|
450
491
|
if "combine_documents_chain" in config:
|
|
451
492
|
combine_documents_chain_config = config.pop("combine_documents_chain")
|
|
452
493
|
combine_documents_chain = load_chain_from_config(
|
|
453
|
-
combine_documents_chain_config,
|
|
494
|
+
combine_documents_chain_config,
|
|
495
|
+
**kwargs,
|
|
454
496
|
)
|
|
455
497
|
elif "combine_documents_chain_path" in config:
|
|
456
498
|
combine_documents_chain = load_chain(
|
|
457
|
-
config.pop("combine_documents_chain_path"),
|
|
499
|
+
config.pop("combine_documents_chain_path"),
|
|
500
|
+
**kwargs,
|
|
458
501
|
)
|
|
459
502
|
else:
|
|
460
|
-
|
|
503
|
+
msg = (
|
|
461
504
|
"One of `combine_documents_chain` or "
|
|
462
505
|
"`combine_documents_chain_path` must be present."
|
|
463
506
|
)
|
|
507
|
+
raise ValueError(msg)
|
|
464
508
|
return RetrievalQAWithSourcesChain(
|
|
465
509
|
combine_documents_chain=combine_documents_chain, # type: ignore[arg-type]
|
|
466
510
|
retriever=retriever,
|
|
@@ -472,21 +516,25 @@ def _load_vector_db_qa(config: dict, **kwargs: Any) -> VectorDBQA:
|
|
|
472
516
|
if "vectorstore" in kwargs:
|
|
473
517
|
vectorstore = kwargs.pop("vectorstore")
|
|
474
518
|
else:
|
|
475
|
-
|
|
519
|
+
msg = "`vectorstore` must be present."
|
|
520
|
+
raise ValueError(msg)
|
|
476
521
|
if "combine_documents_chain" in config:
|
|
477
522
|
combine_documents_chain_config = config.pop("combine_documents_chain")
|
|
478
523
|
combine_documents_chain = load_chain_from_config(
|
|
479
|
-
combine_documents_chain_config,
|
|
524
|
+
combine_documents_chain_config,
|
|
525
|
+
**kwargs,
|
|
480
526
|
)
|
|
481
527
|
elif "combine_documents_chain_path" in config:
|
|
482
528
|
combine_documents_chain = load_chain(
|
|
483
|
-
config.pop("combine_documents_chain_path"),
|
|
529
|
+
config.pop("combine_documents_chain_path"),
|
|
530
|
+
**kwargs,
|
|
484
531
|
)
|
|
485
532
|
else:
|
|
486
|
-
|
|
533
|
+
msg = (
|
|
487
534
|
"One of `combine_documents_chain` or "
|
|
488
535
|
"`combine_documents_chain_path` must be present."
|
|
489
536
|
)
|
|
537
|
+
raise ValueError(msg)
|
|
490
538
|
return VectorDBQA(
|
|
491
539
|
combine_documents_chain=combine_documents_chain, # type: ignore[arg-type]
|
|
492
540
|
vectorstore=vectorstore,
|
|
@@ -498,28 +546,33 @@ def _load_graph_cypher_chain(config: dict, **kwargs: Any) -> GraphCypherQAChain:
|
|
|
498
546
|
if "graph" in kwargs:
|
|
499
547
|
graph = kwargs.pop("graph")
|
|
500
548
|
else:
|
|
501
|
-
|
|
549
|
+
msg = "`graph` must be present."
|
|
550
|
+
raise ValueError(msg)
|
|
502
551
|
if "cypher_generation_chain" in config:
|
|
503
552
|
cypher_generation_chain_config = config.pop("cypher_generation_chain")
|
|
504
553
|
cypher_generation_chain = load_chain_from_config(
|
|
505
|
-
cypher_generation_chain_config,
|
|
554
|
+
cypher_generation_chain_config,
|
|
555
|
+
**kwargs,
|
|
506
556
|
)
|
|
507
557
|
else:
|
|
508
|
-
|
|
558
|
+
msg = "`cypher_generation_chain` must be present."
|
|
559
|
+
raise ValueError(msg)
|
|
509
560
|
if "qa_chain" in config:
|
|
510
561
|
qa_chain_config = config.pop("qa_chain")
|
|
511
562
|
qa_chain = load_chain_from_config(qa_chain_config, **kwargs)
|
|
512
563
|
else:
|
|
513
|
-
|
|
564
|
+
msg = "`qa_chain` must be present."
|
|
565
|
+
raise ValueError(msg)
|
|
514
566
|
|
|
515
567
|
try:
|
|
516
568
|
from langchain_community.chains.graph_qa.cypher import GraphCypherQAChain
|
|
517
|
-
except ImportError:
|
|
518
|
-
|
|
569
|
+
except ImportError as e:
|
|
570
|
+
msg = (
|
|
519
571
|
"To use this GraphCypherQAChain functionality you must install the "
|
|
520
572
|
"langchain_community package. "
|
|
521
573
|
"You can install it with `pip install langchain_community`"
|
|
522
574
|
)
|
|
575
|
+
raise ImportError(msg) from e
|
|
523
576
|
return GraphCypherQAChain(
|
|
524
577
|
graph=graph,
|
|
525
578
|
cypher_generation_chain=cypher_generation_chain,
|
|
@@ -535,22 +588,21 @@ def _load_api_chain(config: dict, **kwargs: Any) -> APIChain:
|
|
|
535
588
|
elif "api_request_chain_path" in config:
|
|
536
589
|
api_request_chain = load_chain(config.pop("api_request_chain_path"))
|
|
537
590
|
else:
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
)
|
|
591
|
+
msg = "One of `api_request_chain` or `api_request_chain_path` must be present."
|
|
592
|
+
raise ValueError(msg)
|
|
541
593
|
if "api_answer_chain" in config:
|
|
542
594
|
api_answer_chain_config = config.pop("api_answer_chain")
|
|
543
595
|
api_answer_chain = load_chain_from_config(api_answer_chain_config, **kwargs)
|
|
544
596
|
elif "api_answer_chain_path" in config:
|
|
545
597
|
api_answer_chain = load_chain(config.pop("api_answer_chain_path"), **kwargs)
|
|
546
598
|
else:
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
)
|
|
599
|
+
msg = "One of `api_answer_chain` or `api_answer_chain_path` must be present."
|
|
600
|
+
raise ValueError(msg)
|
|
550
601
|
if "requests_wrapper" in kwargs:
|
|
551
602
|
requests_wrapper = kwargs.pop("requests_wrapper")
|
|
552
603
|
else:
|
|
553
|
-
|
|
604
|
+
msg = "`requests_wrapper` must be present."
|
|
605
|
+
raise ValueError(msg)
|
|
554
606
|
return APIChain(
|
|
555
607
|
api_request_chain=api_request_chain, # type: ignore[arg-type]
|
|
556
608
|
api_answer_chain=api_answer_chain, # type: ignore[arg-type]
|
|
@@ -562,12 +614,13 @@ def _load_api_chain(config: dict, **kwargs: Any) -> APIChain:
|
|
|
562
614
|
def _load_llm_requests_chain(config: dict, **kwargs: Any) -> LLMRequestsChain:
|
|
563
615
|
try:
|
|
564
616
|
from langchain.chains.llm_requests import LLMRequestsChain
|
|
565
|
-
except ImportError:
|
|
566
|
-
|
|
617
|
+
except ImportError as e:
|
|
618
|
+
msg = (
|
|
567
619
|
"To use this LLMRequestsChain functionality you must install the "
|
|
568
620
|
"langchain package. "
|
|
569
621
|
"You can install it with `pip install langchain`"
|
|
570
622
|
)
|
|
623
|
+
raise ImportError(msg) from e
|
|
571
624
|
|
|
572
625
|
if "llm_chain" in config:
|
|
573
626
|
llm_chain_config = config.pop("llm_chain")
|
|
@@ -575,14 +628,16 @@ def _load_llm_requests_chain(config: dict, **kwargs: Any) -> LLMRequestsChain:
|
|
|
575
628
|
elif "llm_chain_path" in config:
|
|
576
629
|
llm_chain = load_chain(config.pop("llm_chain_path"), **kwargs)
|
|
577
630
|
else:
|
|
578
|
-
|
|
631
|
+
msg = "One of `llm_chain` or `llm_chain_path` must be present."
|
|
632
|
+
raise ValueError(msg)
|
|
579
633
|
if "requests_wrapper" in kwargs:
|
|
580
634
|
requests_wrapper = kwargs.pop("requests_wrapper")
|
|
581
635
|
return LLMRequestsChain(
|
|
582
|
-
llm_chain=llm_chain,
|
|
636
|
+
llm_chain=llm_chain,
|
|
637
|
+
requests_wrapper=requests_wrapper,
|
|
638
|
+
**config,
|
|
583
639
|
)
|
|
584
|
-
|
|
585
|
-
return LLMRequestsChain(llm_chain=llm_chain, **config)
|
|
640
|
+
return LLMRequestsChain(llm_chain=llm_chain, **config)
|
|
586
641
|
|
|
587
642
|
|
|
588
643
|
type_to_loader_dict = {
|
|
@@ -620,11 +675,13 @@ type_to_loader_dict = {
|
|
|
620
675
|
def load_chain_from_config(config: dict, **kwargs: Any) -> Chain:
|
|
621
676
|
"""Load chain from Config Dict."""
|
|
622
677
|
if "_type" not in config:
|
|
623
|
-
|
|
678
|
+
msg = "Must specify a chain Type in config"
|
|
679
|
+
raise ValueError(msg)
|
|
624
680
|
config_type = config.pop("_type")
|
|
625
681
|
|
|
626
682
|
if config_type not in type_to_loader_dict:
|
|
627
|
-
|
|
683
|
+
msg = f"Loading {config_type} chain not supported"
|
|
684
|
+
raise ValueError(msg)
|
|
628
685
|
|
|
629
686
|
chain_loader = type_to_loader_dict[config_type]
|
|
630
687
|
return chain_loader(config, **kwargs)
|
|
@@ -641,30 +698,29 @@ def load_chain_from_config(config: dict, **kwargs: Any) -> Chain:
|
|
|
641
698
|
def load_chain(path: Union[str, Path], **kwargs: Any) -> Chain:
|
|
642
699
|
"""Unified method for loading a chain from LangChainHub or local fs."""
|
|
643
700
|
if isinstance(path, str) and path.startswith("lc://"):
|
|
644
|
-
|
|
701
|
+
msg = (
|
|
645
702
|
"Loading from the deprecated github-based Hub is no longer supported. "
|
|
646
703
|
"Please use the new LangChain Hub at https://smith.langchain.com/hub "
|
|
647
704
|
"instead."
|
|
648
705
|
)
|
|
706
|
+
raise RuntimeError(msg)
|
|
649
707
|
return _load_chain_from_file(path, **kwargs)
|
|
650
708
|
|
|
651
709
|
|
|
652
710
|
def _load_chain_from_file(file: Union[str, Path], **kwargs: Any) -> Chain:
|
|
653
711
|
"""Load chain from file."""
|
|
654
712
|
# Convert file to Path object.
|
|
655
|
-
if isinstance(file, str)
|
|
656
|
-
file_path = Path(file)
|
|
657
|
-
else:
|
|
658
|
-
file_path = file
|
|
713
|
+
file_path = Path(file) if isinstance(file, str) else file
|
|
659
714
|
# Load from either json or yaml.
|
|
660
715
|
if file_path.suffix == ".json":
|
|
661
|
-
with open(
|
|
716
|
+
with file_path.open() as f:
|
|
662
717
|
config = json.load(f)
|
|
663
718
|
elif file_path.suffix.endswith((".yaml", ".yml")):
|
|
664
|
-
with open(
|
|
719
|
+
with file_path.open() as f:
|
|
665
720
|
config = yaml.safe_load(f)
|
|
666
721
|
else:
|
|
667
|
-
|
|
722
|
+
msg = "File type must be json or yaml"
|
|
723
|
+
raise ValueError(msg)
|
|
668
724
|
|
|
669
725
|
# Override default 'verbose' and 'memory' for the chain
|
|
670
726
|
if "verbose" in kwargs:
|
langchain/chains/mapreduce.py
CHANGED
|
@@ -30,7 +30,7 @@ from langchain.chains.llm import LLMChain
|
|
|
30
30
|
removal="1.0",
|
|
31
31
|
message=(
|
|
32
32
|
"Refer to migration guide here for a recommended implementation using "
|
|
33
|
-
"LangGraph: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"
|
|
33
|
+
"LangGraph: https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"
|
|
34
34
|
". See also LangGraph guides for map-reduce: "
|
|
35
35
|
"https://langchain-ai.github.io/langgraph/how-tos/map-reduce/."
|
|
36
36
|
),
|
|
@@ -64,7 +64,7 @@ class MapReduceChain(Chain):
|
|
|
64
64
|
**(reduce_chain_kwargs if reduce_chain_kwargs else {}),
|
|
65
65
|
)
|
|
66
66
|
reduce_documents_chain = ReduceDocumentsChain(
|
|
67
|
-
combine_documents_chain=stuff_chain
|
|
67
|
+
combine_documents_chain=stuff_chain,
|
|
68
68
|
)
|
|
69
69
|
combine_documents_chain = MapReduceDocumentsChain(
|
|
70
70
|
llm_chain=llm_chain,
|
|
@@ -115,6 +115,7 @@ class MapReduceChain(Chain):
|
|
|
115
115
|
self.combine_documents_chain.input_key: docs,
|
|
116
116
|
}
|
|
117
117
|
outputs = self.combine_documents_chain.run(
|
|
118
|
-
_inputs,
|
|
118
|
+
_inputs,
|
|
119
|
+
callbacks=_run_manager.get_child(),
|
|
119
120
|
)
|
|
120
121
|
return {self.output_key: outputs}
|