langchain 0.3.25__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 +7 -7
- 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 +18 -9
- 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 +47 -38
- langchain/agents/openai_functions_multi_agent/base.py +40 -27
- langchain/agents/openai_tools/base.py +8 -8
- langchain/agents/output_parsers/__init__.py +3 -3
- langchain/agents/output_parsers/json.py +7 -7
- 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 +6 -6
- 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/base.py +2 -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 +89 -55
- langchain/chains/chat_vector_db/prompts.py +2 -3
- langchain/chains/combine_documents/__init__.py +1 -1
- langchain/chains/combine_documents/base.py +24 -11
- langchain/chains/combine_documents/map_reduce.py +39 -31
- langchain/chains/combine_documents/map_rerank.py +34 -21
- 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 +6 -7
- 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 +170 -153
- 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 +117 -26
- 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 +24 -24
- langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
- langchain/evaluation/comparison/__init__.py +1 -1
- langchain/evaluation/comparison/eval_chain.py +21 -14
- langchain/evaluation/comparison/prompt.py +1 -2
- langchain/evaluation/criteria/__init__.py +1 -1
- langchain/evaluation/criteria/eval_chain.py +21 -12
- langchain/evaluation/criteria/prompt.py +2 -3
- langchain/evaluation/embedding_distance/base.py +24 -21
- 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 +13 -6
- 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 +23 -16
- langchain/evaluation/scoring/prompt.py +0 -1
- langchain/evaluation/string_distance/base.py +15 -10
- 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 +11 -8
- 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 +13 -6
- 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 +10 -9
- 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 +15 -13
- langchain/retrievers/docarray.py +1 -1
- langchain/retrievers/document_compressors/__init__.py +7 -5
- langchain/retrievers/document_compressors/base.py +13 -7
- langchain/retrievers/document_compressors/chain_extract.py +4 -5
- langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
- langchain/retrievers/document_compressors/chain_filter.py +11 -12
- langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
- langchain/retrievers/document_compressors/cohere_rerank.py +17 -19
- langchain/retrievers/document_compressors/embeddings_filter.py +23 -23
- langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
- langchain/retrievers/document_compressors/listwise_rerank.py +11 -6
- 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 -119
- langchain/retrievers/time_weighted_retriever.py +18 -7
- langchain/retrievers/zilliz.py +1 -1
- langchain/runnables/hub.py +2 -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 +3 -2
- 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 +181 -129
- 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.25.dist-info → langchain-0.3.27.dist-info}/METADATA +5 -5
- {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/RECORD +582 -582
- {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
- {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
- {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
|
@@ -60,9 +60,8 @@ class ElasticsearchDatabaseChain(Chain):
|
|
|
60
60
|
@model_validator(mode="after")
|
|
61
61
|
def validate_indices(self) -> Self:
|
|
62
62
|
if self.include_indices and self.ignore_indices:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
)
|
|
63
|
+
msg = "Cannot specify both 'include_indices' and 'ignore_indices'."
|
|
64
|
+
raise ValueError(msg)
|
|
66
65
|
return self
|
|
67
66
|
|
|
68
67
|
@property
|
|
@@ -81,8 +80,7 @@ class ElasticsearchDatabaseChain(Chain):
|
|
|
81
80
|
"""
|
|
82
81
|
if not self.return_intermediate_steps:
|
|
83
82
|
return [self.output_key]
|
|
84
|
-
|
|
85
|
-
return [self.output_key, INTERMEDIATE_STEPS_KEY]
|
|
83
|
+
return [self.output_key, INTERMEDIATE_STEPS_KEY]
|
|
86
84
|
|
|
87
85
|
def _list_indices(self) -> list[str]:
|
|
88
86
|
all_indices = [
|
|
@@ -111,7 +109,7 @@ class ElasticsearchDatabaseChain(Chain):
|
|
|
111
109
|
[
|
|
112
110
|
"Mapping for index {}:\n{}".format(index, mappings[index]["mappings"])
|
|
113
111
|
for index in mappings
|
|
114
|
-
]
|
|
112
|
+
],
|
|
115
113
|
)
|
|
116
114
|
|
|
117
115
|
def _search(self, indices: list[str], query: str) -> str:
|
|
@@ -144,7 +142,7 @@ class ElasticsearchDatabaseChain(Chain):
|
|
|
144
142
|
|
|
145
143
|
_run_manager.on_text(es_cmd, color="green", verbose=self.verbose)
|
|
146
144
|
intermediate_steps.append(
|
|
147
|
-
es_cmd
|
|
145
|
+
es_cmd,
|
|
148
146
|
) # output: elasticsearch dsl generation (no checker)
|
|
149
147
|
intermediate_steps.append({"es_cmd": es_cmd}) # input: ES search
|
|
150
148
|
result = self._search(indices=indices, query=es_cmd)
|
|
@@ -166,12 +164,13 @@ class ElasticsearchDatabaseChain(Chain):
|
|
|
166
164
|
chain_result: dict[str, Any] = {self.output_key: final_result}
|
|
167
165
|
if self.return_intermediate_steps:
|
|
168
166
|
chain_result[INTERMEDIATE_STEPS_KEY] = intermediate_steps
|
|
169
|
-
return chain_result
|
|
170
167
|
except Exception as exc:
|
|
171
168
|
# Append intermediate steps to exception, to aid in logging and later
|
|
172
169
|
# improvement of few shot prompt seeds
|
|
173
170
|
exc.intermediate_steps = intermediate_steps # type: ignore[attr-defined]
|
|
174
|
-
raise
|
|
171
|
+
raise
|
|
172
|
+
|
|
173
|
+
return chain_result
|
|
175
174
|
|
|
176
175
|
@property
|
|
177
176
|
def _chain_type(self) -> str:
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
from langchain_core.prompts.prompt import PromptTemplate
|
|
3
2
|
|
|
4
3
|
PROMPT_SUFFIX = """Only use the following Elasticsearch indices:
|
|
@@ -17,7 +16,7 @@ Use the following format:
|
|
|
17
16
|
|
|
18
17
|
Question: Question here
|
|
19
18
|
ESQuery: Elasticsearch Query formatted as json
|
|
20
|
-
"""
|
|
19
|
+
""" # noqa: E501
|
|
21
20
|
|
|
22
21
|
DSL_PROMPT = PromptTemplate.from_template(DEFAULT_DSL_TEMPLATE + PROMPT_SUFFIX)
|
|
23
22
|
|
|
@@ -31,6 +30,6 @@ Answer: Final answer here
|
|
|
31
30
|
|
|
32
31
|
Question: {input}
|
|
33
32
|
Data: {data}
|
|
34
|
-
Answer:"""
|
|
33
|
+
Answer:""" # noqa: E501
|
|
35
34
|
|
|
36
35
|
ANSWER_PROMPT = PromptTemplate.from_template(DEFAULT_ANSWER_TEMPLATE)
|
|
@@ -36,9 +36,9 @@ def __getattr__(name: str) -> Any:
|
|
|
36
36
|
|
|
37
37
|
__all__ = [
|
|
38
38
|
"convert_to_ernie_function",
|
|
39
|
-
"create_structured_output_chain",
|
|
40
39
|
"create_ernie_fn_chain",
|
|
41
|
-
"create_structured_output_runnable",
|
|
42
40
|
"create_ernie_fn_runnable",
|
|
41
|
+
"create_structured_output_chain",
|
|
42
|
+
"create_structured_output_runnable",
|
|
43
43
|
"get_ernie_output_parser",
|
|
44
44
|
]
|
|
@@ -7,7 +7,9 @@ TEST_GEN_TEMPLATE_SUFFIX = "Add another example."
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def generate_example(
|
|
10
|
-
examples: list[dict],
|
|
10
|
+
examples: list[dict],
|
|
11
|
+
llm: BaseLanguageModel,
|
|
12
|
+
prompt_template: PromptTemplate,
|
|
11
13
|
) -> str:
|
|
12
14
|
"""Return another example given a list of examples for a prompt."""
|
|
13
15
|
prompt = FewShotPromptTemplate(
|
langchain/chains/flare/base.py
CHANGED
|
@@ -69,7 +69,8 @@ def _low_confidence_spans(
|
|
|
69
69
|
"NumPy not found in the current Python environment. FlareChain will use a "
|
|
70
70
|
"pure Python implementation for internal calculations, which may "
|
|
71
71
|
"significantly impact performance, especially for large datasets. For "
|
|
72
|
-
"optimal speed and efficiency, consider installing NumPy: pip install
|
|
72
|
+
"optimal speed and efficiency, consider installing NumPy: pip install "
|
|
73
|
+
"numpy",
|
|
73
74
|
)
|
|
74
75
|
import math
|
|
75
76
|
|
|
@@ -171,7 +172,8 @@ class FlareChain(Chain):
|
|
|
171
172
|
callbacks = _run_manager.get_child()
|
|
172
173
|
if isinstance(self.question_generator_chain, LLMChain):
|
|
173
174
|
question_gen_outputs = self.question_generator_chain.apply(
|
|
174
|
-
question_gen_inputs,
|
|
175
|
+
question_gen_inputs,
|
|
176
|
+
callbacks=callbacks,
|
|
175
177
|
)
|
|
176
178
|
questions = [
|
|
177
179
|
output[self.question_generator_chain.output_keys[0]]
|
|
@@ -179,10 +181,13 @@ class FlareChain(Chain):
|
|
|
179
181
|
]
|
|
180
182
|
else:
|
|
181
183
|
questions = self.question_generator_chain.batch(
|
|
182
|
-
question_gen_inputs,
|
|
184
|
+
question_gen_inputs,
|
|
185
|
+
config={"callbacks": callbacks},
|
|
183
186
|
)
|
|
184
187
|
_run_manager.on_text(
|
|
185
|
-
f"Generated Questions: {questions}",
|
|
188
|
+
f"Generated Questions: {questions}",
|
|
189
|
+
color="yellow",
|
|
190
|
+
end="\n",
|
|
186
191
|
)
|
|
187
192
|
return self._do_generation(questions, user_input, response, _run_manager)
|
|
188
193
|
|
|
@@ -197,15 +202,18 @@ class FlareChain(Chain):
|
|
|
197
202
|
|
|
198
203
|
response = ""
|
|
199
204
|
|
|
200
|
-
for
|
|
205
|
+
for _i in range(self.max_iter):
|
|
201
206
|
_run_manager.on_text(
|
|
202
|
-
f"Current Response: {response}",
|
|
207
|
+
f"Current Response: {response}",
|
|
208
|
+
color="blue",
|
|
209
|
+
end="\n",
|
|
203
210
|
)
|
|
204
211
|
_input = {"user_input": user_input, "context": "", "response": response}
|
|
205
212
|
tokens, log_probs = _extract_tokens_and_log_probs(
|
|
206
213
|
self.response_chain.invoke(
|
|
207
|
-
_input,
|
|
208
|
-
|
|
214
|
+
_input,
|
|
215
|
+
{"callbacks": _run_manager.get_child()},
|
|
216
|
+
),
|
|
209
217
|
)
|
|
210
218
|
low_confidence_spans = _low_confidence_spans(
|
|
211
219
|
tokens,
|
|
@@ -236,7 +244,10 @@ class FlareChain(Chain):
|
|
|
236
244
|
|
|
237
245
|
@classmethod
|
|
238
246
|
def from_llm(
|
|
239
|
-
cls,
|
|
247
|
+
cls,
|
|
248
|
+
llm: BaseLanguageModel,
|
|
249
|
+
max_generation_len: int = 32,
|
|
250
|
+
**kwargs: Any,
|
|
240
251
|
) -> FlareChain:
|
|
241
252
|
"""Creates a FlareChain from a language model.
|
|
242
253
|
|
|
@@ -250,14 +261,17 @@ class FlareChain(Chain):
|
|
|
250
261
|
"""
|
|
251
262
|
try:
|
|
252
263
|
from langchain_openai import ChatOpenAI
|
|
253
|
-
except ImportError:
|
|
254
|
-
|
|
264
|
+
except ImportError as e:
|
|
265
|
+
msg = (
|
|
255
266
|
"OpenAI is required for FlareChain. "
|
|
256
267
|
"Please install langchain-openai."
|
|
257
268
|
"pip install langchain-openai"
|
|
258
269
|
)
|
|
270
|
+
raise ImportError(msg) from e
|
|
259
271
|
llm = ChatOpenAI(
|
|
260
|
-
max_completion_tokens=max_generation_len,
|
|
272
|
+
max_completion_tokens=max_generation_len,
|
|
273
|
+
logprobs=True,
|
|
274
|
+
temperature=0,
|
|
261
275
|
)
|
|
262
276
|
response_chain = PROMPT | llm
|
|
263
277
|
question_gen_chain = QUESTION_GENERATOR_PROMPT | llm | StrOutputParser()
|
|
@@ -74,7 +74,9 @@ __all__ = [
|
|
|
74
74
|
"AQL_FIX_TEMPLATE",
|
|
75
75
|
"AQL_GENERATION_TEMPLATE",
|
|
76
76
|
"AQL_QA_TEMPLATE",
|
|
77
|
+
"CYPHER_GENERATION_PROMPT",
|
|
77
78
|
"CYPHER_GENERATION_TEMPLATE",
|
|
79
|
+
"CYPHER_QA_PROMPT",
|
|
78
80
|
"CYPHER_QA_TEMPLATE",
|
|
79
81
|
"GRAPHDB_QA_TEMPLATE",
|
|
80
82
|
"GRAPHDB_SPARQL_FIX_TEMPLATE",
|
|
@@ -91,6 +93,4 @@ __all__ = [
|
|
|
91
93
|
"SPARQL_GENERATION_UPDATE_TEMPLATE",
|
|
92
94
|
"SPARQL_INTENT_TEMPLATE",
|
|
93
95
|
"SPARQL_QA_TEMPLATE",
|
|
94
|
-
"CYPHER_QA_PROMPT",
|
|
95
|
-
"CYPHER_GENERATION_PROMPT",
|
|
96
96
|
]
|
|
@@ -49,10 +49,11 @@ def create_history_aware_retriever(
|
|
|
49
49
|
|
|
50
50
|
"""
|
|
51
51
|
if "input" not in prompt.input_variables:
|
|
52
|
-
|
|
52
|
+
msg = (
|
|
53
53
|
"Expected `input` to be a prompt variable, "
|
|
54
54
|
f"but got {prompt.input_variables}"
|
|
55
55
|
)
|
|
56
|
+
raise ValueError(msg)
|
|
56
57
|
|
|
57
58
|
retrieve_documents: RetrieverOutputLike = RunnableBranch(
|
|
58
59
|
(
|
langchain/chains/hyde/base.py
CHANGED
|
@@ -47,8 +47,7 @@ class HypotheticalDocumentEmbedder(Chain, Embeddings):
|
|
|
47
47
|
"""Output keys for Hyde's LLM chain."""
|
|
48
48
|
if isinstance(self.llm_chain, LLMChain):
|
|
49
49
|
return self.llm_chain.output_keys
|
|
50
|
-
|
|
51
|
-
return ["text"]
|
|
50
|
+
return ["text"]
|
|
52
51
|
|
|
53
52
|
def embed_documents(self, texts: list[str]) -> list[list[float]]:
|
|
54
53
|
"""Call the base embeddings."""
|
|
@@ -66,7 +65,7 @@ class HypotheticalDocumentEmbedder(Chain, Embeddings):
|
|
|
66
65
|
"HypotheticalDocumentEmbedder will use a pure Python implementation "
|
|
67
66
|
"for internal calculations, which may significantly impact "
|
|
68
67
|
"performance, especially for large datasets. For optimal speed and "
|
|
69
|
-
"efficiency, consider installing NumPy: pip install numpy"
|
|
68
|
+
"efficiency, consider installing NumPy: pip install numpy",
|
|
70
69
|
)
|
|
71
70
|
if not embeddings:
|
|
72
71
|
return []
|
|
@@ -92,7 +91,8 @@ class HypotheticalDocumentEmbedder(Chain, Embeddings):
|
|
|
92
91
|
"""Call the internal llm chain."""
|
|
93
92
|
_run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
|
|
94
93
|
return self.llm_chain.invoke(
|
|
95
|
-
inputs,
|
|
94
|
+
inputs,
|
|
95
|
+
config={"callbacks": _run_manager.get_child()},
|
|
96
96
|
)
|
|
97
97
|
|
|
98
98
|
@classmethod
|
|
@@ -110,10 +110,11 @@ class HypotheticalDocumentEmbedder(Chain, Embeddings):
|
|
|
110
110
|
elif prompt_key is not None and prompt_key in PROMPT_MAP:
|
|
111
111
|
prompt = PROMPT_MAP[prompt_key]
|
|
112
112
|
else:
|
|
113
|
-
|
|
113
|
+
msg = (
|
|
114
114
|
f"Must specify prompt_key if custom_prompt not provided. Should be one "
|
|
115
115
|
f"of {list(PROMPT_MAP.keys())}."
|
|
116
116
|
)
|
|
117
|
+
raise ValueError(msg)
|
|
117
118
|
|
|
118
119
|
llm_chain = prompt | llm | StrOutputParser()
|
|
119
120
|
return cls(base_embeddings=base_embeddings, llm_chain=llm_chain, **kwargs)
|
langchain/chains/hyde/prompts.py
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
from langchain_core.prompts.prompt import PromptTemplate
|
|
3
2
|
|
|
4
|
-
web_search_template = """Please write a passage to answer the question
|
|
3
|
+
web_search_template = """Please write a passage to answer the question
|
|
5
4
|
Question: {QUESTION}
|
|
6
5
|
Passage:"""
|
|
7
6
|
web_search = PromptTemplate(template=web_search_template, input_variables=["QUESTION"])
|
|
8
|
-
sci_fact_template = """Please write a scientific paper passage to support/refute the claim
|
|
7
|
+
sci_fact_template = """Please write a scientific paper passage to support/refute the claim
|
|
9
8
|
Claim: {Claim}
|
|
10
|
-
Passage:"""
|
|
9
|
+
Passage:""" # noqa: E501
|
|
11
10
|
sci_fact = PromptTemplate(template=sci_fact_template, input_variables=["Claim"])
|
|
12
|
-
arguana_template = """Please write a counter argument for the passage
|
|
11
|
+
arguana_template = """Please write a counter argument for the passage
|
|
13
12
|
Passage: {PASSAGE}
|
|
14
13
|
Counter Argument:"""
|
|
15
14
|
arguana = PromptTemplate(template=arguana_template, input_variables=["PASSAGE"])
|
|
@@ -33,7 +32,7 @@ Passage:"""
|
|
|
33
32
|
trec_news = PromptTemplate(template=trec_news_template, input_variables=["TOPIC"])
|
|
34
33
|
mr_tydi_template = """Please write a passage in Swahili/Korean/Japanese/Bengali to answer the question in detail.
|
|
35
34
|
Question: {QUESTION}
|
|
36
|
-
Passage:"""
|
|
35
|
+
Passage:""" # noqa: E501
|
|
37
36
|
mr_tydi = PromptTemplate(template=mr_tydi_template, input_variables=["QUESTION"])
|
|
38
37
|
PROMPT_MAP = {
|
|
39
38
|
"web_search": web_search,
|
langchain/chains/llm.py
CHANGED
|
@@ -82,13 +82,14 @@ class LLMChain(Chain):
|
|
|
82
82
|
prompt: BasePromptTemplate
|
|
83
83
|
"""Prompt object to use."""
|
|
84
84
|
llm: Union[
|
|
85
|
-
Runnable[LanguageModelInput, str],
|
|
85
|
+
Runnable[LanguageModelInput, str],
|
|
86
|
+
Runnable[LanguageModelInput, BaseMessage],
|
|
86
87
|
]
|
|
87
88
|
"""Language model to call."""
|
|
88
89
|
output_key: str = "text" #: :meta private:
|
|
89
90
|
output_parser: BaseLLMOutputParser = Field(default_factory=StrOutputParser)
|
|
90
91
|
"""Output parser to use.
|
|
91
|
-
Defaults to one that takes the most likely string but does not change it
|
|
92
|
+
Defaults to one that takes the most likely string but does not change it
|
|
92
93
|
otherwise."""
|
|
93
94
|
return_final_only: bool = True
|
|
94
95
|
"""Whether to return only the final parsed result. Defaults to True.
|
|
@@ -116,8 +117,7 @@ class LLMChain(Chain):
|
|
|
116
117
|
"""
|
|
117
118
|
if self.return_final_only:
|
|
118
119
|
return [self.output_key]
|
|
119
|
-
|
|
120
|
-
return [self.output_key, "full_generation"]
|
|
120
|
+
return [self.output_key, "full_generation"]
|
|
121
121
|
|
|
122
122
|
def _call(
|
|
123
123
|
self,
|
|
@@ -142,17 +142,17 @@ class LLMChain(Chain):
|
|
|
142
142
|
callbacks=callbacks,
|
|
143
143
|
**self.llm_kwargs,
|
|
144
144
|
)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
145
|
+
results = self.llm.bind(stop=stop, **self.llm_kwargs).batch(
|
|
146
|
+
cast(list, prompts),
|
|
147
|
+
{"callbacks": callbacks},
|
|
148
|
+
)
|
|
149
|
+
generations: list[list[Generation]] = []
|
|
150
|
+
for res in results:
|
|
151
|
+
if isinstance(res, BaseMessage):
|
|
152
|
+
generations.append([ChatGeneration(message=res)])
|
|
153
|
+
else:
|
|
154
|
+
generations.append([Generation(text=res)])
|
|
155
|
+
return LLMResult(generations=generations)
|
|
156
156
|
|
|
157
157
|
async def agenerate(
|
|
158
158
|
self,
|
|
@@ -169,17 +169,17 @@ class LLMChain(Chain):
|
|
|
169
169
|
callbacks=callbacks,
|
|
170
170
|
**self.llm_kwargs,
|
|
171
171
|
)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
172
|
+
results = await self.llm.bind(stop=stop, **self.llm_kwargs).abatch(
|
|
173
|
+
cast(list, prompts),
|
|
174
|
+
{"callbacks": callbacks},
|
|
175
|
+
)
|
|
176
|
+
generations: list[list[Generation]] = []
|
|
177
|
+
for res in results:
|
|
178
|
+
if isinstance(res, BaseMessage):
|
|
179
|
+
generations.append([ChatGeneration(message=res)])
|
|
180
|
+
else:
|
|
181
|
+
generations.append([Generation(text=res)])
|
|
182
|
+
return LLMResult(generations=generations)
|
|
183
183
|
|
|
184
184
|
def prep_prompts(
|
|
185
185
|
self,
|
|
@@ -201,9 +201,8 @@ class LLMChain(Chain):
|
|
|
201
201
|
if run_manager:
|
|
202
202
|
run_manager.on_text(_text, end="\n", verbose=self.verbose)
|
|
203
203
|
if "stop" in inputs and inputs["stop"] != stop:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
)
|
|
204
|
+
msg = "If `stop` is present in any inputs, should be present in all."
|
|
205
|
+
raise ValueError(msg)
|
|
207
206
|
prompts.append(prompt)
|
|
208
207
|
return prompts, stop
|
|
209
208
|
|
|
@@ -227,18 +226,21 @@ class LLMChain(Chain):
|
|
|
227
226
|
if run_manager:
|
|
228
227
|
await run_manager.on_text(_text, end="\n", verbose=self.verbose)
|
|
229
228
|
if "stop" in inputs and inputs["stop"] != stop:
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
)
|
|
229
|
+
msg = "If `stop` is present in any inputs, should be present in all."
|
|
230
|
+
raise ValueError(msg)
|
|
233
231
|
prompts.append(prompt)
|
|
234
232
|
return prompts, stop
|
|
235
233
|
|
|
236
234
|
def apply(
|
|
237
|
-
self,
|
|
235
|
+
self,
|
|
236
|
+
input_list: list[dict[str, Any]],
|
|
237
|
+
callbacks: Callbacks = None,
|
|
238
238
|
) -> list[dict[str, str]]:
|
|
239
239
|
"""Utilize the LLM generate method for speed gains."""
|
|
240
240
|
callback_manager = CallbackManager.configure(
|
|
241
|
-
callbacks,
|
|
241
|
+
callbacks,
|
|
242
|
+
self.callbacks,
|
|
243
|
+
self.verbose,
|
|
242
244
|
)
|
|
243
245
|
run_manager = callback_manager.on_chain_start(
|
|
244
246
|
None,
|
|
@@ -249,17 +251,21 @@ class LLMChain(Chain):
|
|
|
249
251
|
response = self.generate(input_list, run_manager=run_manager)
|
|
250
252
|
except BaseException as e:
|
|
251
253
|
run_manager.on_chain_error(e)
|
|
252
|
-
raise
|
|
254
|
+
raise
|
|
253
255
|
outputs = self.create_outputs(response)
|
|
254
256
|
run_manager.on_chain_end({"outputs": outputs})
|
|
255
257
|
return outputs
|
|
256
258
|
|
|
257
259
|
async def aapply(
|
|
258
|
-
self,
|
|
260
|
+
self,
|
|
261
|
+
input_list: list[dict[str, Any]],
|
|
262
|
+
callbacks: Callbacks = None,
|
|
259
263
|
) -> list[dict[str, str]]:
|
|
260
264
|
"""Utilize the LLM generate method for speed gains."""
|
|
261
265
|
callback_manager = AsyncCallbackManager.configure(
|
|
262
|
-
callbacks,
|
|
266
|
+
callbacks,
|
|
267
|
+
self.callbacks,
|
|
268
|
+
self.verbose,
|
|
263
269
|
)
|
|
264
270
|
run_manager = await callback_manager.on_chain_start(
|
|
265
271
|
None,
|
|
@@ -270,7 +276,7 @@ class LLMChain(Chain):
|
|
|
270
276
|
response = await self.agenerate(input_list, run_manager=run_manager)
|
|
271
277
|
except BaseException as e:
|
|
272
278
|
await run_manager.on_chain_error(e)
|
|
273
|
-
raise
|
|
279
|
+
raise
|
|
274
280
|
outputs = self.create_outputs(response)
|
|
275
281
|
await run_manager.on_chain_end({"outputs": outputs})
|
|
276
282
|
return outputs
|
|
@@ -336,62 +342,72 @@ class LLMChain(Chain):
|
|
|
336
342
|
return (await self.acall(kwargs, callbacks=callbacks))[self.output_key]
|
|
337
343
|
|
|
338
344
|
def predict_and_parse(
|
|
339
|
-
self,
|
|
345
|
+
self,
|
|
346
|
+
callbacks: Callbacks = None,
|
|
347
|
+
**kwargs: Any,
|
|
340
348
|
) -> Union[str, list[str], dict[str, Any]]:
|
|
341
349
|
"""Call predict and then parse the results."""
|
|
342
350
|
warnings.warn(
|
|
343
351
|
"The predict_and_parse method is deprecated, "
|
|
344
|
-
"instead pass an output parser directly to LLMChain."
|
|
352
|
+
"instead pass an output parser directly to LLMChain.",
|
|
353
|
+
stacklevel=2,
|
|
345
354
|
)
|
|
346
355
|
result = self.predict(callbacks=callbacks, **kwargs)
|
|
347
356
|
if self.prompt.output_parser is not None:
|
|
348
357
|
return self.prompt.output_parser.parse(result)
|
|
349
|
-
|
|
350
|
-
return result
|
|
358
|
+
return result
|
|
351
359
|
|
|
352
360
|
async def apredict_and_parse(
|
|
353
|
-
self,
|
|
361
|
+
self,
|
|
362
|
+
callbacks: Callbacks = None,
|
|
363
|
+
**kwargs: Any,
|
|
354
364
|
) -> Union[str, list[str], dict[str, str]]:
|
|
355
365
|
"""Call apredict and then parse the results."""
|
|
356
366
|
warnings.warn(
|
|
357
367
|
"The apredict_and_parse method is deprecated, "
|
|
358
|
-
"instead pass an output parser directly to LLMChain."
|
|
368
|
+
"instead pass an output parser directly to LLMChain.",
|
|
369
|
+
stacklevel=2,
|
|
359
370
|
)
|
|
360
371
|
result = await self.apredict(callbacks=callbacks, **kwargs)
|
|
361
372
|
if self.prompt.output_parser is not None:
|
|
362
373
|
return self.prompt.output_parser.parse(result)
|
|
363
|
-
|
|
364
|
-
return result
|
|
374
|
+
return result
|
|
365
375
|
|
|
366
376
|
def apply_and_parse(
|
|
367
|
-
self,
|
|
377
|
+
self,
|
|
378
|
+
input_list: list[dict[str, Any]],
|
|
379
|
+
callbacks: Callbacks = None,
|
|
368
380
|
) -> Sequence[Union[str, list[str], dict[str, str]]]:
|
|
369
381
|
"""Call apply and then parse the results."""
|
|
370
382
|
warnings.warn(
|
|
371
383
|
"The apply_and_parse method is deprecated, "
|
|
372
|
-
"instead pass an output parser directly to LLMChain."
|
|
384
|
+
"instead pass an output parser directly to LLMChain.",
|
|
385
|
+
stacklevel=2,
|
|
373
386
|
)
|
|
374
387
|
result = self.apply(input_list, callbacks=callbacks)
|
|
375
388
|
return self._parse_generation(result)
|
|
376
389
|
|
|
377
390
|
def _parse_generation(
|
|
378
|
-
self,
|
|
391
|
+
self,
|
|
392
|
+
generation: list[dict[str, str]],
|
|
379
393
|
) -> Sequence[Union[str, list[str], dict[str, str]]]:
|
|
380
394
|
if self.prompt.output_parser is not None:
|
|
381
395
|
return [
|
|
382
396
|
self.prompt.output_parser.parse(res[self.output_key])
|
|
383
397
|
for res in generation
|
|
384
398
|
]
|
|
385
|
-
|
|
386
|
-
return generation
|
|
399
|
+
return generation
|
|
387
400
|
|
|
388
401
|
async def aapply_and_parse(
|
|
389
|
-
self,
|
|
402
|
+
self,
|
|
403
|
+
input_list: list[dict[str, Any]],
|
|
404
|
+
callbacks: Callbacks = None,
|
|
390
405
|
) -> Sequence[Union[str, list[str], dict[str, str]]]:
|
|
391
406
|
"""Call apply and then parse the results."""
|
|
392
407
|
warnings.warn(
|
|
393
408
|
"The aapply_and_parse method is deprecated, "
|
|
394
|
-
"instead pass an output parser directly to LLMChain."
|
|
409
|
+
"instead pass an output parser directly to LLMChain.",
|
|
410
|
+
stacklevel=2,
|
|
395
411
|
)
|
|
396
412
|
result = await self.aapply(input_list, callbacks=callbacks)
|
|
397
413
|
return self._parse_generation(result)
|
|
@@ -413,14 +429,14 @@ class LLMChain(Chain):
|
|
|
413
429
|
def _get_language_model(llm_like: Runnable) -> BaseLanguageModel:
|
|
414
430
|
if isinstance(llm_like, BaseLanguageModel):
|
|
415
431
|
return llm_like
|
|
416
|
-
|
|
432
|
+
if isinstance(llm_like, RunnableBinding):
|
|
417
433
|
return _get_language_model(llm_like.bound)
|
|
418
|
-
|
|
434
|
+
if isinstance(llm_like, RunnableWithFallbacks):
|
|
419
435
|
return _get_language_model(llm_like.runnable)
|
|
420
|
-
|
|
436
|
+
if isinstance(llm_like, (RunnableBranch, DynamicRunnable)):
|
|
421
437
|
return _get_language_model(llm_like.default)
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
438
|
+
msg = (
|
|
439
|
+
f"Unable to extract BaseLanguageModel from llm_like object of type "
|
|
440
|
+
f"{type(llm_like)}"
|
|
441
|
+
)
|
|
442
|
+
raise ValueError(msg)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
def __getattr__(name: str = "") -> None:
|
|
2
2
|
"""Raise an error on import since is deprecated."""
|
|
3
|
-
|
|
3
|
+
msg = (
|
|
4
4
|
"This module has been moved to langchain-experimental. "
|
|
5
5
|
"For more details: https://github.com/langchain-ai/langchain/discussions/11352."
|
|
6
6
|
"To access this code, install it with `pip install langchain-experimental`."
|
|
7
7
|
"`from langchain_experimental.llm_bash.base "
|
|
8
8
|
"import LLMBashChain`"
|
|
9
9
|
)
|
|
10
|
+
raise AttributeError(msg)
|
|
@@ -55,13 +55,12 @@ def _load_question_to_checked_assertions_chain(
|
|
|
55
55
|
check_assertions_chain,
|
|
56
56
|
revised_answer_chain,
|
|
57
57
|
]
|
|
58
|
-
|
|
58
|
+
return SequentialChain(
|
|
59
59
|
chains=chains, # type: ignore[arg-type]
|
|
60
60
|
input_variables=["question"],
|
|
61
61
|
output_variables=["revised_statement"],
|
|
62
62
|
verbose=True,
|
|
63
63
|
)
|
|
64
|
-
return question_to_checked_assertions_chain
|
|
65
64
|
|
|
66
65
|
|
|
67
66
|
@deprecated(
|
|
@@ -112,7 +111,8 @@ class LLMCheckerChain(Chain):
|
|
|
112
111
|
warnings.warn(
|
|
113
112
|
"Directly instantiating an LLMCheckerChain with an llm is deprecated. "
|
|
114
113
|
"Please instantiate with question_to_checked_assertions_chain "
|
|
115
|
-
"or using the from_llm class method."
|
|
114
|
+
"or using the from_llm class method.",
|
|
115
|
+
stacklevel=5,
|
|
116
116
|
)
|
|
117
117
|
if (
|
|
118
118
|
"question_to_checked_assertions_chain" not in values
|
|
@@ -122,7 +122,8 @@ class LLMCheckerChain(Chain):
|
|
|
122
122
|
_load_question_to_checked_assertions_chain(
|
|
123
123
|
values["llm"],
|
|
124
124
|
values.get(
|
|
125
|
-
"create_draft_answer_prompt",
|
|
125
|
+
"create_draft_answer_prompt",
|
|
126
|
+
CREATE_DRAFT_ANSWER_PROMPT,
|
|
126
127
|
),
|
|
127
128
|
values.get("list_assertions_prompt", LIST_ASSERTIONS_PROMPT),
|
|
128
129
|
values.get("check_assertions_prompt", CHECK_ASSERTIONS_PROMPT),
|
|
@@ -159,7 +160,8 @@ class LLMCheckerChain(Chain):
|
|
|
159
160
|
question = inputs[self.input_key]
|
|
160
161
|
|
|
161
162
|
output = self.question_to_checked_assertions_chain(
|
|
162
|
-
{"question": question},
|
|
163
|
+
{"question": question},
|
|
164
|
+
callbacks=_run_manager.get_child(),
|
|
163
165
|
)
|
|
164
166
|
return {self.output_key: output["revised_statement"]}
|
|
165
167
|
|