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
langchain/prompts/chat.py
CHANGED
|
@@ -2,7 +2,6 @@ from langchain_core.prompt_values import ChatPromptValue, ChatPromptValueConcret
|
|
|
2
2
|
from langchain_core.prompts.chat import (
|
|
3
3
|
AIMessagePromptTemplate,
|
|
4
4
|
BaseChatPromptTemplate,
|
|
5
|
-
BaseMessagePromptTemplate,
|
|
6
5
|
BaseStringMessagePromptTemplate,
|
|
7
6
|
ChatMessagePromptTemplate,
|
|
8
7
|
ChatPromptTemplate,
|
|
@@ -17,20 +16,22 @@ from langchain_core.prompts.chat import (
|
|
|
17
16
|
)
|
|
18
17
|
|
|
19
18
|
__all__ = [
|
|
19
|
+
"AIMessagePromptTemplate",
|
|
20
|
+
"BaseChatPromptTemplate",
|
|
20
21
|
"BaseMessagePromptTemplate",
|
|
21
|
-
"MessagesPlaceholder",
|
|
22
22
|
"BaseStringMessagePromptTemplate",
|
|
23
23
|
"ChatMessagePromptTemplate",
|
|
24
|
-
"HumanMessagePromptTemplate",
|
|
25
|
-
"AIMessagePromptTemplate",
|
|
26
|
-
"SystemMessagePromptTemplate",
|
|
27
|
-
"BaseChatPromptTemplate",
|
|
28
24
|
"ChatPromptTemplate",
|
|
29
25
|
"ChatPromptValue",
|
|
30
26
|
"ChatPromptValueConcrete",
|
|
31
|
-
"
|
|
32
|
-
"_create_template_from_message_type",
|
|
33
|
-
"MessagePromptTemplateT",
|
|
27
|
+
"HumanMessagePromptTemplate",
|
|
34
28
|
"MessageLike",
|
|
35
29
|
"MessageLikeRepresentation",
|
|
30
|
+
"MessagePromptTemplateT",
|
|
31
|
+
"MessagesPlaceholder",
|
|
32
|
+
"SystemMessagePromptTemplate",
|
|
33
|
+
"_convert_to_message",
|
|
34
|
+
"_create_template_from_message_type",
|
|
36
35
|
]
|
|
36
|
+
|
|
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
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
|
@@ -4,14 +4,10 @@ from langchain_core.callbacks import (
|
|
|
4
4
|
AsyncCallbackManagerForRetrieverRun,
|
|
5
5
|
CallbackManagerForRetrieverRun,
|
|
6
6
|
)
|
|
7
|
-
from langchain_core.documents import Document
|
|
7
|
+
from langchain_core.documents import BaseDocumentCompressor, Document
|
|
8
8
|
from langchain_core.retrievers import BaseRetriever, RetrieverLike
|
|
9
9
|
from pydantic import ConfigDict
|
|
10
10
|
|
|
11
|
-
from langchain.retrievers.document_compressors.base import (
|
|
12
|
-
BaseDocumentCompressor,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
11
|
|
|
16
12
|
class ContextualCompressionRetriever(BaseRetriever):
|
|
17
13
|
"""Retriever that wraps a base retriever and compresses the results."""
|
|
@@ -42,15 +38,18 @@ class ContextualCompressionRetriever(BaseRetriever):
|
|
|
42
38
|
Sequence of relevant documents
|
|
43
39
|
"""
|
|
44
40
|
docs = self.base_retriever.invoke(
|
|
45
|
-
query,
|
|
41
|
+
query,
|
|
42
|
+
config={"callbacks": run_manager.get_child()},
|
|
43
|
+
**kwargs,
|
|
46
44
|
)
|
|
47
45
|
if docs:
|
|
48
46
|
compressed_docs = self.base_compressor.compress_documents(
|
|
49
|
-
docs,
|
|
47
|
+
docs,
|
|
48
|
+
query,
|
|
49
|
+
callbacks=run_manager.get_child(),
|
|
50
50
|
)
|
|
51
51
|
return list(compressed_docs)
|
|
52
|
-
|
|
53
|
-
return []
|
|
52
|
+
return []
|
|
54
53
|
|
|
55
54
|
async def _aget_relevant_documents(
|
|
56
55
|
self,
|
|
@@ -68,12 +67,15 @@ class ContextualCompressionRetriever(BaseRetriever):
|
|
|
68
67
|
List of relevant documents
|
|
69
68
|
"""
|
|
70
69
|
docs = await self.base_retriever.ainvoke(
|
|
71
|
-
query,
|
|
70
|
+
query,
|
|
71
|
+
config={"callbacks": run_manager.get_child()},
|
|
72
|
+
**kwargs,
|
|
72
73
|
)
|
|
73
74
|
if docs:
|
|
74
75
|
compressed_docs = await self.base_compressor.acompress_documents(
|
|
75
|
-
docs,
|
|
76
|
+
docs,
|
|
77
|
+
query,
|
|
78
|
+
callbacks=run_manager.get_child(),
|
|
76
79
|
)
|
|
77
80
|
return list(compressed_docs)
|
|
78
|
-
|
|
79
|
-
return []
|
|
81
|
+
return []
|
langchain/retrievers/docarray.py
CHANGED
|
@@ -28,15 +28,17 @@ def __getattr__(name: str) -> Any:
|
|
|
28
28
|
if name in _module_lookup:
|
|
29
29
|
module = importlib.import_module(_module_lookup[name])
|
|
30
30
|
return getattr(module, name)
|
|
31
|
-
|
|
31
|
+
msg = f"module {__name__} has no attribute {name}"
|
|
32
|
+
raise AttributeError(msg)
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
__all__ = [
|
|
36
|
+
"CohereRerank",
|
|
37
|
+
"CrossEncoderReranker",
|
|
35
38
|
"DocumentCompressorPipeline",
|
|
36
39
|
"EmbeddingsFilter",
|
|
37
|
-
"
|
|
40
|
+
"FlashrankRerank",
|
|
38
41
|
"LLMChainExtractor",
|
|
39
42
|
"LLMChainFilter",
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
] + list(_module_lookup.keys())
|
|
43
|
+
"LLMListwiseRerank",
|
|
44
|
+
]
|
|
@@ -2,7 +2,7 @@ from collections.abc import Sequence
|
|
|
2
2
|
from inspect import signature
|
|
3
3
|
from typing import Optional, Union
|
|
4
4
|
|
|
5
|
-
from langchain_core.callbacks
|
|
5
|
+
from langchain_core.callbacks import Callbacks
|
|
6
6
|
from langchain_core.documents import (
|
|
7
7
|
BaseDocumentCompressor,
|
|
8
8
|
BaseDocumentTransformer,
|
|
@@ -32,20 +32,23 @@ class DocumentCompressorPipeline(BaseDocumentCompressor):
|
|
|
32
32
|
if isinstance(_transformer, BaseDocumentCompressor):
|
|
33
33
|
accepts_callbacks = (
|
|
34
34
|
signature(_transformer.compress_documents).parameters.get(
|
|
35
|
-
"callbacks"
|
|
35
|
+
"callbacks",
|
|
36
36
|
)
|
|
37
37
|
is not None
|
|
38
38
|
)
|
|
39
39
|
if accepts_callbacks:
|
|
40
40
|
documents = _transformer.compress_documents(
|
|
41
|
-
documents,
|
|
41
|
+
documents,
|
|
42
|
+
query,
|
|
43
|
+
callbacks=callbacks,
|
|
42
44
|
)
|
|
43
45
|
else:
|
|
44
46
|
documents = _transformer.compress_documents(documents, query)
|
|
45
47
|
elif isinstance(_transformer, BaseDocumentTransformer):
|
|
46
48
|
documents = _transformer.transform_documents(documents)
|
|
47
49
|
else:
|
|
48
|
-
|
|
50
|
+
msg = f"Got unexpected transformer type: {_transformer}"
|
|
51
|
+
raise ValueError(msg) # noqa: TRY004
|
|
49
52
|
return documents
|
|
50
53
|
|
|
51
54
|
async def acompress_documents(
|
|
@@ -59,18 +62,21 @@ class DocumentCompressorPipeline(BaseDocumentCompressor):
|
|
|
59
62
|
if isinstance(_transformer, BaseDocumentCompressor):
|
|
60
63
|
accepts_callbacks = (
|
|
61
64
|
signature(_transformer.acompress_documents).parameters.get(
|
|
62
|
-
"callbacks"
|
|
65
|
+
"callbacks",
|
|
63
66
|
)
|
|
64
67
|
is not None
|
|
65
68
|
)
|
|
66
69
|
if accepts_callbacks:
|
|
67
70
|
documents = await _transformer.acompress_documents(
|
|
68
|
-
documents,
|
|
71
|
+
documents,
|
|
72
|
+
query,
|
|
73
|
+
callbacks=callbacks,
|
|
69
74
|
)
|
|
70
75
|
else:
|
|
71
76
|
documents = await _transformer.acompress_documents(documents, query)
|
|
72
77
|
elif isinstance(_transformer, BaseDocumentTransformer):
|
|
73
78
|
documents = await _transformer.atransform_documents(documents)
|
|
74
79
|
else:
|
|
75
|
-
|
|
80
|
+
msg = f"Got unexpected transformer type: {_transformer}"
|
|
81
|
+
raise ValueError(msg) # noqa: TRY004
|
|
76
82
|
return documents
|
|
@@ -5,8 +5,8 @@ from __future__ import annotations
|
|
|
5
5
|
from collections.abc import Sequence
|
|
6
6
|
from typing import Any, Callable, Optional, cast
|
|
7
7
|
|
|
8
|
-
from langchain_core.callbacks
|
|
9
|
-
from langchain_core.documents import Document
|
|
8
|
+
from langchain_core.callbacks import Callbacks
|
|
9
|
+
from langchain_core.documents import BaseDocumentCompressor, Document
|
|
10
10
|
from langchain_core.language_models import BaseLanguageModel
|
|
11
11
|
from langchain_core.output_parsers import BaseOutputParser, StrOutputParser
|
|
12
12
|
from langchain_core.prompts import PromptTemplate
|
|
@@ -14,7 +14,6 @@ from langchain_core.runnables import Runnable
|
|
|
14
14
|
from pydantic import ConfigDict
|
|
15
15
|
|
|
16
16
|
from langchain.chains.llm import LLMChain
|
|
17
|
-
from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
|
|
18
17
|
from langchain.retrievers.document_compressors.chain_extract_prompt import (
|
|
19
18
|
prompt_template,
|
|
20
19
|
)
|
|
@@ -81,7 +80,7 @@ class LLMChainExtractor(BaseDocumentCompressor):
|
|
|
81
80
|
if len(output) == 0:
|
|
82
81
|
continue
|
|
83
82
|
compressed_docs.append(
|
|
84
|
-
Document(page_content=cast(str, output), metadata=doc.metadata)
|
|
83
|
+
Document(page_content=cast(str, output), metadata=doc.metadata),
|
|
85
84
|
)
|
|
86
85
|
return compressed_docs
|
|
87
86
|
|
|
@@ -99,7 +98,7 @@ class LLMChainExtractor(BaseDocumentCompressor):
|
|
|
99
98
|
if len(outputs[i]) == 0:
|
|
100
99
|
continue
|
|
101
100
|
compressed_docs.append(
|
|
102
|
-
Document(page_content=outputs[i], metadata=doc.metadata)
|
|
101
|
+
Document(page_content=outputs[i], metadata=doc.metadata),
|
|
103
102
|
)
|
|
104
103
|
return compressed_docs
|
|
105
104
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
prompt_template = """Given the following question and context, extract any part of the context *AS IS* that is relevant to answer the question. If none of the context is relevant return {no_output_str}.
|
|
1
|
+
prompt_template = """Given the following question and context, extract any part of the context *AS IS* that is relevant to answer the question. If none of the context is relevant return {no_output_str}.
|
|
3
2
|
|
|
4
3
|
Remember, *DO NOT* edit the extracted parts of the context.
|
|
5
4
|
|
|
@@ -8,4 +7,4 @@ Remember, *DO NOT* edit the extracted parts of the context.
|
|
|
8
7
|
>>>
|
|
9
8
|
{{context}}
|
|
10
9
|
>>>
|
|
11
|
-
Extracted relevant parts:"""
|
|
10
|
+
Extracted relevant parts:""" # noqa: E501
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
from collections.abc import Sequence
|
|
4
4
|
from typing import Any, Callable, Optional
|
|
5
5
|
|
|
6
|
-
from langchain_core.callbacks
|
|
7
|
-
from langchain_core.documents import Document
|
|
6
|
+
from langchain_core.callbacks import Callbacks
|
|
7
|
+
from langchain_core.documents import BaseDocumentCompressor, Document
|
|
8
8
|
from langchain_core.language_models import BaseLanguageModel
|
|
9
9
|
from langchain_core.output_parsers import StrOutputParser
|
|
10
10
|
from langchain_core.prompts import BasePromptTemplate, PromptTemplate
|
|
@@ -14,7 +14,6 @@ from pydantic import ConfigDict
|
|
|
14
14
|
|
|
15
15
|
from langchain.chains import LLMChain
|
|
16
16
|
from langchain.output_parsers.boolean import BooleanOutputParser
|
|
17
|
-
from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
|
|
18
17
|
from langchain.retrievers.document_compressors.chain_filter_prompt import (
|
|
19
18
|
prompt_template,
|
|
20
19
|
)
|
|
@@ -37,7 +36,7 @@ class LLMChainFilter(BaseDocumentCompressor):
|
|
|
37
36
|
"""Filter that drops documents that aren't relevant to the query."""
|
|
38
37
|
|
|
39
38
|
llm_chain: Runnable
|
|
40
|
-
"""LLM wrapper to use for filtering documents.
|
|
39
|
+
"""LLM wrapper to use for filtering documents.
|
|
41
40
|
The chain prompt is expected to have a BooleanOutputParser."""
|
|
42
41
|
|
|
43
42
|
get_input: Callable[[str, Document], dict] = default_get_input
|
|
@@ -59,7 +58,8 @@ class LLMChainFilter(BaseDocumentCompressor):
|
|
|
59
58
|
config = RunnableConfig(callbacks=callbacks)
|
|
60
59
|
outputs = zip(
|
|
61
60
|
self.llm_chain.batch(
|
|
62
|
-
[self.get_input(query, doc) for doc in documents],
|
|
61
|
+
[self.get_input(query, doc) for doc in documents],
|
|
62
|
+
config=config,
|
|
63
63
|
),
|
|
64
64
|
documents,
|
|
65
65
|
)
|
|
@@ -70,9 +70,8 @@ class LLMChainFilter(BaseDocumentCompressor):
|
|
|
70
70
|
output = output_[self.llm_chain.output_key]
|
|
71
71
|
if self.llm_chain.prompt.output_parser is not None:
|
|
72
72
|
include_doc = self.llm_chain.prompt.output_parser.parse(output)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
include_doc = output_
|
|
73
|
+
elif isinstance(output_, bool):
|
|
74
|
+
include_doc = output_
|
|
76
75
|
if include_doc:
|
|
77
76
|
filtered_docs.append(doc)
|
|
78
77
|
|
|
@@ -90,7 +89,8 @@ class LLMChainFilter(BaseDocumentCompressor):
|
|
|
90
89
|
config = RunnableConfig(callbacks=callbacks)
|
|
91
90
|
outputs = zip(
|
|
92
91
|
await self.llm_chain.abatch(
|
|
93
|
-
[self.get_input(query, doc) for doc in documents],
|
|
92
|
+
[self.get_input(query, doc) for doc in documents],
|
|
93
|
+
config=config,
|
|
94
94
|
),
|
|
95
95
|
documents,
|
|
96
96
|
)
|
|
@@ -100,9 +100,8 @@ class LLMChainFilter(BaseDocumentCompressor):
|
|
|
100
100
|
output = output_[self.llm_chain.output_key]
|
|
101
101
|
if self.llm_chain.prompt.output_parser is not None:
|
|
102
102
|
include_doc = self.llm_chain.prompt.output_parser.parse(output)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
include_doc = output_
|
|
103
|
+
elif isinstance(output_, bool):
|
|
104
|
+
include_doc = output_
|
|
106
105
|
if include_doc:
|
|
107
106
|
filtered_docs.append(doc)
|
|
108
107
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
prompt_template = """Given the following question and context, return YES if the context is relevant to the question and NO if it isn't.
|
|
3
2
|
|
|
4
3
|
> Question: {question}
|
|
@@ -6,4 +5,4 @@ prompt_template = """Given the following question and context, return YES if the
|
|
|
6
5
|
>>>
|
|
7
6
|
{context}
|
|
8
7
|
>>>
|
|
9
|
-
> Relevant (YES / NO):"""
|
|
8
|
+
> Relevant (YES / NO):""" # noqa: E501
|
|
@@ -5,16 +5,16 @@ from copy import deepcopy
|
|
|
5
5
|
from typing import Any, Optional, Union
|
|
6
6
|
|
|
7
7
|
from langchain_core._api.deprecation import deprecated
|
|
8
|
-
from langchain_core.callbacks
|
|
9
|
-
from langchain_core.documents import Document
|
|
8
|
+
from langchain_core.callbacks import Callbacks
|
|
9
|
+
from langchain_core.documents import BaseDocumentCompressor, Document
|
|
10
10
|
from langchain_core.utils import get_from_dict_or_env
|
|
11
11
|
from pydantic import ConfigDict, model_validator
|
|
12
12
|
|
|
13
|
-
from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
|
|
14
|
-
|
|
15
13
|
|
|
16
14
|
@deprecated(
|
|
17
|
-
since="0.0.30",
|
|
15
|
+
since="0.0.30",
|
|
16
|
+
removal="1.0",
|
|
17
|
+
alternative_import="langchain_cohere.CohereRerank",
|
|
18
18
|
)
|
|
19
19
|
class CohereRerank(BaseDocumentCompressor):
|
|
20
20
|
"""Document compressor that uses `Cohere Rerank API`."""
|
|
@@ -26,7 +26,7 @@ class CohereRerank(BaseDocumentCompressor):
|
|
|
26
26
|
model: str = "rerank-english-v2.0"
|
|
27
27
|
"""Model to use for reranking."""
|
|
28
28
|
cohere_api_key: Optional[str] = None
|
|
29
|
-
"""Cohere API key. Must be specified directly or via environment variable
|
|
29
|
+
"""Cohere API key. Must be specified directly or via environment variable
|
|
30
30
|
COHERE_API_KEY."""
|
|
31
31
|
user_agent: str = "langchain"
|
|
32
32
|
"""Identifier for the application making the request."""
|
|
@@ -43,13 +43,16 @@ class CohereRerank(BaseDocumentCompressor):
|
|
|
43
43
|
if not values.get("client"):
|
|
44
44
|
try:
|
|
45
45
|
import cohere
|
|
46
|
-
except ImportError:
|
|
47
|
-
|
|
46
|
+
except ImportError as e:
|
|
47
|
+
msg = (
|
|
48
48
|
"Could not import cohere python package. "
|
|
49
49
|
"Please install it with `pip install cohere`."
|
|
50
50
|
)
|
|
51
|
+
raise ImportError(msg) from e
|
|
51
52
|
cohere_api_key = get_from_dict_or_env(
|
|
52
|
-
values,
|
|
53
|
+
values,
|
|
54
|
+
"cohere_api_key",
|
|
55
|
+
"COHERE_API_KEY",
|
|
53
56
|
)
|
|
54
57
|
client_name = values.get("user_agent", "langchain")
|
|
55
58
|
values["client"] = cohere.Client(cohere_api_key, client_name=client_name)
|
|
@@ -89,16 +92,11 @@ class CohereRerank(BaseDocumentCompressor):
|
|
|
89
92
|
max_chunks_per_doc=max_chunks_per_doc,
|
|
90
93
|
)
|
|
91
94
|
if hasattr(results, "results"):
|
|
92
|
-
results =
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"index": res.index,
|
|
98
|
-
"relevance_score": res.relevance_score,
|
|
99
|
-
}
|
|
100
|
-
)
|
|
101
|
-
return result_dicts
|
|
95
|
+
results = results.results
|
|
96
|
+
return [
|
|
97
|
+
{"index": res.index, "relevance_score": res.relevance_score}
|
|
98
|
+
for res in results
|
|
99
|
+
]
|
|
102
100
|
|
|
103
101
|
def compress_documents(
|
|
104
102
|
self,
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
2
|
from typing import Callable, Optional
|
|
3
3
|
|
|
4
|
-
from langchain_core.callbacks
|
|
5
|
-
from langchain_core.documents import Document
|
|
4
|
+
from langchain_core.callbacks import Callbacks
|
|
5
|
+
from langchain_core.documents import BaseDocumentCompressor, Document
|
|
6
6
|
from langchain_core.embeddings import Embeddings
|
|
7
7
|
from langchain_core.utils import pre_init
|
|
8
8
|
from pydantic import ConfigDict, Field
|
|
9
9
|
|
|
10
|
-
from langchain.retrievers.document_compressors.base import (
|
|
11
|
-
BaseDocumentCompressor,
|
|
12
|
-
)
|
|
13
|
-
|
|
14
10
|
|
|
15
11
|
def _get_similarity_function() -> Callable:
|
|
16
12
|
try:
|
|
17
13
|
from langchain_community.utils.math import cosine_similarity
|
|
18
|
-
except ImportError:
|
|
19
|
-
|
|
14
|
+
except ImportError as e:
|
|
15
|
+
msg = (
|
|
20
16
|
"To use please install langchain-community "
|
|
21
17
|
"with `pip install langchain-community`."
|
|
22
18
|
)
|
|
19
|
+
raise ImportError(msg) from e
|
|
23
20
|
return cosine_similarity
|
|
24
21
|
|
|
25
22
|
|
|
@@ -49,7 +46,8 @@ class EmbeddingsFilter(BaseDocumentCompressor):
|
|
|
49
46
|
def validate_params(cls, values: dict) -> dict:
|
|
50
47
|
"""Validate similarity parameters."""
|
|
51
48
|
if values["k"] is None and values["similarity_threshold"] is None:
|
|
52
|
-
|
|
49
|
+
msg = "Must specify one of `k` or `similarity_threshold`."
|
|
50
|
+
raise ValueError(msg)
|
|
53
51
|
return values
|
|
54
52
|
|
|
55
53
|
def compress_documents(
|
|
@@ -64,21 +62,22 @@ class EmbeddingsFilter(BaseDocumentCompressor):
|
|
|
64
62
|
_get_embeddings_from_stateful_docs,
|
|
65
63
|
get_stateful_documents,
|
|
66
64
|
)
|
|
67
|
-
except ImportError:
|
|
68
|
-
|
|
65
|
+
except ImportError as e:
|
|
66
|
+
msg = (
|
|
69
67
|
"To use please install langchain-community "
|
|
70
68
|
"with `pip install langchain-community`."
|
|
71
69
|
)
|
|
70
|
+
raise ImportError(msg) from e
|
|
72
71
|
|
|
73
72
|
try:
|
|
74
73
|
import numpy as np
|
|
75
74
|
except ImportError as e:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
) from e
|
|
75
|
+
msg = "Could not import numpy, please install with `pip install numpy`."
|
|
76
|
+
raise ImportError(msg) from e
|
|
79
77
|
stateful_documents = get_stateful_documents(documents)
|
|
80
78
|
embedded_documents = _get_embeddings_from_stateful_docs(
|
|
81
|
-
self.embeddings,
|
|
79
|
+
self.embeddings,
|
|
80
|
+
stateful_documents,
|
|
82
81
|
)
|
|
83
82
|
embedded_query = self.embeddings.embed_query(query)
|
|
84
83
|
similarity = self.similarity_fn([embedded_query], embedded_documents)[0]
|
|
@@ -87,7 +86,7 @@ class EmbeddingsFilter(BaseDocumentCompressor):
|
|
|
87
86
|
included_idxs = np.argsort(similarity)[::-1][: self.k]
|
|
88
87
|
if self.similarity_threshold is not None:
|
|
89
88
|
similar_enough = np.where(
|
|
90
|
-
similarity[included_idxs] > self.similarity_threshold
|
|
89
|
+
similarity[included_idxs] > self.similarity_threshold,
|
|
91
90
|
)
|
|
92
91
|
included_idxs = included_idxs[similar_enough]
|
|
93
92
|
for i in included_idxs:
|
|
@@ -106,21 +105,22 @@ class EmbeddingsFilter(BaseDocumentCompressor):
|
|
|
106
105
|
_aget_embeddings_from_stateful_docs,
|
|
107
106
|
get_stateful_documents,
|
|
108
107
|
)
|
|
109
|
-
except ImportError:
|
|
110
|
-
|
|
108
|
+
except ImportError as e:
|
|
109
|
+
msg = (
|
|
111
110
|
"To use please install langchain-community "
|
|
112
111
|
"with `pip install langchain-community`."
|
|
113
112
|
)
|
|
113
|
+
raise ImportError(msg) from e
|
|
114
114
|
|
|
115
115
|
try:
|
|
116
116
|
import numpy as np
|
|
117
117
|
except ImportError as e:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
) from e
|
|
118
|
+
msg = "Could not import numpy, please install with `pip install numpy`."
|
|
119
|
+
raise ImportError(msg) from e
|
|
121
120
|
stateful_documents = get_stateful_documents(documents)
|
|
122
121
|
embedded_documents = await _aget_embeddings_from_stateful_docs(
|
|
123
|
-
self.embeddings,
|
|
122
|
+
self.embeddings,
|
|
123
|
+
stateful_documents,
|
|
124
124
|
)
|
|
125
125
|
embedded_query = await self.embeddings.aembed_query(query)
|
|
126
126
|
similarity = self.similarity_fn([embedded_query], embedded_documents)[0]
|
|
@@ -129,7 +129,7 @@ class EmbeddingsFilter(BaseDocumentCompressor):
|
|
|
129
129
|
included_idxs = np.argsort(similarity)[::-1][: self.k]
|
|
130
130
|
if self.similarity_threshold is not None:
|
|
131
131
|
similar_enough = np.where(
|
|
132
|
-
similarity[included_idxs] > self.similarity_threshold
|
|
132
|
+
similarity[included_idxs] > self.similarity_threshold,
|
|
133
133
|
)
|
|
134
134
|
included_idxs = included_idxs[similar_enough]
|
|
135
135
|
for i in included_idxs:
|
|
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
|
|
|
11
11
|
# Used to consolidate logic for raising deprecation warnings and
|
|
12
12
|
# handling optional imports.
|
|
13
13
|
DEPRECATED_LOOKUP = {
|
|
14
|
-
"FlashrankRerank": "langchain_community.document_compressors.flashrank_rerank"
|
|
14
|
+
"FlashrankRerank": "langchain_community.document_compressors.flashrank_rerank",
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
_import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
|