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/api/prompt.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
from langchain_core.prompts.prompt import PromptTemplate
|
|
3
2
|
|
|
4
3
|
API_URL_PROMPT_TEMPLATE = """You are given the below API Documentation:
|
|
@@ -7,7 +6,7 @@ Using this documentation, generate the full API url to call for answering the us
|
|
|
7
6
|
You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.
|
|
8
7
|
|
|
9
8
|
Question:{question}
|
|
10
|
-
API url:"""
|
|
9
|
+
API url:""" # noqa: E501
|
|
11
10
|
|
|
12
11
|
API_URL_PROMPT = PromptTemplate(
|
|
13
12
|
input_variables=[
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
TMDB_DOCS = """API documentation:
|
|
3
2
|
Endpoint: https://api.themoviedb.org/3
|
|
4
3
|
GET /search/movie
|
|
@@ -34,4 +33,4 @@ backdrop_path | string or null | optional
|
|
|
34
33
|
popularity | number | optional
|
|
35
34
|
vote_count | integer | optional
|
|
36
35
|
video | boolean | optional
|
|
37
|
-
vote_average | number | optional"""
|
|
36
|
+
vote_average | number | optional""" # noqa: E501
|
langchain/chains/base.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Base interface that all chains should implement."""
|
|
2
2
|
|
|
3
3
|
import builtins
|
|
4
|
+
import contextlib
|
|
4
5
|
import inspect
|
|
5
6
|
import json
|
|
6
7
|
import logging
|
|
@@ -35,6 +36,7 @@ from pydantic import (
|
|
|
35
36
|
field_validator,
|
|
36
37
|
model_validator,
|
|
37
38
|
)
|
|
39
|
+
from typing_extensions import override
|
|
38
40
|
|
|
39
41
|
from langchain.schema import RUN_KEY
|
|
40
42
|
|
|
@@ -107,17 +109,23 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
107
109
|
)
|
|
108
110
|
|
|
109
111
|
def get_input_schema(
|
|
110
|
-
self,
|
|
112
|
+
self,
|
|
113
|
+
config: Optional[RunnableConfig] = None,
|
|
111
114
|
) -> type[BaseModel]:
|
|
112
115
|
# This is correct, but pydantic typings/mypy don't think so.
|
|
113
|
-
return create_model("ChainInput", **
|
|
116
|
+
return create_model("ChainInput", **dict.fromkeys(self.input_keys, (Any, None)))
|
|
114
117
|
|
|
115
118
|
def get_output_schema(
|
|
116
|
-
self,
|
|
119
|
+
self,
|
|
120
|
+
config: Optional[RunnableConfig] = None,
|
|
117
121
|
) -> type[BaseModel]:
|
|
118
122
|
# This is correct, but pydantic typings/mypy don't think so.
|
|
119
|
-
return create_model(
|
|
123
|
+
return create_model(
|
|
124
|
+
"ChainOutput",
|
|
125
|
+
**dict.fromkeys(self.output_keys, (Any, None)),
|
|
126
|
+
)
|
|
120
127
|
|
|
128
|
+
@override
|
|
121
129
|
def invoke(
|
|
122
130
|
self,
|
|
123
131
|
input: dict[str, Any],
|
|
@@ -160,17 +168,20 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
160
168
|
)
|
|
161
169
|
|
|
162
170
|
final_outputs: dict[str, Any] = self.prep_outputs(
|
|
163
|
-
inputs,
|
|
171
|
+
inputs,
|
|
172
|
+
outputs,
|
|
173
|
+
return_only_outputs,
|
|
164
174
|
)
|
|
165
175
|
except BaseException as e:
|
|
166
176
|
run_manager.on_chain_error(e)
|
|
167
|
-
raise
|
|
177
|
+
raise
|
|
168
178
|
run_manager.on_chain_end(outputs)
|
|
169
179
|
|
|
170
180
|
if include_run_info:
|
|
171
181
|
final_outputs[RUN_KEY] = RunInfo(run_id=run_manager.run_id)
|
|
172
182
|
return final_outputs
|
|
173
183
|
|
|
184
|
+
@override
|
|
174
185
|
async def ainvoke(
|
|
175
186
|
self,
|
|
176
187
|
input: dict[str, Any],
|
|
@@ -211,11 +222,13 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
211
222
|
else await self._acall(inputs)
|
|
212
223
|
)
|
|
213
224
|
final_outputs: dict[str, Any] = await self.aprep_outputs(
|
|
214
|
-
inputs,
|
|
225
|
+
inputs,
|
|
226
|
+
outputs,
|
|
227
|
+
return_only_outputs,
|
|
215
228
|
)
|
|
216
229
|
except BaseException as e:
|
|
217
230
|
await run_manager.on_chain_error(e)
|
|
218
|
-
raise
|
|
231
|
+
raise
|
|
219
232
|
await run_manager.on_chain_end(outputs)
|
|
220
233
|
|
|
221
234
|
if include_run_info:
|
|
@@ -224,7 +237,8 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
224
237
|
|
|
225
238
|
@property
|
|
226
239
|
def _chain_type(self) -> str:
|
|
227
|
-
|
|
240
|
+
msg = "Saving not supported for this chain type."
|
|
241
|
+
raise NotImplementedError(msg)
|
|
228
242
|
|
|
229
243
|
@model_validator(mode="before")
|
|
230
244
|
@classmethod
|
|
@@ -232,29 +246,33 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
232
246
|
"""Raise deprecation warning if callback_manager is used."""
|
|
233
247
|
if values.get("callback_manager") is not None:
|
|
234
248
|
if values.get("callbacks") is not None:
|
|
235
|
-
|
|
249
|
+
msg = (
|
|
236
250
|
"Cannot specify both callback_manager and callbacks. "
|
|
237
251
|
"callback_manager is deprecated, callbacks is the preferred "
|
|
238
252
|
"parameter to pass in."
|
|
239
253
|
)
|
|
254
|
+
raise ValueError(msg)
|
|
240
255
|
warnings.warn(
|
|
241
256
|
"callback_manager is deprecated. Please use callbacks instead.",
|
|
242
257
|
DeprecationWarning,
|
|
258
|
+
stacklevel=4,
|
|
243
259
|
)
|
|
244
260
|
values["callbacks"] = values.pop("callback_manager", None)
|
|
245
261
|
return values
|
|
246
262
|
|
|
247
263
|
@field_validator("verbose", mode="before")
|
|
248
264
|
@classmethod
|
|
249
|
-
def set_verbose(
|
|
265
|
+
def set_verbose(
|
|
266
|
+
cls,
|
|
267
|
+
verbose: Optional[bool], # noqa: FBT001
|
|
268
|
+
) -> bool:
|
|
250
269
|
"""Set the chain verbosity.
|
|
251
270
|
|
|
252
271
|
Defaults to the global setting if not specified by the user.
|
|
253
272
|
"""
|
|
254
273
|
if verbose is None:
|
|
255
274
|
return _get_verbosity()
|
|
256
|
-
|
|
257
|
-
return verbose
|
|
275
|
+
return verbose
|
|
258
276
|
|
|
259
277
|
@property
|
|
260
278
|
@abstractmethod
|
|
@@ -275,21 +293,24 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
275
293
|
# only one is not set, we can still figure out which key it is.
|
|
276
294
|
_input_keys = _input_keys.difference(self.memory.memory_variables)
|
|
277
295
|
if len(_input_keys) != 1:
|
|
278
|
-
|
|
296
|
+
msg = (
|
|
279
297
|
f"A single string input was passed in, but this chain expects "
|
|
280
298
|
f"multiple inputs ({_input_keys}). When a chain expects "
|
|
281
299
|
f"multiple inputs, please call it by passing in a dictionary, "
|
|
282
300
|
"eg `chain({'foo': 1, 'bar': 2})`"
|
|
283
301
|
)
|
|
302
|
+
raise ValueError(msg)
|
|
284
303
|
|
|
285
304
|
missing_keys = set(self.input_keys).difference(inputs)
|
|
286
305
|
if missing_keys:
|
|
287
|
-
|
|
306
|
+
msg = f"Missing some input keys: {missing_keys}"
|
|
307
|
+
raise ValueError(msg)
|
|
288
308
|
|
|
289
309
|
def _validate_outputs(self, outputs: dict[str, Any]) -> None:
|
|
290
310
|
missing_keys = set(self.output_keys).difference(outputs)
|
|
291
311
|
if missing_keys:
|
|
292
|
-
|
|
312
|
+
msg = f"Missing some output keys: {missing_keys}"
|
|
313
|
+
raise ValueError(msg)
|
|
293
314
|
|
|
294
315
|
@abstractmethod
|
|
295
316
|
def _call(
|
|
@@ -336,14 +357,17 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
336
357
|
`Chain.output_keys`.
|
|
337
358
|
"""
|
|
338
359
|
return await run_in_executor(
|
|
339
|
-
None,
|
|
360
|
+
None,
|
|
361
|
+
self._call,
|
|
362
|
+
inputs,
|
|
363
|
+
run_manager.get_sync() if run_manager else None,
|
|
340
364
|
)
|
|
341
365
|
|
|
342
366
|
@deprecated("0.1.0", alternative="invoke", removal="1.0")
|
|
343
367
|
def __call__(
|
|
344
368
|
self,
|
|
345
369
|
inputs: Union[dict[str, Any], Any],
|
|
346
|
-
return_only_outputs: bool = False,
|
|
370
|
+
return_only_outputs: bool = False, # noqa: FBT001,FBT002
|
|
347
371
|
callbacks: Callbacks = None,
|
|
348
372
|
*,
|
|
349
373
|
tags: Optional[list[str]] = None,
|
|
@@ -394,7 +418,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
394
418
|
async def acall(
|
|
395
419
|
self,
|
|
396
420
|
inputs: Union[dict[str, Any], Any],
|
|
397
|
-
return_only_outputs: bool = False,
|
|
421
|
+
return_only_outputs: bool = False, # noqa: FBT001,FBT002
|
|
398
422
|
callbacks: Callbacks = None,
|
|
399
423
|
*,
|
|
400
424
|
tags: Optional[list[str]] = None,
|
|
@@ -444,7 +468,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
444
468
|
self,
|
|
445
469
|
inputs: dict[str, str],
|
|
446
470
|
outputs: dict[str, str],
|
|
447
|
-
return_only_outputs: bool = False,
|
|
471
|
+
return_only_outputs: bool = False, # noqa: FBT001,FBT002
|
|
448
472
|
) -> dict[str, str]:
|
|
449
473
|
"""Validate and prepare chain outputs, and save info about this run to memory.
|
|
450
474
|
|
|
@@ -463,14 +487,13 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
463
487
|
self.memory.save_context(inputs, outputs)
|
|
464
488
|
if return_only_outputs:
|
|
465
489
|
return outputs
|
|
466
|
-
|
|
467
|
-
return {**inputs, **outputs}
|
|
490
|
+
return {**inputs, **outputs}
|
|
468
491
|
|
|
469
492
|
async def aprep_outputs(
|
|
470
493
|
self,
|
|
471
494
|
inputs: dict[str, str],
|
|
472
495
|
outputs: dict[str, str],
|
|
473
|
-
return_only_outputs: bool = False,
|
|
496
|
+
return_only_outputs: bool = False, # noqa: FBT001,FBT002
|
|
474
497
|
) -> dict[str, str]:
|
|
475
498
|
"""Validate and prepare chain outputs, and save info about this run to memory.
|
|
476
499
|
|
|
@@ -489,8 +512,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
489
512
|
await self.memory.asave_context(inputs, outputs)
|
|
490
513
|
if return_only_outputs:
|
|
491
514
|
return outputs
|
|
492
|
-
|
|
493
|
-
return {**inputs, **outputs}
|
|
515
|
+
return {**inputs, **outputs}
|
|
494
516
|
|
|
495
517
|
def prep_inputs(self, inputs: Union[dict[str, Any], Any]) -> dict[str, str]:
|
|
496
518
|
"""Prepare chain inputs, including adding inputs from memory.
|
|
@@ -510,7 +532,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
510
532
|
# If there are multiple input keys, but some get set by memory so that
|
|
511
533
|
# only one is not set, we can still figure out which key it is.
|
|
512
534
|
_input_keys = _input_keys.difference(self.memory.memory_variables)
|
|
513
|
-
inputs = {
|
|
535
|
+
inputs = {next(iter(_input_keys)): inputs}
|
|
514
536
|
if self.memory is not None:
|
|
515
537
|
external_context = self.memory.load_memory_variables(inputs)
|
|
516
538
|
inputs = dict(inputs, **external_context)
|
|
@@ -534,7 +556,7 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
534
556
|
# If there are multiple input keys, but some get set by memory so that
|
|
535
557
|
# only one is not set, we can still figure out which key it is.
|
|
536
558
|
_input_keys = _input_keys.difference(self.memory.memory_variables)
|
|
537
|
-
inputs = {
|
|
559
|
+
inputs = {next(iter(_input_keys)): inputs}
|
|
538
560
|
if self.memory is not None:
|
|
539
561
|
external_context = await self.memory.aload_memory_variables(inputs)
|
|
540
562
|
inputs = dict(inputs, **external_context)
|
|
@@ -543,10 +565,11 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
543
565
|
@property
|
|
544
566
|
def _run_output_key(self) -> str:
|
|
545
567
|
if len(self.output_keys) != 1:
|
|
546
|
-
|
|
568
|
+
msg = (
|
|
547
569
|
f"`run` not supported when there is not exactly "
|
|
548
570
|
f"one output key. Got {self.output_keys}."
|
|
549
571
|
)
|
|
572
|
+
raise ValueError(msg)
|
|
550
573
|
return self.output_keys[0]
|
|
551
574
|
|
|
552
575
|
@deprecated("0.1.0", alternative="invoke", removal="1.0")
|
|
@@ -599,7 +622,8 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
599
622
|
|
|
600
623
|
if args and not kwargs:
|
|
601
624
|
if len(args) != 1:
|
|
602
|
-
|
|
625
|
+
msg = "`run` supports only one positional argument."
|
|
626
|
+
raise ValueError(msg)
|
|
603
627
|
return self(args[0], callbacks=callbacks, tags=tags, metadata=metadata)[
|
|
604
628
|
_output_key
|
|
605
629
|
]
|
|
@@ -610,15 +634,16 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
610
634
|
]
|
|
611
635
|
|
|
612
636
|
if not kwargs and not args:
|
|
613
|
-
|
|
637
|
+
msg = (
|
|
614
638
|
"`run` supported with either positional arguments or keyword arguments,"
|
|
615
639
|
" but none were provided."
|
|
616
640
|
)
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
641
|
+
raise ValueError(msg)
|
|
642
|
+
msg = (
|
|
643
|
+
f"`run` supported with either positional arguments or keyword arguments"
|
|
644
|
+
f" but not both. Got args: {args} and kwargs: {kwargs}."
|
|
645
|
+
)
|
|
646
|
+
raise ValueError(msg)
|
|
622
647
|
|
|
623
648
|
@deprecated("0.1.0", alternative="ainvoke", removal="1.0")
|
|
624
649
|
async def arun(
|
|
@@ -667,30 +692,39 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
667
692
|
# -> "The temperature in Boise is..."
|
|
668
693
|
"""
|
|
669
694
|
if len(self.output_keys) != 1:
|
|
670
|
-
|
|
695
|
+
msg = (
|
|
671
696
|
f"`run` not supported when there is not exactly "
|
|
672
697
|
f"one output key. Got {self.output_keys}."
|
|
673
698
|
)
|
|
674
|
-
|
|
699
|
+
raise ValueError(msg)
|
|
700
|
+
if args and not kwargs:
|
|
675
701
|
if len(args) != 1:
|
|
676
|
-
|
|
702
|
+
msg = "`run` supports only one positional argument."
|
|
703
|
+
raise ValueError(msg)
|
|
677
704
|
return (
|
|
678
705
|
await self.acall(
|
|
679
|
-
args[0],
|
|
706
|
+
args[0],
|
|
707
|
+
callbacks=callbacks,
|
|
708
|
+
tags=tags,
|
|
709
|
+
metadata=metadata,
|
|
680
710
|
)
|
|
681
711
|
)[self.output_keys[0]]
|
|
682
712
|
|
|
683
713
|
if kwargs and not args:
|
|
684
714
|
return (
|
|
685
715
|
await self.acall(
|
|
686
|
-
kwargs,
|
|
716
|
+
kwargs,
|
|
717
|
+
callbacks=callbacks,
|
|
718
|
+
tags=tags,
|
|
719
|
+
metadata=metadata,
|
|
687
720
|
)
|
|
688
721
|
)[self.output_keys[0]]
|
|
689
722
|
|
|
690
|
-
|
|
723
|
+
msg = (
|
|
691
724
|
f"`run` supported with either positional arguments or keyword arguments"
|
|
692
725
|
f" but not both. Got args: {args} and kwargs: {kwargs}."
|
|
693
726
|
)
|
|
727
|
+
raise ValueError(msg)
|
|
694
728
|
|
|
695
729
|
def dict(self, **kwargs: Any) -> dict:
|
|
696
730
|
"""Dictionary representation of chain.
|
|
@@ -712,10 +746,8 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
712
746
|
# -> {"_type": "foo", "verbose": False, ...}
|
|
713
747
|
"""
|
|
714
748
|
_dict = super().dict(**kwargs)
|
|
715
|
-
|
|
749
|
+
with contextlib.suppress(NotImplementedError):
|
|
716
750
|
_dict["_type"] = self._chain_type
|
|
717
|
-
except NotImplementedError:
|
|
718
|
-
pass
|
|
719
751
|
return _dict
|
|
720
752
|
|
|
721
753
|
def save(self, file_path: Union[Path, str]) -> None:
|
|
@@ -733,34 +765,36 @@ class Chain(RunnableSerializable[dict[str, Any], dict[str, Any]], ABC):
|
|
|
733
765
|
chain.save(file_path="path/chain.yaml")
|
|
734
766
|
"""
|
|
735
767
|
if self.memory is not None:
|
|
736
|
-
|
|
768
|
+
msg = "Saving of memory is not yet supported."
|
|
769
|
+
raise ValueError(msg)
|
|
737
770
|
|
|
738
771
|
# Fetch dictionary to save
|
|
739
772
|
chain_dict = self.dict()
|
|
740
773
|
if "_type" not in chain_dict:
|
|
741
|
-
|
|
774
|
+
msg = f"Chain {self} does not support saving."
|
|
775
|
+
raise NotImplementedError(msg)
|
|
742
776
|
|
|
743
777
|
# Convert file to Path object.
|
|
744
|
-
if isinstance(file_path, str)
|
|
745
|
-
save_path = Path(file_path)
|
|
746
|
-
else:
|
|
747
|
-
save_path = file_path
|
|
778
|
+
save_path = Path(file_path) if isinstance(file_path, str) else file_path
|
|
748
779
|
|
|
749
780
|
directory_path = save_path.parent
|
|
750
781
|
directory_path.mkdir(parents=True, exist_ok=True)
|
|
751
782
|
|
|
752
783
|
if save_path.suffix == ".json":
|
|
753
|
-
with open(
|
|
784
|
+
with save_path.open("w") as f:
|
|
754
785
|
json.dump(chain_dict, f, indent=4)
|
|
755
786
|
elif save_path.suffix.endswith((".yaml", ".yml")):
|
|
756
|
-
with open(
|
|
787
|
+
with save_path.open("w") as f:
|
|
757
788
|
yaml.dump(chain_dict, f, default_flow_style=False)
|
|
758
789
|
else:
|
|
759
|
-
|
|
790
|
+
msg = f"{save_path} must be json or yaml"
|
|
791
|
+
raise ValueError(msg)
|
|
760
792
|
|
|
761
793
|
@deprecated("0.1.0", alternative="batch", removal="1.0")
|
|
762
794
|
def apply(
|
|
763
|
-
self,
|
|
795
|
+
self,
|
|
796
|
+
input_list: list[builtins.dict[str, Any]],
|
|
797
|
+
callbacks: Callbacks = None,
|
|
764
798
|
) -> list[builtins.dict[str, str]]:
|
|
765
799
|
"""Call the chain on all inputs in the list."""
|
|
766
800
|
return [self(inputs, callbacks=callbacks) for inputs in input_list]
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
from langchain_core.prompts.prompt import PromptTemplate
|
|
3
2
|
|
|
4
3
|
_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.
|
|
@@ -6,7 +5,7 @@ _template = """Given the following conversation and a follow up question, rephra
|
|
|
6
5
|
Chat History:
|
|
7
6
|
{chat_history}
|
|
8
7
|
Follow Up Input: {question}
|
|
9
|
-
Standalone question:"""
|
|
8
|
+
Standalone question:""" # noqa: E501
|
|
10
9
|
CONDENSE_QUESTION_PROMPT = PromptTemplate.from_template(_template)
|
|
11
10
|
|
|
12
11
|
prompt_template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
|
|
@@ -14,7 +13,7 @@ prompt_template = """Use the following pieces of context to answer the question
|
|
|
14
13
|
{context}
|
|
15
14
|
|
|
16
15
|
Question: {question}
|
|
17
|
-
Helpful Answer:"""
|
|
16
|
+
Helpful Answer:""" # noqa: E501
|
|
18
17
|
QA_PROMPT = PromptTemplate(
|
|
19
18
|
template=prompt_template, input_variables=["context", "question"]
|
|
20
19
|
)
|
|
@@ -24,10 +24,11 @@ DEFAULT_DOCUMENT_PROMPT = PromptTemplate.from_template("{page_content}")
|
|
|
24
24
|
|
|
25
25
|
def _validate_prompt(prompt: BasePromptTemplate, document_variable_name: str) -> None:
|
|
26
26
|
if document_variable_name not in prompt.input_variables:
|
|
27
|
-
|
|
27
|
+
msg = (
|
|
28
28
|
f"Prompt must accept {document_variable_name} as an input variable. "
|
|
29
29
|
f"Received prompt with input variables: {prompt.input_variables}"
|
|
30
30
|
)
|
|
31
|
+
raise ValueError(msg)
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
class BaseCombineDocumentsChain(Chain, ABC):
|
|
@@ -46,7 +47,8 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
46
47
|
output_key: str = "output_text" #: :meta private:
|
|
47
48
|
|
|
48
49
|
def get_input_schema(
|
|
49
|
-
self,
|
|
50
|
+
self,
|
|
51
|
+
config: Optional[RunnableConfig] = None,
|
|
50
52
|
) -> type[BaseModel]:
|
|
51
53
|
return create_model(
|
|
52
54
|
"CombineDocumentsInput",
|
|
@@ -54,7 +56,8 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
54
56
|
)
|
|
55
57
|
|
|
56
58
|
def get_output_schema(
|
|
57
|
-
self,
|
|
59
|
+
self,
|
|
60
|
+
config: Optional[RunnableConfig] = None,
|
|
58
61
|
) -> type[BaseModel]:
|
|
59
62
|
return create_model(
|
|
60
63
|
"CombineDocumentsOutput",
|
|
@@ -111,7 +114,9 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
111
114
|
|
|
112
115
|
@abstractmethod
|
|
113
116
|
async def acombine_docs(
|
|
114
|
-
self,
|
|
117
|
+
self,
|
|
118
|
+
docs: list[Document],
|
|
119
|
+
**kwargs: Any,
|
|
115
120
|
) -> tuple[str, dict]:
|
|
116
121
|
"""Combine documents into a single string.
|
|
117
122
|
|
|
@@ -136,7 +141,9 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
136
141
|
# Other keys are assumed to be needed for LLM prediction
|
|
137
142
|
other_keys = {k: v for k, v in inputs.items() if k != self.input_key}
|
|
138
143
|
output, extra_return_dict = self.combine_docs(
|
|
139
|
-
docs,
|
|
144
|
+
docs,
|
|
145
|
+
callbacks=_run_manager.get_child(),
|
|
146
|
+
**other_keys,
|
|
140
147
|
)
|
|
141
148
|
extra_return_dict[self.output_key] = output
|
|
142
149
|
return extra_return_dict
|
|
@@ -152,7 +159,9 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
152
159
|
# Other keys are assumed to be needed for LLM prediction
|
|
153
160
|
other_keys = {k: v for k, v in inputs.items() if k != self.input_key}
|
|
154
161
|
output, extra_return_dict = await self.acombine_docs(
|
|
155
|
-
docs,
|
|
162
|
+
docs,
|
|
163
|
+
callbacks=_run_manager.get_child(),
|
|
164
|
+
**other_keys,
|
|
156
165
|
)
|
|
157
166
|
extra_return_dict[self.output_key] = output
|
|
158
167
|
return extra_return_dict
|
|
@@ -162,7 +171,7 @@ class BaseCombineDocumentsChain(Chain, ABC):
|
|
|
162
171
|
since="0.2.7",
|
|
163
172
|
alternative=(
|
|
164
173
|
"example in API reference with more detail: "
|
|
165
|
-
"https://api.python.langchain.com/en/latest/chains/langchain.chains.combine_documents.base.AnalyzeDocumentChain.html"
|
|
174
|
+
"https://api.python.langchain.com/en/latest/chains/langchain.chains.combine_documents.base.AnalyzeDocumentChain.html"
|
|
166
175
|
),
|
|
167
176
|
removal="1.0",
|
|
168
177
|
)
|
|
@@ -245,7 +254,8 @@ class AnalyzeDocumentChain(Chain):
|
|
|
245
254
|
return self.combine_docs_chain.output_keys
|
|
246
255
|
|
|
247
256
|
def get_input_schema(
|
|
248
|
-
self,
|
|
257
|
+
self,
|
|
258
|
+
config: Optional[RunnableConfig] = None,
|
|
249
259
|
) -> type[BaseModel]:
|
|
250
260
|
return create_model(
|
|
251
261
|
"AnalyzeDocumentChain",
|
|
@@ -253,7 +263,8 @@ class AnalyzeDocumentChain(Chain):
|
|
|
253
263
|
)
|
|
254
264
|
|
|
255
265
|
def get_output_schema(
|
|
256
|
-
self,
|
|
266
|
+
self,
|
|
267
|
+
config: Optional[RunnableConfig] = None,
|
|
257
268
|
) -> type[BaseModel]:
|
|
258
269
|
return self.combine_docs_chain.get_output_schema(config)
|
|
259
270
|
|
|
@@ -270,5 +281,7 @@ class AnalyzeDocumentChain(Chain):
|
|
|
270
281
|
other_keys: dict = {k: v for k, v in inputs.items() if k != self.input_key}
|
|
271
282
|
other_keys[self.combine_docs_chain.input_key] = docs
|
|
272
283
|
return self.combine_docs_chain(
|
|
273
|
-
other_keys,
|
|
284
|
+
other_keys,
|
|
285
|
+
return_only_outputs=True,
|
|
286
|
+
callbacks=_run_manager.get_child(),
|
|
274
287
|
)
|