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