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
|
@@ -16,7 +16,7 @@ def create_json_chat_agent(
|
|
|
16
16
|
llm: BaseLanguageModel,
|
|
17
17
|
tools: Sequence[BaseTool],
|
|
18
18
|
prompt: ChatPromptTemplate,
|
|
19
|
-
stop_sequence: Union[bool, list[str]] = True,
|
|
19
|
+
stop_sequence: Union[bool, list[str]] = True, # noqa: FBT001,FBT002
|
|
20
20
|
tools_renderer: ToolsRenderer = render_text_description,
|
|
21
21
|
template_tool_response: str = TEMPLATE_TOOL_RESPONSE,
|
|
22
22
|
) -> Runnable:
|
|
@@ -27,10 +27,10 @@ def create_json_chat_agent(
|
|
|
27
27
|
tools: Tools this agent has access to.
|
|
28
28
|
prompt: The prompt to use. See Prompt section below for more.
|
|
29
29
|
stop_sequence: bool or list of str.
|
|
30
|
-
If True, adds a stop token of "Observation:" to avoid hallucinates.
|
|
30
|
+
If True, adds a stop token of "Observation:" to avoid hallucinates.
|
|
31
31
|
If False, does not add a stop token.
|
|
32
32
|
If a list of str, uses the provided list as the stop tokens.
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
Default is True. You may to set this to False if the LLM you are using
|
|
35
35
|
does not support stop sequences.
|
|
36
36
|
tools_renderer: This controls how the tools are converted into a string and
|
|
@@ -43,7 +43,7 @@ def create_json_chat_agent(
|
|
|
43
43
|
A Runnable sequence representing an agent. It takes as input all the same input
|
|
44
44
|
variables as the prompt passed in does. It returns as output either an
|
|
45
45
|
AgentAction or AgentFinish.
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
Raises:
|
|
48
48
|
ValueError: If the prompt is missing required variables.
|
|
49
49
|
ValueError: If the template_tool_response is missing
|
|
@@ -79,18 +79,18 @@ def create_json_chat_agent(
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
Prompt:
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
The prompt must have input keys:
|
|
84
84
|
* `tools`: contains descriptions and arguments for each tool.
|
|
85
85
|
* `tool_names`: contains all tool names.
|
|
86
86
|
* `agent_scratchpad`: must be a MessagesPlaceholder. Contains previous agent actions and tool outputs as messages.
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
Here's an example:
|
|
89
89
|
|
|
90
90
|
.. code-block:: python
|
|
91
91
|
|
|
92
92
|
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
system = '''Assistant is a large language model trained by OpenAI.
|
|
95
95
|
|
|
96
96
|
Assistant is designed to be able to assist with a wide range of tasks, from answering \
|
|
@@ -110,7 +110,7 @@ def create_json_chat_agent(
|
|
|
110
110
|
and provide valuable insights and information on a wide range of topics. Whether \
|
|
111
111
|
you need help with a specific question or just want to have a conversation about \
|
|
112
112
|
a particular topic, Assistant is here to assist.'''
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
human = '''TOOLS
|
|
115
115
|
------
|
|
116
116
|
Assistant can ask the user to use tools to look up information that may be helpful in \
|
|
@@ -151,7 +151,7 @@ def create_json_chat_agent(
|
|
|
151
151
|
blob with a single action, and NOTHING else):
|
|
152
152
|
|
|
153
153
|
{input}'''
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
prompt = ChatPromptTemplate.from_messages(
|
|
156
156
|
[
|
|
157
157
|
("system", system),
|
|
@@ -162,15 +162,15 @@ def create_json_chat_agent(
|
|
|
162
162
|
)
|
|
163
163
|
""" # noqa: E501
|
|
164
164
|
missing_vars = {"tools", "tool_names", "agent_scratchpad"}.difference(
|
|
165
|
-
prompt.input_variables + list(prompt.partial_variables)
|
|
165
|
+
prompt.input_variables + list(prompt.partial_variables),
|
|
166
166
|
)
|
|
167
167
|
if missing_vars:
|
|
168
|
-
|
|
168
|
+
msg = f"Prompt missing required variables: {missing_vars}"
|
|
169
|
+
raise ValueError(msg)
|
|
169
170
|
|
|
170
171
|
if "{observation}" not in template_tool_response:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
)
|
|
172
|
+
msg = "Template tool response missing required variable 'observation'"
|
|
173
|
+
raise ValueError(msg)
|
|
174
174
|
|
|
175
175
|
prompt = prompt.partial(
|
|
176
176
|
tools=tools_renderer(list(tools)),
|
|
@@ -182,14 +182,14 @@ def create_json_chat_agent(
|
|
|
182
182
|
else:
|
|
183
183
|
llm_to_use = llm
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
return (
|
|
186
186
|
RunnablePassthrough.assign(
|
|
187
187
|
agent_scratchpad=lambda x: format_log_to_messages(
|
|
188
|
-
x["intermediate_steps"],
|
|
189
|
-
|
|
188
|
+
x["intermediate_steps"],
|
|
189
|
+
template_tool_response=template_tool_response,
|
|
190
|
+
),
|
|
190
191
|
)
|
|
191
192
|
| prompt
|
|
192
193
|
| llm_to_use
|
|
193
194
|
| JSONAgentOutputParser()
|
|
194
195
|
)
|
|
195
|
-
return agent
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
TEMPLATE_TOOL_RESPONSE = """TOOL RESPONSE:
|
|
1
|
+
TEMPLATE_TOOL_RESPONSE = """TOOL RESPONSE:
|
|
3
2
|
---------------------
|
|
4
3
|
{observation}
|
|
5
4
|
|
|
6
5
|
USER'S INPUT
|
|
7
6
|
--------------------
|
|
8
7
|
|
|
9
|
-
Okay, so what is the response to my last comment? If using information obtained from the tools you must mention it explicitly without mentioning the tool names - I have forgotten all TOOL RESPONSES! Remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else - even if you just want to respond to the user. Do NOT respond with anything except a JSON snippet no matter what!"""
|
|
8
|
+
Okay, so what is the response to my last comment? If using information obtained from the tools you must mention it explicitly without mentioning the tool names - I have forgotten all TOOL RESPONSES! Remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else - even if you just want to respond to the user. Do NOT respond with anything except a JSON snippet no matter what!""" # noqa: E501
|
langchain/agents/load_tools.py
CHANGED
|
@@ -3,7 +3,8 @@ from typing import Any
|
|
|
3
3
|
from langchain._api import create_importer
|
|
4
4
|
|
|
5
5
|
_importer = create_importer(
|
|
6
|
-
__package__,
|
|
6
|
+
__package__,
|
|
7
|
+
fallback_module="langchain_community.agent_toolkits.load_tools",
|
|
7
8
|
)
|
|
8
9
|
|
|
9
10
|
|
langchain/agents/loading.py
CHANGED
|
@@ -20,11 +20,15 @@ URL_BASE = "https://raw.githubusercontent.com/hwchase17/langchain-hub/master/age
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def _load_agent_from_tools(
|
|
23
|
-
config: dict,
|
|
23
|
+
config: dict,
|
|
24
|
+
llm: BaseLanguageModel,
|
|
25
|
+
tools: list[Tool],
|
|
26
|
+
**kwargs: Any,
|
|
24
27
|
) -> Union[BaseSingleActionAgent, BaseMultiActionAgent]:
|
|
25
28
|
config_type = config.pop("_type")
|
|
26
29
|
if config_type not in AGENT_TO_CLASS:
|
|
27
|
-
|
|
30
|
+
msg = f"Loading {config_type} agent not supported"
|
|
31
|
+
raise ValueError(msg)
|
|
28
32
|
|
|
29
33
|
agent_cls = AGENT_TO_CLASS[config_type]
|
|
30
34
|
combined_config = {**config, **kwargs}
|
|
@@ -53,23 +57,27 @@ def load_agent_from_config(
|
|
|
53
57
|
ValueError: If agent type is not specified in the config.
|
|
54
58
|
"""
|
|
55
59
|
if "_type" not in config:
|
|
56
|
-
|
|
60
|
+
msg = "Must specify an agent Type in config"
|
|
61
|
+
raise ValueError(msg)
|
|
57
62
|
load_from_tools = config.pop("load_from_llm_and_tools", False)
|
|
58
63
|
if load_from_tools:
|
|
59
64
|
if llm is None:
|
|
60
|
-
|
|
65
|
+
msg = (
|
|
61
66
|
"If `load_from_llm_and_tools` is set to True, then LLM must be provided"
|
|
62
67
|
)
|
|
68
|
+
raise ValueError(msg)
|
|
63
69
|
if tools is None:
|
|
64
|
-
|
|
70
|
+
msg = (
|
|
65
71
|
"If `load_from_llm_and_tools` is set to True, "
|
|
66
72
|
"then tools must be provided"
|
|
67
73
|
)
|
|
74
|
+
raise ValueError(msg)
|
|
68
75
|
return _load_agent_from_tools(config, llm, tools, **kwargs)
|
|
69
76
|
config_type = config.pop("_type")
|
|
70
77
|
|
|
71
78
|
if config_type not in AGENT_TO_CLASS:
|
|
72
|
-
|
|
79
|
+
msg = f"Loading {config_type} agent not supported"
|
|
80
|
+
raise ValueError(msg)
|
|
73
81
|
|
|
74
82
|
agent_cls = AGENT_TO_CLASS[config_type]
|
|
75
83
|
if "llm_chain" in config:
|
|
@@ -77,11 +85,12 @@ def load_agent_from_config(
|
|
|
77
85
|
elif "llm_chain_path" in config:
|
|
78
86
|
config["llm_chain"] = load_chain(config.pop("llm_chain_path"))
|
|
79
87
|
else:
|
|
80
|
-
|
|
88
|
+
msg = "One of `llm_chain` and `llm_chain_path` should be specified."
|
|
89
|
+
raise ValueError(msg)
|
|
81
90
|
if "output_parser" in config:
|
|
82
91
|
logger.warning(
|
|
83
92
|
"Currently loading output parsers on agent is not supported, "
|
|
84
|
-
"will just use the default one."
|
|
93
|
+
"will just use the default one.",
|
|
85
94
|
)
|
|
86
95
|
del config["output_parser"]
|
|
87
96
|
|
|
@@ -91,7 +100,8 @@ def load_agent_from_config(
|
|
|
91
100
|
|
|
92
101
|
@deprecated("0.1.0", removal="1.0")
|
|
93
102
|
def load_agent(
|
|
94
|
-
path: Union[str, Path],
|
|
103
|
+
path: Union[str, Path],
|
|
104
|
+
**kwargs: Any,
|
|
95
105
|
) -> Union[BaseSingleActionAgent, BaseMultiActionAgent]:
|
|
96
106
|
"""Unified method for loading an agent from LangChainHub or local fs.
|
|
97
107
|
|
|
@@ -107,32 +117,32 @@ def load_agent(
|
|
|
107
117
|
Hub is attempted.
|
|
108
118
|
"""
|
|
109
119
|
if isinstance(path, str) and path.startswith("lc://"):
|
|
110
|
-
|
|
120
|
+
msg = (
|
|
111
121
|
"Loading from the deprecated github-based Hub is no longer supported. "
|
|
112
122
|
"Please use the new LangChain Hub at https://smith.langchain.com/hub "
|
|
113
123
|
"instead."
|
|
114
124
|
)
|
|
125
|
+
raise RuntimeError(msg)
|
|
115
126
|
return _load_agent_from_file(path, **kwargs)
|
|
116
127
|
|
|
117
128
|
|
|
118
129
|
def _load_agent_from_file(
|
|
119
|
-
file: Union[str, Path],
|
|
130
|
+
file: Union[str, Path],
|
|
131
|
+
**kwargs: Any,
|
|
120
132
|
) -> Union[BaseSingleActionAgent, BaseMultiActionAgent]:
|
|
121
133
|
"""Load agent from file."""
|
|
122
134
|
valid_suffixes = {"json", "yaml"}
|
|
123
135
|
# Convert file to Path object.
|
|
124
|
-
if isinstance(file, str)
|
|
125
|
-
file_path = Path(file)
|
|
126
|
-
else:
|
|
127
|
-
file_path = file
|
|
136
|
+
file_path = Path(file) if isinstance(file, str) else file
|
|
128
137
|
# Load from either json or yaml.
|
|
129
138
|
if file_path.suffix[1:] == "json":
|
|
130
|
-
with open(
|
|
139
|
+
with file_path.open() as f:
|
|
131
140
|
config = json.load(f)
|
|
132
141
|
elif file_path.suffix[1:] == "yaml":
|
|
133
|
-
with open(
|
|
142
|
+
with file_path.open() as f:
|
|
134
143
|
config = yaml.safe_load(f)
|
|
135
144
|
else:
|
|
136
|
-
|
|
145
|
+
msg = f"Unsupported file type, must be one of {valid_suffixes}."
|
|
146
|
+
raise ValueError(msg)
|
|
137
147
|
# Load the agent from the config now.
|
|
138
148
|
return load_agent_from_config(config, **kwargs)
|
langchain/agents/mrkl/base.py
CHANGED
|
@@ -104,7 +104,7 @@ class ZeroShotAgent(Agent):
|
|
|
104
104
|
tool_strings = render_text_description(list(tools))
|
|
105
105
|
tool_names = ", ".join([tool.name for tool in tools])
|
|
106
106
|
format_instructions = format_instructions.format(tool_names=tool_names)
|
|
107
|
-
template = "\n\n
|
|
107
|
+
template = f"{prefix}\n\n{tool_strings}\n\n{format_instructions}\n\n{suffix}"
|
|
108
108
|
if input_variables:
|
|
109
109
|
return PromptTemplate(template=template, input_variables=input_variables)
|
|
110
110
|
return PromptTemplate.from_template(template)
|
|
@@ -162,15 +162,17 @@ class ZeroShotAgent(Agent):
|
|
|
162
162
|
def _validate_tools(cls, tools: Sequence[BaseTool]) -> None:
|
|
163
163
|
validate_tools_single_input(cls.__name__, tools)
|
|
164
164
|
if len(tools) == 0:
|
|
165
|
-
|
|
165
|
+
msg = (
|
|
166
166
|
f"Got no tools for {cls.__name__}. At least one tool must be provided."
|
|
167
167
|
)
|
|
168
|
+
raise ValueError(msg)
|
|
168
169
|
for tool in tools:
|
|
169
170
|
if tool.description is None:
|
|
170
|
-
|
|
171
|
+
msg = (
|
|
171
172
|
f"Got a tool {tool.name} without a description. For this agent, "
|
|
172
173
|
f"a description must always be provided."
|
|
173
174
|
)
|
|
175
|
+
raise ValueError(msg)
|
|
174
176
|
super()._validate_tools(tools)
|
|
175
177
|
|
|
176
178
|
|
|
@@ -184,7 +186,10 @@ class MRKLChain(AgentExecutor):
|
|
|
184
186
|
|
|
185
187
|
@classmethod
|
|
186
188
|
def from_chains(
|
|
187
|
-
cls,
|
|
189
|
+
cls,
|
|
190
|
+
llm: BaseLanguageModel,
|
|
191
|
+
chains: list[ChainConfig],
|
|
192
|
+
**kwargs: Any,
|
|
188
193
|
) -> AgentExecutor:
|
|
189
194
|
"""User-friendly way to initialize the MRKL chain.
|
|
190
195
|
|
|
@@ -53,12 +53,11 @@ class MRKLOutputParser(AgentOutputParser):
|
|
|
53
53
|
start_index = text.find(FINAL_ANSWER_ACTION) + len(FINAL_ANSWER_ACTION)
|
|
54
54
|
end_index = text.find("\n\n", start_index)
|
|
55
55
|
return AgentFinish(
|
|
56
|
-
{"output": text[start_index:end_index].strip()},
|
|
57
|
-
|
|
58
|
-
else:
|
|
59
|
-
raise OutputParserException(
|
|
60
|
-
f"{FINAL_ANSWER_AND_PARSABLE_ACTION_ERROR_MESSAGE}: {text}"
|
|
56
|
+
{"output": text[start_index:end_index].strip()},
|
|
57
|
+
text[:end_index],
|
|
61
58
|
)
|
|
59
|
+
msg = f"{FINAL_ANSWER_AND_PARSABLE_ACTION_ERROR_MESSAGE}: {text}"
|
|
60
|
+
raise OutputParserException(msg)
|
|
62
61
|
|
|
63
62
|
if action_match:
|
|
64
63
|
action = action_match.group(1).strip()
|
|
@@ -70,29 +69,34 @@ class MRKLOutputParser(AgentOutputParser):
|
|
|
70
69
|
|
|
71
70
|
return AgentAction(action, tool_input, text)
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
if includes_answer:
|
|
74
73
|
return AgentFinish(
|
|
75
|
-
{"output": text.split(FINAL_ANSWER_ACTION)[-1].strip()},
|
|
74
|
+
{"output": text.split(FINAL_ANSWER_ACTION)[-1].strip()},
|
|
75
|
+
text,
|
|
76
76
|
)
|
|
77
77
|
|
|
78
78
|
if not re.search(r"Action\s*\d*\s*:[\s]*(.*?)", text, re.DOTALL):
|
|
79
|
+
msg = f"Could not parse LLM output: `{text}`"
|
|
79
80
|
raise OutputParserException(
|
|
80
|
-
|
|
81
|
+
msg,
|
|
81
82
|
observation=MISSING_ACTION_AFTER_THOUGHT_ERROR_MESSAGE,
|
|
82
83
|
llm_output=text,
|
|
83
84
|
send_to_llm=True,
|
|
84
85
|
)
|
|
85
|
-
|
|
86
|
-
r"[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)",
|
|
86
|
+
if not re.search(
|
|
87
|
+
r"[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)",
|
|
88
|
+
text,
|
|
89
|
+
re.DOTALL,
|
|
87
90
|
):
|
|
91
|
+
msg = f"Could not parse LLM output: `{text}`"
|
|
88
92
|
raise OutputParserException(
|
|
89
|
-
|
|
93
|
+
msg,
|
|
90
94
|
observation=MISSING_ACTION_INPUT_AFTER_ACTION_ERROR_MESSAGE,
|
|
91
95
|
llm_output=text,
|
|
92
96
|
send_to_llm=True,
|
|
93
97
|
)
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
msg = f"Could not parse LLM output: `{text}`"
|
|
99
|
+
raise OutputParserException(msg)
|
|
96
100
|
|
|
97
101
|
@property
|
|
98
102
|
def _type(self) -> str:
|
langchain/agents/mrkl/prompt.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#
|
|
2
|
-
PREFIX = """Answer the following questions as best you can. You have access to the following tools:"""
|
|
1
|
+
PREFIX = """Answer the following questions as best you can. You have access to the following tools:""" # noqa: E501
|
|
3
2
|
FORMAT_INSTRUCTIONS = """Use the following format:
|
|
4
3
|
|
|
5
4
|
Question: the input question you must answer
|