langchain 0.3.26__py3-none-any.whl → 0.4.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langchain/__init__.py +110 -96
- langchain/_api/__init__.py +2 -2
- langchain/_api/deprecation.py +3 -3
- langchain/_api/module_import.py +51 -46
- langchain/_api/path.py +1 -1
- langchain/adapters/openai.py +8 -8
- langchain/agents/__init__.py +15 -12
- langchain/agents/agent.py +174 -151
- langchain/agents/agent_iterator.py +50 -26
- langchain/agents/agent_toolkits/__init__.py +7 -6
- langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
- langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
- langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
- langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
- langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
- langchain/agents/agent_toolkits/csv/__init__.py +4 -2
- langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
- langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
- langchain/agents/agent_toolkits/github/toolkit.py +9 -9
- langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
- langchain/agents/agent_toolkits/json/base.py +1 -1
- langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
- langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
- langchain/agents/agent_toolkits/openapi/base.py +1 -1
- langchain/agents/agent_toolkits/openapi/planner.py +2 -2
- langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
- langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
- langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
- langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
- langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
- langchain/agents/agent_toolkits/powerbi/base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
- langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/python/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
- langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/sql/prompt.py +1 -1
- langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/vectorstore/base.py +4 -2
- langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
- langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
- langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
- langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
- langchain/agents/agent_types.py +6 -6
- langchain/agents/chat/base.py +8 -12
- langchain/agents/chat/output_parser.py +9 -6
- langchain/agents/chat/prompt.py +3 -4
- langchain/agents/conversational/base.py +11 -5
- langchain/agents/conversational/output_parser.py +4 -2
- langchain/agents/conversational/prompt.py +2 -3
- langchain/agents/conversational_chat/base.py +9 -5
- langchain/agents/conversational_chat/output_parser.py +9 -11
- langchain/agents/conversational_chat/prompt.py +5 -6
- langchain/agents/format_scratchpad/__init__.py +3 -3
- langchain/agents/format_scratchpad/log_to_messages.py +1 -1
- langchain/agents/format_scratchpad/openai_functions.py +8 -6
- langchain/agents/format_scratchpad/tools.py +5 -3
- langchain/agents/format_scratchpad/xml.py +33 -2
- langchain/agents/initialize.py +17 -9
- langchain/agents/json_chat/base.py +19 -18
- langchain/agents/json_chat/prompt.py +2 -3
- langchain/agents/load_tools.py +2 -1
- langchain/agents/loading.py +28 -18
- langchain/agents/mrkl/base.py +11 -4
- langchain/agents/mrkl/output_parser.py +17 -13
- langchain/agents/mrkl/prompt.py +1 -2
- langchain/agents/openai_assistant/base.py +81 -71
- langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +2 -0
- langchain/agents/openai_functions_agent/base.py +47 -37
- langchain/agents/openai_functions_multi_agent/base.py +40 -27
- langchain/agents/openai_tools/base.py +9 -8
- langchain/agents/output_parsers/__init__.py +3 -3
- langchain/agents/output_parsers/json.py +8 -6
- langchain/agents/output_parsers/openai_functions.py +24 -9
- langchain/agents/output_parsers/openai_tools.py +16 -4
- langchain/agents/output_parsers/react_json_single_input.py +13 -5
- langchain/agents/output_parsers/react_single_input.py +18 -11
- langchain/agents/output_parsers/self_ask.py +5 -2
- langchain/agents/output_parsers/tools.py +32 -13
- langchain/agents/output_parsers/xml.py +102 -28
- langchain/agents/react/agent.py +5 -4
- langchain/agents/react/base.py +26 -17
- langchain/agents/react/output_parser.py +7 -6
- langchain/agents/react/textworld_prompt.py +0 -1
- langchain/agents/react/wiki_prompt.py +14 -15
- langchain/agents/schema.py +5 -2
- langchain/agents/self_ask_with_search/base.py +23 -15
- langchain/agents/self_ask_with_search/prompt.py +0 -1
- langchain/agents/structured_chat/base.py +19 -11
- langchain/agents/structured_chat/output_parser.py +29 -18
- langchain/agents/structured_chat/prompt.py +3 -4
- langchain/agents/tool_calling_agent/base.py +8 -6
- langchain/agents/tools.py +5 -2
- langchain/agents/utils.py +2 -3
- langchain/agents/xml/base.py +12 -6
- langchain/agents/xml/prompt.py +1 -2
- langchain/cache.py +12 -12
- langchain/callbacks/__init__.py +11 -11
- langchain/callbacks/aim_callback.py +2 -2
- langchain/callbacks/argilla_callback.py +1 -1
- langchain/callbacks/arize_callback.py +1 -1
- langchain/callbacks/arthur_callback.py +1 -1
- langchain/callbacks/base.py +7 -7
- langchain/callbacks/clearml_callback.py +1 -1
- langchain/callbacks/comet_ml_callback.py +1 -1
- langchain/callbacks/confident_callback.py +1 -1
- langchain/callbacks/context_callback.py +1 -1
- langchain/callbacks/flyte_callback.py +1 -1
- langchain/callbacks/human.py +2 -2
- langchain/callbacks/infino_callback.py +1 -1
- langchain/callbacks/labelstudio_callback.py +1 -1
- langchain/callbacks/llmonitor_callback.py +1 -1
- langchain/callbacks/manager.py +5 -5
- langchain/callbacks/mlflow_callback.py +2 -2
- langchain/callbacks/openai_info.py +1 -1
- langchain/callbacks/promptlayer_callback.py +1 -1
- langchain/callbacks/sagemaker_callback.py +1 -1
- langchain/callbacks/streaming_aiter.py +17 -3
- langchain/callbacks/streaming_aiter_final_only.py +16 -5
- langchain/callbacks/streaming_stdout_final_only.py +10 -3
- langchain/callbacks/streamlit/__init__.py +3 -2
- langchain/callbacks/streamlit/mutable_expander.py +1 -1
- langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
- langchain/callbacks/tracers/__init__.py +1 -1
- langchain/callbacks/tracers/comet.py +1 -1
- langchain/callbacks/tracers/evaluation.py +1 -1
- langchain/callbacks/tracers/log_stream.py +1 -1
- langchain/callbacks/tracers/logging.py +12 -1
- langchain/callbacks/tracers/stdout.py +1 -1
- langchain/callbacks/trubrics_callback.py +1 -1
- langchain/callbacks/utils.py +4 -4
- langchain/callbacks/wandb_callback.py +1 -1
- langchain/callbacks/whylabs_callback.py +1 -1
- langchain/chains/api/base.py +41 -23
- langchain/chains/api/news_docs.py +1 -2
- langchain/chains/api/open_meteo_docs.py +1 -2
- langchain/chains/api/openapi/requests_chain.py +1 -1
- langchain/chains/api/openapi/response_chain.py +1 -1
- langchain/chains/api/podcast_docs.py +1 -2
- langchain/chains/api/prompt.py +1 -2
- langchain/chains/api/tmdb_docs.py +1 -2
- langchain/chains/base.py +96 -56
- langchain/chains/chat_vector_db/prompts.py +2 -3
- langchain/chains/combine_documents/__init__.py +1 -1
- langchain/chains/combine_documents/base.py +30 -11
- langchain/chains/combine_documents/map_reduce.py +41 -30
- langchain/chains/combine_documents/map_rerank.py +39 -24
- langchain/chains/combine_documents/reduce.py +48 -26
- langchain/chains/combine_documents/refine.py +27 -17
- langchain/chains/combine_documents/stuff.py +24 -13
- langchain/chains/constitutional_ai/base.py +11 -4
- langchain/chains/constitutional_ai/principles.py +22 -25
- langchain/chains/constitutional_ai/prompts.py +25 -28
- langchain/chains/conversation/base.py +9 -4
- langchain/chains/conversation/memory.py +5 -5
- langchain/chains/conversation/prompt.py +5 -5
- langchain/chains/conversational_retrieval/base.py +108 -79
- langchain/chains/conversational_retrieval/prompts.py +2 -3
- langchain/chains/elasticsearch_database/base.py +10 -10
- langchain/chains/elasticsearch_database/prompts.py +2 -3
- langchain/chains/ernie_functions/__init__.py +2 -2
- langchain/chains/example_generator.py +3 -1
- langchain/chains/flare/base.py +28 -12
- langchain/chains/flare/prompts.py +2 -0
- langchain/chains/graph_qa/cypher.py +2 -2
- langchain/chains/graph_qa/falkordb.py +1 -1
- langchain/chains/graph_qa/gremlin.py +1 -1
- langchain/chains/graph_qa/neptune_sparql.py +1 -1
- langchain/chains/graph_qa/prompts.py +2 -2
- langchain/chains/history_aware_retriever.py +2 -1
- langchain/chains/hyde/base.py +6 -5
- langchain/chains/hyde/prompts.py +5 -6
- langchain/chains/llm.py +82 -61
- langchain/chains/llm_bash/__init__.py +3 -2
- langchain/chains/llm_checker/base.py +19 -6
- langchain/chains/llm_checker/prompt.py +3 -4
- langchain/chains/llm_math/base.py +25 -10
- langchain/chains/llm_math/prompt.py +1 -2
- langchain/chains/llm_summarization_checker/base.py +22 -7
- langchain/chains/llm_symbolic_math/__init__.py +3 -2
- langchain/chains/loading.py +155 -97
- langchain/chains/mapreduce.py +4 -3
- langchain/chains/moderation.py +11 -9
- langchain/chains/natbot/base.py +11 -9
- langchain/chains/natbot/crawler.py +102 -76
- langchain/chains/natbot/prompt.py +2 -3
- langchain/chains/openai_functions/__init__.py +7 -7
- langchain/chains/openai_functions/base.py +15 -10
- langchain/chains/openai_functions/citation_fuzzy_match.py +21 -11
- langchain/chains/openai_functions/extraction.py +19 -19
- langchain/chains/openai_functions/openapi.py +39 -35
- langchain/chains/openai_functions/qa_with_structure.py +22 -15
- langchain/chains/openai_functions/tagging.py +4 -4
- langchain/chains/openai_tools/extraction.py +7 -8
- langchain/chains/qa_generation/base.py +8 -3
- langchain/chains/qa_generation/prompt.py +5 -5
- langchain/chains/qa_with_sources/base.py +17 -6
- langchain/chains/qa_with_sources/loading.py +16 -8
- langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
- langchain/chains/qa_with_sources/refine_prompts.py +0 -1
- langchain/chains/qa_with_sources/retrieval.py +15 -6
- langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
- langchain/chains/qa_with_sources/vector_db.py +21 -8
- langchain/chains/query_constructor/base.py +37 -34
- langchain/chains/query_constructor/ir.py +4 -4
- langchain/chains/query_constructor/parser.py +101 -34
- langchain/chains/query_constructor/prompt.py +5 -6
- langchain/chains/question_answering/chain.py +21 -10
- langchain/chains/question_answering/map_reduce_prompt.py +14 -14
- langchain/chains/question_answering/map_rerank_prompt.py +3 -3
- langchain/chains/question_answering/refine_prompts.py +2 -5
- langchain/chains/question_answering/stuff_prompt.py +5 -5
- langchain/chains/retrieval.py +1 -3
- langchain/chains/retrieval_qa/base.py +38 -27
- langchain/chains/retrieval_qa/prompt.py +1 -2
- langchain/chains/router/__init__.py +3 -3
- langchain/chains/router/base.py +38 -22
- langchain/chains/router/embedding_router.py +15 -8
- langchain/chains/router/llm_router.py +23 -20
- langchain/chains/router/multi_prompt.py +5 -2
- langchain/chains/router/multi_retrieval_qa.py +28 -5
- langchain/chains/sequential.py +30 -18
- langchain/chains/sql_database/prompt.py +14 -16
- langchain/chains/sql_database/query.py +7 -5
- langchain/chains/structured_output/__init__.py +1 -1
- langchain/chains/structured_output/base.py +77 -67
- langchain/chains/summarize/chain.py +11 -5
- langchain/chains/summarize/map_reduce_prompt.py +0 -1
- langchain/chains/summarize/stuff_prompt.py +0 -1
- langchain/chains/transform.py +9 -6
- langchain/chat_loaders/facebook_messenger.py +1 -1
- langchain/chat_loaders/langsmith.py +1 -1
- langchain/chat_loaders/utils.py +3 -3
- langchain/chat_models/__init__.py +20 -19
- langchain/chat_models/anthropic.py +1 -1
- langchain/chat_models/azureml_endpoint.py +1 -1
- langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
- langchain/chat_models/base.py +213 -139
- langchain/chat_models/bedrock.py +1 -1
- langchain/chat_models/fake.py +1 -1
- langchain/chat_models/meta.py +1 -1
- langchain/chat_models/pai_eas_endpoint.py +1 -1
- langchain/chat_models/promptlayer_openai.py +1 -1
- langchain/chat_models/volcengine_maas.py +1 -1
- langchain/docstore/base.py +1 -1
- langchain/document_loaders/__init__.py +9 -9
- langchain/document_loaders/airbyte.py +3 -3
- langchain/document_loaders/assemblyai.py +1 -1
- langchain/document_loaders/azure_blob_storage_container.py +1 -1
- langchain/document_loaders/azure_blob_storage_file.py +1 -1
- langchain/document_loaders/baiducloud_bos_file.py +1 -1
- langchain/document_loaders/base.py +1 -1
- langchain/document_loaders/blob_loaders/__init__.py +1 -1
- langchain/document_loaders/blob_loaders/schema.py +1 -4
- langchain/document_loaders/blockchain.py +1 -1
- langchain/document_loaders/chatgpt.py +1 -1
- langchain/document_loaders/college_confidential.py +1 -1
- langchain/document_loaders/confluence.py +1 -1
- langchain/document_loaders/email.py +1 -1
- langchain/document_loaders/facebook_chat.py +1 -1
- langchain/document_loaders/markdown.py +1 -1
- langchain/document_loaders/notebook.py +1 -1
- langchain/document_loaders/org_mode.py +1 -1
- langchain/document_loaders/parsers/__init__.py +1 -1
- langchain/document_loaders/parsers/docai.py +1 -1
- langchain/document_loaders/parsers/generic.py +1 -1
- langchain/document_loaders/parsers/html/__init__.py +1 -1
- langchain/document_loaders/parsers/html/bs4.py +1 -1
- langchain/document_loaders/parsers/language/cobol.py +1 -1
- langchain/document_loaders/parsers/language/python.py +1 -1
- langchain/document_loaders/parsers/msword.py +1 -1
- langchain/document_loaders/parsers/pdf.py +5 -5
- langchain/document_loaders/parsers/registry.py +1 -1
- langchain/document_loaders/pdf.py +8 -8
- langchain/document_loaders/powerpoint.py +1 -1
- langchain/document_loaders/pyspark_dataframe.py +1 -1
- langchain/document_loaders/telegram.py +2 -2
- langchain/document_loaders/tencent_cos_directory.py +1 -1
- langchain/document_loaders/unstructured.py +5 -5
- langchain/document_loaders/url_playwright.py +1 -1
- langchain/document_loaders/whatsapp_chat.py +1 -1
- langchain/document_loaders/youtube.py +2 -2
- langchain/document_transformers/__init__.py +3 -3
- langchain/document_transformers/beautiful_soup_transformer.py +1 -1
- langchain/document_transformers/doctran_text_extract.py +1 -1
- langchain/document_transformers/doctran_text_qa.py +1 -1
- langchain/document_transformers/doctran_text_translate.py +1 -1
- langchain/document_transformers/embeddings_redundant_filter.py +3 -3
- langchain/document_transformers/google_translate.py +1 -1
- langchain/document_transformers/html2text.py +1 -1
- langchain/document_transformers/nuclia_text_transform.py +1 -1
- langchain/embeddings/__init__.py +5 -5
- langchain/embeddings/base.py +35 -24
- langchain/embeddings/cache.py +37 -32
- langchain/embeddings/fake.py +1 -1
- langchain/embeddings/huggingface.py +2 -2
- langchain/evaluation/__init__.py +22 -22
- langchain/evaluation/agents/trajectory_eval_chain.py +26 -25
- langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
- langchain/evaluation/comparison/__init__.py +1 -1
- langchain/evaluation/comparison/eval_chain.py +21 -13
- langchain/evaluation/comparison/prompt.py +1 -2
- langchain/evaluation/criteria/__init__.py +1 -1
- langchain/evaluation/criteria/eval_chain.py +23 -11
- langchain/evaluation/criteria/prompt.py +2 -3
- langchain/evaluation/embedding_distance/base.py +34 -20
- langchain/evaluation/exact_match/base.py +14 -1
- langchain/evaluation/loading.py +16 -11
- langchain/evaluation/parsing/base.py +20 -4
- langchain/evaluation/parsing/json_distance.py +24 -10
- langchain/evaluation/parsing/json_schema.py +13 -12
- langchain/evaluation/qa/__init__.py +1 -1
- langchain/evaluation/qa/eval_chain.py +20 -5
- langchain/evaluation/qa/eval_prompt.py +7 -8
- langchain/evaluation/qa/generate_chain.py +4 -1
- langchain/evaluation/qa/generate_prompt.py +2 -4
- langchain/evaluation/regex_match/base.py +9 -1
- langchain/evaluation/schema.py +38 -30
- langchain/evaluation/scoring/__init__.py +1 -1
- langchain/evaluation/scoring/eval_chain.py +23 -15
- langchain/evaluation/scoring/prompt.py +0 -1
- langchain/evaluation/string_distance/base.py +20 -9
- langchain/globals.py +12 -11
- langchain/graphs/__init__.py +6 -6
- langchain/graphs/graph_document.py +1 -1
- langchain/graphs/networkx_graph.py +2 -2
- langchain/hub.py +9 -11
- langchain/indexes/__init__.py +3 -3
- langchain/indexes/_sql_record_manager.py +63 -46
- langchain/indexes/prompts/entity_extraction.py +1 -2
- langchain/indexes/prompts/entity_summarization.py +1 -2
- langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
- langchain/indexes/vectorstore.py +35 -19
- langchain/llms/__init__.py +13 -13
- langchain/llms/ai21.py +1 -1
- langchain/llms/azureml_endpoint.py +4 -4
- langchain/llms/base.py +15 -7
- langchain/llms/bedrock.py +1 -1
- langchain/llms/cloudflare_workersai.py +1 -1
- langchain/llms/gradient_ai.py +1 -1
- langchain/llms/loading.py +1 -1
- langchain/llms/openai.py +1 -1
- langchain/llms/sagemaker_endpoint.py +1 -1
- langchain/load/dump.py +1 -1
- langchain/load/load.py +1 -1
- langchain/load/serializable.py +3 -3
- langchain/memory/__init__.py +3 -3
- langchain/memory/buffer.py +14 -7
- langchain/memory/buffer_window.py +2 -0
- langchain/memory/chat_memory.py +14 -8
- langchain/memory/chat_message_histories/__init__.py +1 -1
- langchain/memory/chat_message_histories/astradb.py +1 -1
- langchain/memory/chat_message_histories/cassandra.py +1 -1
- langchain/memory/chat_message_histories/cosmos_db.py +1 -1
- langchain/memory/chat_message_histories/dynamodb.py +1 -1
- langchain/memory/chat_message_histories/elasticsearch.py +1 -1
- langchain/memory/chat_message_histories/file.py +1 -1
- langchain/memory/chat_message_histories/firestore.py +1 -1
- langchain/memory/chat_message_histories/momento.py +1 -1
- langchain/memory/chat_message_histories/mongodb.py +1 -1
- langchain/memory/chat_message_histories/neo4j.py +1 -1
- langchain/memory/chat_message_histories/postgres.py +1 -1
- langchain/memory/chat_message_histories/redis.py +1 -1
- langchain/memory/chat_message_histories/rocksetdb.py +1 -1
- langchain/memory/chat_message_histories/singlestoredb.py +1 -1
- langchain/memory/chat_message_histories/streamlit.py +1 -1
- langchain/memory/chat_message_histories/upstash_redis.py +1 -1
- langchain/memory/chat_message_histories/xata.py +1 -1
- langchain/memory/chat_message_histories/zep.py +1 -1
- langchain/memory/combined.py +14 -13
- langchain/memory/entity.py +131 -61
- langchain/memory/prompt.py +10 -11
- langchain/memory/readonly.py +0 -2
- langchain/memory/simple.py +4 -3
- langchain/memory/summary.py +43 -11
- langchain/memory/summary_buffer.py +20 -8
- langchain/memory/token_buffer.py +2 -0
- langchain/memory/utils.py +3 -2
- langchain/memory/vectorstore.py +12 -5
- langchain/memory/vectorstore_token_buffer_memory.py +5 -5
- langchain/model_laboratory.py +12 -11
- langchain/output_parsers/__init__.py +4 -4
- langchain/output_parsers/boolean.py +7 -4
- langchain/output_parsers/combining.py +14 -7
- langchain/output_parsers/datetime.py +32 -31
- langchain/output_parsers/enum.py +10 -4
- langchain/output_parsers/fix.py +60 -53
- langchain/output_parsers/format_instructions.py +6 -8
- langchain/output_parsers/json.py +2 -2
- langchain/output_parsers/list.py +2 -2
- langchain/output_parsers/loading.py +9 -9
- langchain/output_parsers/openai_functions.py +3 -3
- langchain/output_parsers/openai_tools.py +1 -1
- langchain/output_parsers/pandas_dataframe.py +59 -48
- langchain/output_parsers/prompts.py +1 -2
- langchain/output_parsers/rail_parser.py +1 -1
- langchain/output_parsers/regex.py +9 -8
- langchain/output_parsers/regex_dict.py +7 -10
- langchain/output_parsers/retry.py +99 -80
- langchain/output_parsers/structured.py +21 -6
- langchain/output_parsers/yaml.py +19 -11
- langchain/prompts/__init__.py +5 -3
- langchain/prompts/base.py +5 -5
- langchain/prompts/chat.py +8 -8
- langchain/prompts/example_selector/__init__.py +3 -1
- langchain/prompts/example_selector/semantic_similarity.py +2 -2
- langchain/prompts/few_shot.py +1 -1
- langchain/prompts/loading.py +3 -3
- langchain/prompts/prompt.py +1 -1
- langchain/pydantic_v1/__init__.py +1 -1
- langchain/retrievers/__init__.py +5 -5
- langchain/retrievers/bedrock.py +2 -2
- langchain/retrievers/bm25.py +1 -1
- langchain/retrievers/contextual_compression.py +14 -8
- langchain/retrievers/docarray.py +1 -1
- langchain/retrievers/document_compressors/__init__.py +5 -4
- langchain/retrievers/document_compressors/base.py +12 -6
- langchain/retrievers/document_compressors/chain_extract.py +5 -3
- langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
- langchain/retrievers/document_compressors/chain_filter.py +9 -9
- langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
- langchain/retrievers/document_compressors/cohere_rerank.py +17 -15
- langchain/retrievers/document_compressors/cross_encoder_rerank.py +2 -0
- langchain/retrievers/document_compressors/embeddings_filter.py +24 -17
- langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
- langchain/retrievers/document_compressors/listwise_rerank.py +8 -5
- langchain/retrievers/ensemble.py +30 -27
- langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
- langchain/retrievers/google_vertex_ai_search.py +2 -2
- langchain/retrievers/kendra.py +10 -10
- langchain/retrievers/llama_index.py +1 -1
- langchain/retrievers/merger_retriever.py +11 -11
- langchain/retrievers/milvus.py +1 -1
- langchain/retrievers/multi_query.py +35 -27
- langchain/retrievers/multi_vector.py +24 -9
- langchain/retrievers/parent_document_retriever.py +33 -9
- langchain/retrievers/re_phraser.py +6 -5
- langchain/retrievers/self_query/base.py +157 -127
- langchain/retrievers/time_weighted_retriever.py +21 -7
- langchain/retrievers/zilliz.py +1 -1
- langchain/runnables/hub.py +12 -0
- langchain/runnables/openai_functions.py +12 -2
- langchain/schema/__init__.py +23 -23
- langchain/schema/cache.py +1 -1
- langchain/schema/callbacks/base.py +7 -7
- langchain/schema/callbacks/manager.py +19 -19
- langchain/schema/callbacks/tracers/base.py +1 -1
- langchain/schema/callbacks/tracers/evaluation.py +1 -1
- langchain/schema/callbacks/tracers/langchain.py +1 -1
- langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
- langchain/schema/callbacks/tracers/log_stream.py +1 -1
- langchain/schema/callbacks/tracers/schemas.py +8 -8
- langchain/schema/callbacks/tracers/stdout.py +3 -3
- langchain/schema/document.py +1 -1
- langchain/schema/language_model.py +2 -2
- langchain/schema/messages.py +12 -12
- langchain/schema/output.py +3 -3
- langchain/schema/output_parser.py +3 -3
- langchain/schema/runnable/__init__.py +3 -3
- langchain/schema/runnable/base.py +9 -9
- langchain/schema/runnable/config.py +5 -5
- langchain/schema/runnable/configurable.py +1 -1
- langchain/schema/runnable/history.py +1 -1
- langchain/schema/runnable/passthrough.py +1 -1
- langchain/schema/runnable/utils.py +16 -16
- langchain/schema/vectorstore.py +1 -1
- langchain/smith/__init__.py +2 -1
- langchain/smith/evaluation/__init__.py +2 -2
- langchain/smith/evaluation/config.py +9 -23
- langchain/smith/evaluation/name_generation.py +3 -3
- langchain/smith/evaluation/progress.py +22 -4
- langchain/smith/evaluation/runner_utils.py +416 -247
- langchain/smith/evaluation/string_run_evaluator.py +102 -68
- langchain/storage/__init__.py +2 -2
- langchain/storage/_lc_store.py +4 -2
- langchain/storage/encoder_backed.py +7 -2
- langchain/storage/file_system.py +19 -16
- langchain/storage/in_memory.py +1 -1
- langchain/storage/upstash_redis.py +1 -1
- langchain/text_splitter.py +15 -15
- langchain/tools/__init__.py +28 -26
- langchain/tools/ainetwork/app.py +1 -1
- langchain/tools/ainetwork/base.py +1 -1
- langchain/tools/ainetwork/owner.py +1 -1
- langchain/tools/ainetwork/rule.py +1 -1
- langchain/tools/ainetwork/transfer.py +1 -1
- langchain/tools/ainetwork/value.py +1 -1
- langchain/tools/amadeus/closest_airport.py +1 -1
- langchain/tools/amadeus/flight_search.py +1 -1
- langchain/tools/azure_cognitive_services/__init__.py +1 -1
- langchain/tools/base.py +4 -4
- langchain/tools/bearly/tool.py +1 -1
- langchain/tools/bing_search/__init__.py +1 -1
- langchain/tools/bing_search/tool.py +1 -1
- langchain/tools/dataforseo_api_search/__init__.py +1 -1
- langchain/tools/dataforseo_api_search/tool.py +1 -1
- langchain/tools/ddg_search/tool.py +1 -1
- langchain/tools/e2b_data_analysis/tool.py +2 -2
- langchain/tools/edenai/__init__.py +1 -1
- langchain/tools/file_management/__init__.py +1 -1
- langchain/tools/file_management/copy.py +1 -1
- langchain/tools/file_management/delete.py +1 -1
- langchain/tools/gmail/__init__.py +2 -2
- langchain/tools/gmail/get_message.py +1 -1
- langchain/tools/gmail/search.py +1 -1
- langchain/tools/gmail/send_message.py +1 -1
- langchain/tools/google_finance/__init__.py +1 -1
- langchain/tools/google_finance/tool.py +1 -1
- langchain/tools/google_scholar/__init__.py +1 -1
- langchain/tools/google_scholar/tool.py +1 -1
- langchain/tools/google_search/__init__.py +1 -1
- langchain/tools/google_search/tool.py +1 -1
- langchain/tools/google_serper/__init__.py +1 -1
- langchain/tools/google_serper/tool.py +1 -1
- langchain/tools/google_trends/__init__.py +1 -1
- langchain/tools/google_trends/tool.py +1 -1
- langchain/tools/jira/tool.py +20 -1
- langchain/tools/json/tool.py +25 -3
- langchain/tools/memorize/tool.py +1 -1
- langchain/tools/multion/__init__.py +1 -1
- langchain/tools/multion/update_session.py +1 -1
- langchain/tools/office365/__init__.py +2 -2
- langchain/tools/office365/events_search.py +1 -1
- langchain/tools/office365/messages_search.py +1 -1
- langchain/tools/office365/send_event.py +1 -1
- langchain/tools/office365/send_message.py +1 -1
- langchain/tools/openapi/utils/api_models.py +6 -6
- langchain/tools/playwright/__init__.py +5 -5
- langchain/tools/playwright/click.py +1 -1
- langchain/tools/playwright/extract_hyperlinks.py +1 -1
- langchain/tools/playwright/get_elements.py +1 -1
- langchain/tools/playwright/navigate.py +1 -1
- langchain/tools/plugin.py +2 -2
- langchain/tools/powerbi/tool.py +1 -1
- langchain/tools/python/__init__.py +3 -2
- langchain/tools/reddit_search/tool.py +1 -1
- langchain/tools/render.py +2 -2
- langchain/tools/requests/tool.py +2 -2
- langchain/tools/searchapi/tool.py +1 -1
- langchain/tools/searx_search/tool.py +1 -1
- langchain/tools/slack/get_message.py +1 -1
- langchain/tools/spark_sql/tool.py +1 -1
- langchain/tools/sql_database/tool.py +1 -1
- langchain/tools/tavily_search/__init__.py +1 -1
- langchain/tools/tavily_search/tool.py +1 -1
- langchain/tools/zapier/__init__.py +1 -1
- langchain/tools/zapier/tool.py +24 -2
- langchain/utilities/__init__.py +4 -4
- langchain/utilities/arcee.py +4 -4
- langchain/utilities/clickup.py +4 -4
- langchain/utilities/dalle_image_generator.py +1 -1
- langchain/utilities/dataforseo_api_search.py +1 -1
- langchain/utilities/opaqueprompts.py +1 -1
- langchain/utilities/reddit_search.py +1 -1
- langchain/utilities/sql_database.py +1 -1
- langchain/utilities/tavily_search.py +1 -1
- langchain/utilities/vertexai.py +2 -2
- langchain/utils/__init__.py +1 -1
- langchain/utils/aiter.py +1 -1
- langchain/utils/html.py +3 -3
- langchain/utils/input.py +1 -1
- langchain/utils/iter.py +1 -1
- langchain/utils/json_schema.py +1 -3
- langchain/utils/strings.py +1 -1
- langchain/utils/utils.py +6 -6
- langchain/vectorstores/__init__.py +5 -5
- langchain/vectorstores/alibabacloud_opensearch.py +1 -1
- langchain/vectorstores/azure_cosmos_db.py +1 -1
- langchain/vectorstores/clickhouse.py +1 -1
- langchain/vectorstores/elastic_vector_search.py +1 -1
- langchain/vectorstores/elasticsearch.py +2 -2
- langchain/vectorstores/myscale.py +1 -1
- langchain/vectorstores/neo4j_vector.py +1 -1
- langchain/vectorstores/pgembedding.py +1 -1
- langchain/vectorstores/qdrant.py +1 -1
- langchain/vectorstores/redis/__init__.py +1 -1
- langchain/vectorstores/redis/base.py +1 -1
- langchain/vectorstores/redis/filters.py +4 -4
- langchain/vectorstores/redis/schema.py +6 -6
- langchain/vectorstores/sklearn.py +2 -2
- langchain/vectorstores/starrocks.py +1 -1
- langchain/vectorstores/utils.py +1 -1
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/METADATA +4 -14
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/RECORD +590 -591
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/WHEEL +1 -1
- langchain/smith/evaluation/utils.py +0 -0
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/entry_points.txt +0 -0
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/licenses/LICENSE +0 -0
|
@@ -9,7 +9,7 @@ from langchain_core.prompt_values import PromptValue
|
|
|
9
9
|
from langchain_core.prompts import BasePromptTemplate, PromptTemplate
|
|
10
10
|
from langchain_core.runnables import RunnableSerializable
|
|
11
11
|
from pydantic import SkipValidation
|
|
12
|
-
from typing_extensions import TypedDict
|
|
12
|
+
from typing_extensions import TypedDict, override
|
|
13
13
|
|
|
14
14
|
NAIVE_COMPLETION_RETRY = """Prompt:
|
|
15
15
|
{prompt}
|
|
@@ -30,18 +30,22 @@ Please try again:"""
|
|
|
30
30
|
|
|
31
31
|
NAIVE_RETRY_PROMPT = PromptTemplate.from_template(NAIVE_COMPLETION_RETRY)
|
|
32
32
|
NAIVE_RETRY_WITH_ERROR_PROMPT = PromptTemplate.from_template(
|
|
33
|
-
NAIVE_COMPLETION_RETRY_WITH_ERROR
|
|
33
|
+
NAIVE_COMPLETION_RETRY_WITH_ERROR,
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
T = TypeVar("T")
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
class RetryOutputParserRetryChainInput(TypedDict):
|
|
40
|
+
"""Retry chain input for RetryOutputParser."""
|
|
41
|
+
|
|
40
42
|
prompt: str
|
|
41
43
|
completion: str
|
|
42
44
|
|
|
43
45
|
|
|
44
46
|
class RetryWithErrorOutputParserRetryChainInput(TypedDict):
|
|
47
|
+
"""Retry chain input for RetryWithErrorOutputParser."""
|
|
48
|
+
|
|
45
49
|
prompt: str
|
|
46
50
|
completion: str
|
|
47
51
|
error: str
|
|
@@ -104,25 +108,25 @@ class RetryOutputParser(BaseOutputParser[T]):
|
|
|
104
108
|
while retries <= self.max_retries:
|
|
105
109
|
try:
|
|
106
110
|
return self.parser.parse(completion)
|
|
107
|
-
except OutputParserException
|
|
111
|
+
except OutputParserException:
|
|
108
112
|
if retries == self.max_retries:
|
|
109
|
-
raise
|
|
113
|
+
raise
|
|
114
|
+
retries += 1
|
|
115
|
+
if self.legacy and hasattr(self.retry_chain, "run"):
|
|
116
|
+
completion = self.retry_chain.run(
|
|
117
|
+
prompt=prompt_value.to_string(),
|
|
118
|
+
completion=completion,
|
|
119
|
+
)
|
|
110
120
|
else:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
prompt=prompt_value.to_string(),
|
|
121
|
-
completion=completion,
|
|
122
|
-
)
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
raise OutputParserException("Failed to parse")
|
|
121
|
+
completion = self.retry_chain.invoke(
|
|
122
|
+
{
|
|
123
|
+
"prompt": prompt_value.to_string(),
|
|
124
|
+
"completion": completion,
|
|
125
|
+
},
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
msg = "Failed to parse"
|
|
129
|
+
raise OutputParserException(msg)
|
|
126
130
|
|
|
127
131
|
async def aparse_with_prompt(self, completion: str, prompt_value: PromptValue) -> T:
|
|
128
132
|
"""Parse the output of an LLM call using a wrapped parser.
|
|
@@ -141,30 +145,31 @@ class RetryOutputParser(BaseOutputParser[T]):
|
|
|
141
145
|
return await self.parser.aparse(completion)
|
|
142
146
|
except OutputParserException as e:
|
|
143
147
|
if retries == self.max_retries:
|
|
144
|
-
raise
|
|
148
|
+
raise
|
|
149
|
+
retries += 1
|
|
150
|
+
if self.legacy and hasattr(self.retry_chain, "arun"):
|
|
151
|
+
completion = await self.retry_chain.arun(
|
|
152
|
+
prompt=prompt_value.to_string(),
|
|
153
|
+
completion=completion,
|
|
154
|
+
error=repr(e),
|
|
155
|
+
)
|
|
145
156
|
else:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
)
|
|
153
|
-
else:
|
|
154
|
-
completion = await self.retry_chain.ainvoke(
|
|
155
|
-
dict(
|
|
156
|
-
prompt=prompt_value.to_string(),
|
|
157
|
-
completion=completion,
|
|
158
|
-
)
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
raise OutputParserException("Failed to parse")
|
|
157
|
+
completion = await self.retry_chain.ainvoke(
|
|
158
|
+
{
|
|
159
|
+
"prompt": prompt_value.to_string(),
|
|
160
|
+
"completion": completion,
|
|
161
|
+
},
|
|
162
|
+
)
|
|
162
163
|
|
|
164
|
+
msg = "Failed to parse"
|
|
165
|
+
raise OutputParserException(msg)
|
|
166
|
+
|
|
167
|
+
@override
|
|
163
168
|
def parse(self, completion: str) -> T:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
)
|
|
169
|
+
msg = "This OutputParser can only be called by the `parse_with_prompt` method."
|
|
170
|
+
raise NotImplementedError(msg)
|
|
167
171
|
|
|
172
|
+
@override
|
|
168
173
|
def get_format_instructions(self) -> str:
|
|
169
174
|
return self.parser.get_format_instructions()
|
|
170
175
|
|
|
@@ -173,6 +178,7 @@ class RetryOutputParser(BaseOutputParser[T]):
|
|
|
173
178
|
return "retry"
|
|
174
179
|
|
|
175
180
|
@property
|
|
181
|
+
@override
|
|
176
182
|
def OutputType(self) -> type[T]:
|
|
177
183
|
return self.parser.OutputType
|
|
178
184
|
|
|
@@ -192,7 +198,8 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
|
|
|
192
198
|
# Should be an LLMChain but we want to avoid top-level imports from langchain.chains
|
|
193
199
|
retry_chain: Annotated[
|
|
194
200
|
Union[
|
|
195
|
-
RunnableSerializable[RetryWithErrorOutputParserRetryChainInput, str],
|
|
201
|
+
RunnableSerializable[RetryWithErrorOutputParserRetryChainInput, str],
|
|
202
|
+
Any,
|
|
196
203
|
],
|
|
197
204
|
SkipValidation(),
|
|
198
205
|
]
|
|
@@ -224,6 +231,7 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
|
|
|
224
231
|
chain = prompt | llm | StrOutputParser()
|
|
225
232
|
return cls(parser=parser, retry_chain=chain, max_retries=max_retries)
|
|
226
233
|
|
|
234
|
+
@override
|
|
227
235
|
def parse_with_prompt(self, completion: str, prompt_value: PromptValue) -> T:
|
|
228
236
|
retries = 0
|
|
229
237
|
|
|
@@ -232,27 +240,36 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
|
|
|
232
240
|
return self.parser.parse(completion)
|
|
233
241
|
except OutputParserException as e:
|
|
234
242
|
if retries == self.max_retries:
|
|
235
|
-
raise
|
|
243
|
+
raise
|
|
244
|
+
retries += 1
|
|
245
|
+
if self.legacy and hasattr(self.retry_chain, "run"):
|
|
246
|
+
completion = self.retry_chain.run(
|
|
247
|
+
prompt=prompt_value.to_string(),
|
|
248
|
+
completion=completion,
|
|
249
|
+
error=repr(e),
|
|
250
|
+
)
|
|
236
251
|
else:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
prompt
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
completion=completion,
|
|
248
|
-
prompt=prompt_value.to_string(),
|
|
249
|
-
error=repr(e),
|
|
250
|
-
)
|
|
251
|
-
)
|
|
252
|
-
|
|
253
|
-
raise OutputParserException("Failed to parse")
|
|
252
|
+
completion = self.retry_chain.invoke(
|
|
253
|
+
{
|
|
254
|
+
"completion": completion,
|
|
255
|
+
"prompt": prompt_value.to_string(),
|
|
256
|
+
"error": repr(e),
|
|
257
|
+
},
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
msg = "Failed to parse"
|
|
261
|
+
raise OutputParserException(msg)
|
|
254
262
|
|
|
255
263
|
async def aparse_with_prompt(self, completion: str, prompt_value: PromptValue) -> T:
|
|
264
|
+
"""Parse the output of an LLM call using a wrapped parser.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
completion: The chain completion to parse.
|
|
268
|
+
prompt_value: The prompt to use to parse the completion.
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
The parsed completion.
|
|
272
|
+
"""
|
|
256
273
|
retries = 0
|
|
257
274
|
|
|
258
275
|
while retries <= self.max_retries:
|
|
@@ -260,31 +277,32 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
|
|
|
260
277
|
return await self.parser.aparse(completion)
|
|
261
278
|
except OutputParserException as e:
|
|
262
279
|
if retries == self.max_retries:
|
|
263
|
-
raise
|
|
280
|
+
raise
|
|
281
|
+
retries += 1
|
|
282
|
+
if self.legacy and hasattr(self.retry_chain, "arun"):
|
|
283
|
+
completion = await self.retry_chain.arun(
|
|
284
|
+
prompt=prompt_value.to_string(),
|
|
285
|
+
completion=completion,
|
|
286
|
+
error=repr(e),
|
|
287
|
+
)
|
|
264
288
|
else:
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
error=repr(e),
|
|
278
|
-
)
|
|
279
|
-
)
|
|
280
|
-
|
|
281
|
-
raise OutputParserException("Failed to parse")
|
|
282
|
-
|
|
289
|
+
completion = await self.retry_chain.ainvoke(
|
|
290
|
+
{
|
|
291
|
+
"prompt": prompt_value.to_string(),
|
|
292
|
+
"completion": completion,
|
|
293
|
+
"error": repr(e),
|
|
294
|
+
},
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
msg = "Failed to parse"
|
|
298
|
+
raise OutputParserException(msg)
|
|
299
|
+
|
|
300
|
+
@override
|
|
283
301
|
def parse(self, completion: str) -> T:
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
)
|
|
302
|
+
msg = "This OutputParser can only be called by the `parse_with_prompt` method."
|
|
303
|
+
raise NotImplementedError(msg)
|
|
287
304
|
|
|
305
|
+
@override
|
|
288
306
|
def get_format_instructions(self) -> str:
|
|
289
307
|
return self.parser.get_format_instructions()
|
|
290
308
|
|
|
@@ -293,5 +311,6 @@ class RetryWithErrorOutputParser(BaseOutputParser[T]):
|
|
|
293
311
|
return "retry_with_error"
|
|
294
312
|
|
|
295
313
|
@property
|
|
314
|
+
@override
|
|
296
315
|
def OutputType(self) -> type[T]:
|
|
297
316
|
return self.parser.OutputType
|
|
@@ -5,6 +5,7 @@ from typing import Any
|
|
|
5
5
|
from langchain_core.output_parsers import BaseOutputParser
|
|
6
6
|
from langchain_core.output_parsers.json import parse_and_check_json_markdown
|
|
7
7
|
from pydantic import BaseModel
|
|
8
|
+
from typing_extensions import override
|
|
8
9
|
|
|
9
10
|
from langchain.output_parsers.format_instructions import (
|
|
10
11
|
STRUCTURED_FORMAT_INSTRUCTIONS,
|
|
@@ -27,7 +28,9 @@ class ResponseSchema(BaseModel):
|
|
|
27
28
|
|
|
28
29
|
def _get_sub_string(schema: ResponseSchema) -> str:
|
|
29
30
|
return line_template.format(
|
|
30
|
-
name=schema.name,
|
|
31
|
+
name=schema.name,
|
|
32
|
+
description=schema.description,
|
|
33
|
+
type=schema.type,
|
|
31
34
|
)
|
|
32
35
|
|
|
33
36
|
|
|
@@ -39,11 +42,23 @@ class StructuredOutputParser(BaseOutputParser[dict[str, Any]]):
|
|
|
39
42
|
|
|
40
43
|
@classmethod
|
|
41
44
|
def from_response_schemas(
|
|
42
|
-
cls,
|
|
45
|
+
cls,
|
|
46
|
+
response_schemas: list[ResponseSchema],
|
|
43
47
|
) -> StructuredOutputParser:
|
|
48
|
+
"""Create a StructuredOutputParser from a list of ResponseSchema.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
response_schemas: The schemas for the response.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
An instance of StructuredOutputParser.
|
|
55
|
+
"""
|
|
44
56
|
return cls(response_schemas=response_schemas)
|
|
45
57
|
|
|
46
|
-
def get_format_instructions(
|
|
58
|
+
def get_format_instructions(
|
|
59
|
+
self,
|
|
60
|
+
only_json: bool = False, # noqa: FBT001,FBT002
|
|
61
|
+
) -> str:
|
|
47
62
|
"""Get format instructions for the output parser.
|
|
48
63
|
|
|
49
64
|
example:
|
|
@@ -85,13 +100,13 @@ class StructuredOutputParser(BaseOutputParser[dict[str, Any]]):
|
|
|
85
100
|
will be returned, without the introducing text. Defaults to False.
|
|
86
101
|
"""
|
|
87
102
|
schema_str = "\n".join(
|
|
88
|
-
[_get_sub_string(schema) for schema in self.response_schemas]
|
|
103
|
+
[_get_sub_string(schema) for schema in self.response_schemas],
|
|
89
104
|
)
|
|
90
105
|
if only_json:
|
|
91
106
|
return STRUCTURED_FORMAT_SIMPLE_INSTRUCTIONS.format(format=schema_str)
|
|
92
|
-
|
|
93
|
-
return STRUCTURED_FORMAT_INSTRUCTIONS.format(format=schema_str)
|
|
107
|
+
return STRUCTURED_FORMAT_INSTRUCTIONS.format(format=schema_str)
|
|
94
108
|
|
|
109
|
+
@override
|
|
95
110
|
def parse(self, text: str) -> dict[str, Any]:
|
|
96
111
|
expected_keys = [rs.name for rs in self.response_schemas]
|
|
97
112
|
return parse_and_check_json_markdown(text, expected_keys)
|
langchain/output_parsers/yaml.py
CHANGED
|
@@ -6,6 +6,7 @@ import yaml
|
|
|
6
6
|
from langchain_core.exceptions import OutputParserException
|
|
7
7
|
from langchain_core.output_parsers import BaseOutputParser
|
|
8
8
|
from pydantic import BaseModel, ValidationError
|
|
9
|
+
from typing_extensions import override
|
|
9
10
|
|
|
10
11
|
from langchain.output_parsers.format_instructions import YAML_FORMAT_INSTRUCTIONS
|
|
11
12
|
|
|
@@ -18,36 +19,42 @@ class YamlOutputParser(BaseOutputParser[T]):
|
|
|
18
19
|
pydantic_object: type[T]
|
|
19
20
|
"""The pydantic model to parse."""
|
|
20
21
|
pattern: re.Pattern = re.compile(
|
|
21
|
-
r"^```(?:ya?ml)?(?P<yaml>[^`]*)",
|
|
22
|
+
r"^```(?:ya?ml)?(?P<yaml>[^`]*)",
|
|
23
|
+
re.MULTILINE | re.DOTALL,
|
|
22
24
|
)
|
|
23
|
-
"""Regex pattern to match yaml code blocks
|
|
25
|
+
"""Regex pattern to match yaml code blocks
|
|
24
26
|
within triple backticks with optional yaml or yml prefix."""
|
|
25
27
|
|
|
28
|
+
@override
|
|
26
29
|
def parse(self, text: str) -> T:
|
|
27
30
|
try:
|
|
28
31
|
# Greedy search for 1st yaml candidate.
|
|
29
32
|
match = re.search(self.pattern, text.strip())
|
|
30
|
-
|
|
31
|
-
if match
|
|
32
|
-
yaml_str = match.group("yaml")
|
|
33
|
-
else:
|
|
34
|
-
# If no backticks were present, try to parse the entire output as yaml.
|
|
35
|
-
yaml_str = text
|
|
33
|
+
# If no backticks were present, try to parse the entire output as yaml.
|
|
34
|
+
yaml_str = match.group("yaml") if match else text
|
|
36
35
|
|
|
37
36
|
json_object = yaml.safe_load(yaml_str)
|
|
38
37
|
if hasattr(self.pydantic_object, "model_validate"):
|
|
39
38
|
return self.pydantic_object.model_validate(json_object)
|
|
40
|
-
|
|
41
|
-
return self.pydantic_object.parse_obj(json_object)
|
|
39
|
+
return self.pydantic_object.parse_obj(json_object)
|
|
42
40
|
|
|
43
41
|
except (yaml.YAMLError, ValidationError) as e:
|
|
44
42
|
name = self.pydantic_object.__name__
|
|
45
43
|
msg = f"Failed to parse {name} from completion {text}. Got: {e}"
|
|
46
44
|
raise OutputParserException(msg, llm_output=text) from e
|
|
47
45
|
|
|
46
|
+
@override
|
|
48
47
|
def get_format_instructions(self) -> str:
|
|
49
48
|
# Copy schema to avoid altering original Pydantic schema.
|
|
50
|
-
|
|
49
|
+
if hasattr(self.pydantic_object, "model_json_schema"):
|
|
50
|
+
# Pydantic v2
|
|
51
|
+
schema = dict(self.pydantic_object.model_json_schema().items())
|
|
52
|
+
elif hasattr(self.pydantic_object, "schema"):
|
|
53
|
+
# Pydantic v1
|
|
54
|
+
schema = dict(self.pydantic_object.schema().items())
|
|
55
|
+
else:
|
|
56
|
+
msg = "Pydantic object must have either model_json_schema or schema method"
|
|
57
|
+
raise ValueError(msg)
|
|
51
58
|
|
|
52
59
|
# Remove extraneous fields.
|
|
53
60
|
reduced_schema = schema
|
|
@@ -65,5 +72,6 @@ class YamlOutputParser(BaseOutputParser[T]):
|
|
|
65
72
|
return "yaml"
|
|
66
73
|
|
|
67
74
|
@property
|
|
75
|
+
@override
|
|
68
76
|
def OutputType(self) -> type[T]:
|
|
69
77
|
return self.pydantic_object
|
langchain/prompts/__init__.py
CHANGED
|
@@ -65,7 +65,9 @@ if TYPE_CHECKING:
|
|
|
65
65
|
# Used to consolidate logic for raising deprecation warnings and
|
|
66
66
|
# handling optional imports.
|
|
67
67
|
MODULE_LOOKUP = {
|
|
68
|
-
"NGramOverlapExampleSelector":
|
|
68
|
+
"NGramOverlapExampleSelector": (
|
|
69
|
+
"langchain_community.example_selectors.ngram_overlap"
|
|
70
|
+
),
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
_import_attribute = create_importer(__file__, module_lookup=MODULE_LOOKUP)
|
|
@@ -82,6 +84,7 @@ __all__ = [
|
|
|
82
84
|
"BasePromptTemplate",
|
|
83
85
|
"ChatMessagePromptTemplate",
|
|
84
86
|
"ChatPromptTemplate",
|
|
87
|
+
"FewShotChatMessagePromptTemplate",
|
|
85
88
|
"FewShotPromptTemplate",
|
|
86
89
|
"FewShotPromptWithTemplates",
|
|
87
90
|
"HumanMessagePromptTemplate",
|
|
@@ -90,11 +93,10 @@ __all__ = [
|
|
|
90
93
|
"MessagesPlaceholder",
|
|
91
94
|
"NGramOverlapExampleSelector",
|
|
92
95
|
"PipelinePromptTemplate",
|
|
96
|
+
"Prompt",
|
|
93
97
|
"PromptTemplate",
|
|
94
98
|
"SemanticSimilarityExampleSelector",
|
|
95
99
|
"StringPromptTemplate",
|
|
96
100
|
"SystemMessagePromptTemplate",
|
|
97
101
|
"load_prompt",
|
|
98
|
-
"FewShotChatMessagePromptTemplate",
|
|
99
|
-
"Prompt",
|
|
100
102
|
]
|
langchain/prompts/base.py
CHANGED
|
@@ -10,12 +10,12 @@ from langchain_core.prompts import (
|
|
|
10
10
|
from langchain_core.prompts.string import _get_jinja2_variables_from_template
|
|
11
11
|
|
|
12
12
|
__all__ = [
|
|
13
|
-
"jinja2_formatter",
|
|
14
|
-
"validate_jinja2",
|
|
15
|
-
"check_valid_template",
|
|
16
|
-
"get_template_variables",
|
|
17
|
-
"StringPromptTemplate",
|
|
18
13
|
"BasePromptTemplate",
|
|
14
|
+
"StringPromptTemplate",
|
|
19
15
|
"StringPromptValue",
|
|
20
16
|
"_get_jinja2_variables_from_template",
|
|
17
|
+
"check_valid_template",
|
|
18
|
+
"get_template_variables",
|
|
19
|
+
"jinja2_formatter",
|
|
20
|
+
"validate_jinja2",
|
|
21
21
|
]
|
langchain/prompts/chat.py
CHANGED
|
@@ -16,22 +16,22 @@ from langchain_core.prompts.chat import (
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
__all__ = [
|
|
19
|
+
"AIMessagePromptTemplate",
|
|
20
|
+
"BaseChatPromptTemplate",
|
|
19
21
|
"BaseMessagePromptTemplate",
|
|
20
|
-
"MessagesPlaceholder",
|
|
21
22
|
"BaseStringMessagePromptTemplate",
|
|
22
23
|
"ChatMessagePromptTemplate",
|
|
23
|
-
"HumanMessagePromptTemplate",
|
|
24
|
-
"AIMessagePromptTemplate",
|
|
25
|
-
"SystemMessagePromptTemplate",
|
|
26
|
-
"BaseChatPromptTemplate",
|
|
27
24
|
"ChatPromptTemplate",
|
|
28
25
|
"ChatPromptValue",
|
|
29
26
|
"ChatPromptValueConcrete",
|
|
30
|
-
"
|
|
31
|
-
"_create_template_from_message_type",
|
|
32
|
-
"MessagePromptTemplateT",
|
|
27
|
+
"HumanMessagePromptTemplate",
|
|
33
28
|
"MessageLike",
|
|
34
29
|
"MessageLikeRepresentation",
|
|
30
|
+
"MessagePromptTemplateT",
|
|
31
|
+
"MessagesPlaceholder",
|
|
32
|
+
"SystemMessagePromptTemplate",
|
|
33
|
+
"_convert_to_message",
|
|
34
|
+
"_create_template_from_message_type",
|
|
35
35
|
]
|
|
36
36
|
|
|
37
37
|
from langchain_core.prompts.message import BaseMessagePromptTemplate
|
|
@@ -21,7 +21,9 @@ if TYPE_CHECKING:
|
|
|
21
21
|
# Used to consolidate logic for raising deprecation warnings and
|
|
22
22
|
# handling optional imports.
|
|
23
23
|
DEPRECATED_LOOKUPS = {
|
|
24
|
-
"NGramOverlapExampleSelector":
|
|
24
|
+
"NGramOverlapExampleSelector": (
|
|
25
|
+
"langchain_community.example_selectors.ngram_overlap"
|
|
26
|
+
),
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUPS)
|
langchain/prompts/few_shot.py
CHANGED
langchain/prompts/loading.py
CHANGED
|
@@ -11,13 +11,13 @@ from langchain_core.prompts.loading import (
|
|
|
11
11
|
from langchain_core.utils.loading import try_load_from_hub
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
14
|
-
"load_prompt_from_config",
|
|
15
|
-
"load_prompt",
|
|
16
|
-
"try_load_from_hub",
|
|
17
14
|
"_load_examples",
|
|
18
15
|
"_load_few_shot_prompt",
|
|
19
16
|
"_load_output_parser",
|
|
20
17
|
"_load_prompt",
|
|
21
18
|
"_load_prompt_from_file",
|
|
22
19
|
"_load_template",
|
|
20
|
+
"load_prompt",
|
|
21
|
+
"load_prompt_from_config",
|
|
22
|
+
"try_load_from_hub",
|
|
23
23
|
]
|
langchain/prompts/prompt.py
CHANGED
|
@@ -7,7 +7,7 @@ from langchain_core._api import warn_deprecated
|
|
|
7
7
|
# attempt to import pydantic since it adds pydantic_v1 and pydantic_v2 to sys.modules.
|
|
8
8
|
#
|
|
9
9
|
# This hack is done for the following reasons:
|
|
10
|
-
# *
|
|
10
|
+
# * LangChain will attempt to remain compatible with both pydantic v1 and v2 since
|
|
11
11
|
# both dependencies and dependents may be stuck on either version of v1 or v2.
|
|
12
12
|
# * Creating namespaces for pydantic v1 and v2 should allow us to write code that
|
|
13
13
|
# unambiguously uses either v1 or v2 API.
|
langchain/retrievers/__init__.py
CHANGED
|
@@ -148,8 +148,8 @@ __all__ = [
|
|
|
148
148
|
"GoogleDocumentAIWarehouseRetriever",
|
|
149
149
|
"GoogleVertexAIMultiTurnSearchRetriever",
|
|
150
150
|
"GoogleVertexAISearchRetriever",
|
|
151
|
-
"KayAiRetriever",
|
|
152
151
|
"KNNRetriever",
|
|
152
|
+
"KayAiRetriever",
|
|
153
153
|
"LlamaIndexGraphRetriever",
|
|
154
154
|
"LlamaIndexRetriever",
|
|
155
155
|
"MergerRetriever",
|
|
@@ -157,22 +157,22 @@ __all__ = [
|
|
|
157
157
|
"MilvusRetriever",
|
|
158
158
|
"MultiQueryRetriever",
|
|
159
159
|
"MultiVectorRetriever",
|
|
160
|
+
"NeuralDBRetriever",
|
|
160
161
|
"OutlineRetriever",
|
|
161
162
|
"ParentDocumentRetriever",
|
|
162
163
|
"PineconeHybridSearchRetriever",
|
|
163
164
|
"PubMedRetriever",
|
|
164
|
-
"RemoteLangChainRetriever",
|
|
165
165
|
"RePhraseQueryRetriever",
|
|
166
|
-
"
|
|
166
|
+
"RemoteLangChainRetriever",
|
|
167
167
|
"SVMRetriever",
|
|
168
|
-
"
|
|
168
|
+
"SelfQueryRetriever",
|
|
169
169
|
"TFIDFRetriever",
|
|
170
|
+
"TavilySearchAPIRetriever",
|
|
170
171
|
"TimeWeightedVectorStoreRetriever",
|
|
171
172
|
"VespaRetriever",
|
|
172
173
|
"WeaviateHybridSearchRetriever",
|
|
173
174
|
"WebResearchRetriever",
|
|
174
175
|
"WikipediaRetriever",
|
|
175
176
|
"ZepRetriever",
|
|
176
|
-
"NeuralDBRetriever",
|
|
177
177
|
"ZillizRetriever",
|
|
178
178
|
]
|
langchain/retrievers/bedrock.py
CHANGED
langchain/retrievers/bm25.py
CHANGED
|
@@ -38,15 +38,18 @@ class ContextualCompressionRetriever(BaseRetriever):
|
|
|
38
38
|
Sequence of relevant documents
|
|
39
39
|
"""
|
|
40
40
|
docs = self.base_retriever.invoke(
|
|
41
|
-
query,
|
|
41
|
+
query,
|
|
42
|
+
config={"callbacks": run_manager.get_child()},
|
|
43
|
+
**kwargs,
|
|
42
44
|
)
|
|
43
45
|
if docs:
|
|
44
46
|
compressed_docs = self.base_compressor.compress_documents(
|
|
45
|
-
docs,
|
|
47
|
+
docs,
|
|
48
|
+
query,
|
|
49
|
+
callbacks=run_manager.get_child(),
|
|
46
50
|
)
|
|
47
51
|
return list(compressed_docs)
|
|
48
|
-
|
|
49
|
-
return []
|
|
52
|
+
return []
|
|
50
53
|
|
|
51
54
|
async def _aget_relevant_documents(
|
|
52
55
|
self,
|
|
@@ -64,12 +67,15 @@ class ContextualCompressionRetriever(BaseRetriever):
|
|
|
64
67
|
List of relevant documents
|
|
65
68
|
"""
|
|
66
69
|
docs = await self.base_retriever.ainvoke(
|
|
67
|
-
query,
|
|
70
|
+
query,
|
|
71
|
+
config={"callbacks": run_manager.get_child()},
|
|
72
|
+
**kwargs,
|
|
68
73
|
)
|
|
69
74
|
if docs:
|
|
70
75
|
compressed_docs = await self.base_compressor.acompress_documents(
|
|
71
|
-
docs,
|
|
76
|
+
docs,
|
|
77
|
+
query,
|
|
78
|
+
callbacks=run_manager.get_child(),
|
|
72
79
|
)
|
|
73
80
|
return list(compressed_docs)
|
|
74
|
-
|
|
75
|
-
return []
|
|
81
|
+
return []
|