langchain 0.3.26__py3-none-any.whl → 0.3.27__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of langchain might be problematic. Click here for more details.
- langchain/__init__.py +110 -96
- langchain/_api/__init__.py +2 -2
- langchain/_api/deprecation.py +3 -3
- langchain/_api/module_import.py +51 -46
- langchain/_api/path.py +1 -1
- langchain/adapters/openai.py +8 -8
- langchain/agents/__init__.py +15 -12
- langchain/agents/agent.py +160 -133
- langchain/agents/agent_iterator.py +31 -14
- langchain/agents/agent_toolkits/__init__.py +7 -6
- langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
- langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
- langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
- langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
- langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
- langchain/agents/agent_toolkits/csv/__init__.py +4 -2
- langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
- langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
- langchain/agents/agent_toolkits/github/toolkit.py +9 -9
- langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
- langchain/agents/agent_toolkits/json/base.py +1 -1
- langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
- langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
- langchain/agents/agent_toolkits/openapi/base.py +1 -1
- langchain/agents/agent_toolkits/openapi/planner.py +2 -2
- langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
- langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
- langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
- langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
- langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
- langchain/agents/agent_toolkits/powerbi/base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
- langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/python/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
- langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/sql/prompt.py +1 -1
- langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/vectorstore/base.py +2 -2
- langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
- langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
- langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
- langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
- langchain/agents/agent_types.py +6 -6
- langchain/agents/chat/base.py +6 -12
- langchain/agents/chat/output_parser.py +9 -6
- langchain/agents/chat/prompt.py +3 -4
- langchain/agents/conversational/base.py +9 -5
- langchain/agents/conversational/output_parser.py +4 -2
- langchain/agents/conversational/prompt.py +2 -3
- langchain/agents/conversational_chat/base.py +7 -5
- langchain/agents/conversational_chat/output_parser.py +9 -11
- langchain/agents/conversational_chat/prompt.py +5 -6
- langchain/agents/format_scratchpad/__init__.py +3 -3
- langchain/agents/format_scratchpad/log_to_messages.py +1 -1
- langchain/agents/format_scratchpad/openai_functions.py +8 -6
- langchain/agents/format_scratchpad/tools.py +5 -3
- langchain/agents/format_scratchpad/xml.py +33 -2
- langchain/agents/initialize.py +16 -8
- langchain/agents/json_chat/base.py +18 -18
- langchain/agents/json_chat/prompt.py +2 -3
- langchain/agents/load_tools.py +2 -1
- langchain/agents/loading.py +28 -18
- langchain/agents/mrkl/base.py +9 -4
- langchain/agents/mrkl/output_parser.py +17 -13
- langchain/agents/mrkl/prompt.py +1 -2
- langchain/agents/openai_assistant/base.py +80 -70
- langchain/agents/openai_functions_agent/base.py +46 -37
- langchain/agents/openai_functions_multi_agent/base.py +39 -26
- langchain/agents/openai_tools/base.py +8 -8
- langchain/agents/output_parsers/__init__.py +3 -3
- langchain/agents/output_parsers/json.py +6 -6
- langchain/agents/output_parsers/openai_functions.py +15 -7
- langchain/agents/output_parsers/openai_tools.py +9 -4
- langchain/agents/output_parsers/react_json_single_input.py +10 -5
- langchain/agents/output_parsers/react_single_input.py +15 -11
- langchain/agents/output_parsers/self_ask.py +3 -2
- langchain/agents/output_parsers/tools.py +18 -13
- langchain/agents/output_parsers/xml.py +99 -28
- langchain/agents/react/agent.py +4 -4
- langchain/agents/react/base.py +22 -17
- langchain/agents/react/output_parser.py +5 -6
- langchain/agents/react/textworld_prompt.py +0 -1
- langchain/agents/react/wiki_prompt.py +14 -15
- langchain/agents/schema.py +3 -2
- langchain/agents/self_ask_with_search/base.py +19 -15
- langchain/agents/self_ask_with_search/prompt.py +0 -1
- langchain/agents/structured_chat/base.py +14 -11
- langchain/agents/structured_chat/output_parser.py +16 -18
- langchain/agents/structured_chat/prompt.py +3 -4
- langchain/agents/tool_calling_agent/base.py +7 -6
- langchain/agents/tools.py +2 -2
- langchain/agents/utils.py +2 -3
- langchain/agents/xml/base.py +5 -5
- langchain/agents/xml/prompt.py +1 -2
- langchain/cache.py +12 -12
- langchain/callbacks/__init__.py +11 -11
- langchain/callbacks/aim_callback.py +2 -2
- langchain/callbacks/argilla_callback.py +1 -1
- langchain/callbacks/arize_callback.py +1 -1
- langchain/callbacks/arthur_callback.py +1 -1
- langchain/callbacks/base.py +7 -7
- langchain/callbacks/clearml_callback.py +1 -1
- langchain/callbacks/comet_ml_callback.py +1 -1
- langchain/callbacks/confident_callback.py +1 -1
- langchain/callbacks/context_callback.py +1 -1
- langchain/callbacks/flyte_callback.py +1 -1
- langchain/callbacks/human.py +2 -2
- langchain/callbacks/infino_callback.py +1 -1
- langchain/callbacks/labelstudio_callback.py +1 -1
- langchain/callbacks/llmonitor_callback.py +1 -1
- langchain/callbacks/manager.py +5 -5
- langchain/callbacks/mlflow_callback.py +2 -2
- langchain/callbacks/openai_info.py +1 -1
- langchain/callbacks/promptlayer_callback.py +1 -1
- langchain/callbacks/sagemaker_callback.py +1 -1
- langchain/callbacks/streaming_aiter.py +4 -1
- langchain/callbacks/streaming_aiter_final_only.py +5 -3
- langchain/callbacks/streaming_stdout_final_only.py +5 -3
- langchain/callbacks/streamlit/__init__.py +3 -2
- langchain/callbacks/streamlit/mutable_expander.py +1 -1
- langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
- langchain/callbacks/tracers/__init__.py +1 -1
- langchain/callbacks/tracers/comet.py +1 -1
- langchain/callbacks/tracers/evaluation.py +1 -1
- langchain/callbacks/tracers/log_stream.py +1 -1
- langchain/callbacks/tracers/logging.py +1 -1
- langchain/callbacks/tracers/stdout.py +1 -1
- langchain/callbacks/trubrics_callback.py +1 -1
- langchain/callbacks/utils.py +4 -4
- langchain/callbacks/wandb_callback.py +1 -1
- langchain/callbacks/whylabs_callback.py +1 -1
- langchain/chains/api/base.py +36 -22
- langchain/chains/api/news_docs.py +1 -2
- langchain/chains/api/open_meteo_docs.py +1 -2
- langchain/chains/api/openapi/requests_chain.py +1 -1
- langchain/chains/api/openapi/response_chain.py +1 -1
- langchain/chains/api/podcast_docs.py +1 -2
- langchain/chains/api/prompt.py +1 -2
- langchain/chains/api/tmdb_docs.py +1 -2
- langchain/chains/base.py +88 -54
- langchain/chains/chat_vector_db/prompts.py +2 -3
- langchain/chains/combine_documents/__init__.py +1 -1
- langchain/chains/combine_documents/base.py +23 -10
- langchain/chains/combine_documents/map_reduce.py +38 -30
- langchain/chains/combine_documents/map_rerank.py +33 -20
- langchain/chains/combine_documents/reduce.py +47 -26
- langchain/chains/combine_documents/refine.py +26 -17
- langchain/chains/combine_documents/stuff.py +19 -12
- langchain/chains/constitutional_ai/base.py +4 -4
- langchain/chains/constitutional_ai/principles.py +22 -25
- langchain/chains/constitutional_ai/prompts.py +25 -28
- langchain/chains/conversation/base.py +5 -3
- langchain/chains/conversation/memory.py +5 -5
- langchain/chains/conversation/prompt.py +5 -5
- langchain/chains/conversational_retrieval/base.py +41 -20
- langchain/chains/conversational_retrieval/prompts.py +2 -3
- langchain/chains/elasticsearch_database/base.py +8 -9
- langchain/chains/elasticsearch_database/prompts.py +2 -3
- langchain/chains/ernie_functions/__init__.py +2 -2
- langchain/chains/example_generator.py +3 -1
- langchain/chains/flare/base.py +26 -12
- langchain/chains/graph_qa/cypher.py +2 -2
- langchain/chains/graph_qa/falkordb.py +1 -1
- langchain/chains/graph_qa/gremlin.py +1 -1
- langchain/chains/graph_qa/neptune_sparql.py +1 -1
- langchain/chains/graph_qa/prompts.py +2 -2
- langchain/chains/history_aware_retriever.py +2 -1
- langchain/chains/hyde/base.py +6 -5
- langchain/chains/hyde/prompts.py +5 -6
- langchain/chains/llm.py +77 -61
- langchain/chains/llm_bash/__init__.py +2 -1
- langchain/chains/llm_checker/base.py +7 -5
- langchain/chains/llm_checker/prompt.py +3 -4
- langchain/chains/llm_math/base.py +16 -9
- langchain/chains/llm_math/prompt.py +1 -2
- langchain/chains/llm_summarization_checker/base.py +9 -6
- langchain/chains/llm_symbolic_math/__init__.py +2 -1
- langchain/chains/loading.py +151 -95
- langchain/chains/mapreduce.py +4 -3
- langchain/chains/moderation.py +8 -9
- langchain/chains/natbot/base.py +8 -8
- langchain/chains/natbot/crawler.py +73 -76
- langchain/chains/natbot/prompt.py +2 -3
- langchain/chains/openai_functions/__init__.py +7 -7
- langchain/chains/openai_functions/base.py +13 -10
- langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
- langchain/chains/openai_functions/extraction.py +19 -19
- langchain/chains/openai_functions/openapi.py +35 -35
- langchain/chains/openai_functions/qa_with_structure.py +19 -12
- langchain/chains/openai_functions/tagging.py +2 -4
- langchain/chains/openai_tools/extraction.py +7 -8
- langchain/chains/qa_generation/base.py +4 -3
- langchain/chains/qa_generation/prompt.py +5 -5
- langchain/chains/qa_with_sources/base.py +14 -6
- langchain/chains/qa_with_sources/loading.py +16 -8
- langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
- langchain/chains/qa_with_sources/refine_prompts.py +0 -1
- langchain/chains/qa_with_sources/retrieval.py +14 -5
- langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
- langchain/chains/qa_with_sources/vector_db.py +17 -6
- langchain/chains/query_constructor/base.py +34 -33
- langchain/chains/query_constructor/ir.py +4 -4
- langchain/chains/query_constructor/parser.py +37 -32
- langchain/chains/query_constructor/prompt.py +5 -6
- langchain/chains/question_answering/chain.py +21 -10
- langchain/chains/question_answering/map_reduce_prompt.py +14 -14
- langchain/chains/question_answering/map_rerank_prompt.py +3 -3
- langchain/chains/question_answering/refine_prompts.py +2 -5
- langchain/chains/question_answering/stuff_prompt.py +5 -5
- langchain/chains/retrieval.py +1 -3
- langchain/chains/retrieval_qa/base.py +34 -27
- langchain/chains/retrieval_qa/prompt.py +1 -2
- langchain/chains/router/__init__.py +3 -3
- langchain/chains/router/base.py +24 -20
- langchain/chains/router/embedding_router.py +12 -8
- langchain/chains/router/llm_router.py +17 -16
- langchain/chains/router/multi_prompt.py +2 -2
- langchain/chains/router/multi_retrieval_qa.py +10 -5
- langchain/chains/sequential.py +30 -18
- langchain/chains/sql_database/prompt.py +14 -16
- langchain/chains/sql_database/query.py +6 -5
- langchain/chains/structured_output/__init__.py +1 -1
- langchain/chains/structured_output/base.py +75 -67
- langchain/chains/summarize/chain.py +11 -5
- langchain/chains/summarize/map_reduce_prompt.py +0 -1
- langchain/chains/summarize/stuff_prompt.py +0 -1
- langchain/chains/transform.py +5 -6
- langchain/chat_loaders/facebook_messenger.py +1 -1
- langchain/chat_loaders/langsmith.py +1 -1
- langchain/chat_loaders/utils.py +3 -3
- langchain/chat_models/__init__.py +20 -19
- langchain/chat_models/anthropic.py +1 -1
- langchain/chat_models/azureml_endpoint.py +1 -1
- langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
- langchain/chat_models/base.py +160 -123
- langchain/chat_models/bedrock.py +1 -1
- langchain/chat_models/fake.py +1 -1
- langchain/chat_models/meta.py +1 -1
- langchain/chat_models/pai_eas_endpoint.py +1 -1
- langchain/chat_models/promptlayer_openai.py +1 -1
- langchain/chat_models/volcengine_maas.py +1 -1
- langchain/docstore/base.py +1 -1
- langchain/document_loaders/__init__.py +9 -9
- langchain/document_loaders/airbyte.py +3 -3
- langchain/document_loaders/assemblyai.py +1 -1
- langchain/document_loaders/azure_blob_storage_container.py +1 -1
- langchain/document_loaders/azure_blob_storage_file.py +1 -1
- langchain/document_loaders/baiducloud_bos_file.py +1 -1
- langchain/document_loaders/base.py +1 -1
- langchain/document_loaders/blob_loaders/__init__.py +1 -1
- langchain/document_loaders/blockchain.py +1 -1
- langchain/document_loaders/chatgpt.py +1 -1
- langchain/document_loaders/college_confidential.py +1 -1
- langchain/document_loaders/confluence.py +1 -1
- langchain/document_loaders/email.py +1 -1
- langchain/document_loaders/facebook_chat.py +1 -1
- langchain/document_loaders/markdown.py +1 -1
- langchain/document_loaders/notebook.py +1 -1
- langchain/document_loaders/org_mode.py +1 -1
- langchain/document_loaders/parsers/__init__.py +1 -1
- langchain/document_loaders/parsers/docai.py +1 -1
- langchain/document_loaders/parsers/generic.py +1 -1
- langchain/document_loaders/parsers/html/__init__.py +1 -1
- langchain/document_loaders/parsers/html/bs4.py +1 -1
- langchain/document_loaders/parsers/language/cobol.py +1 -1
- langchain/document_loaders/parsers/language/python.py +1 -1
- langchain/document_loaders/parsers/msword.py +1 -1
- langchain/document_loaders/parsers/pdf.py +5 -5
- langchain/document_loaders/parsers/registry.py +1 -1
- langchain/document_loaders/pdf.py +8 -8
- langchain/document_loaders/powerpoint.py +1 -1
- langchain/document_loaders/pyspark_dataframe.py +1 -1
- langchain/document_loaders/telegram.py +2 -2
- langchain/document_loaders/tencent_cos_directory.py +1 -1
- langchain/document_loaders/unstructured.py +5 -5
- langchain/document_loaders/url_playwright.py +1 -1
- langchain/document_loaders/whatsapp_chat.py +1 -1
- langchain/document_loaders/youtube.py +2 -2
- langchain/document_transformers/__init__.py +3 -3
- langchain/document_transformers/beautiful_soup_transformer.py +1 -1
- langchain/document_transformers/doctran_text_extract.py +1 -1
- langchain/document_transformers/doctran_text_qa.py +1 -1
- langchain/document_transformers/doctran_text_translate.py +1 -1
- langchain/document_transformers/embeddings_redundant_filter.py +3 -3
- langchain/document_transformers/google_translate.py +1 -1
- langchain/document_transformers/html2text.py +1 -1
- langchain/document_transformers/nuclia_text_transform.py +1 -1
- langchain/embeddings/__init__.py +5 -5
- langchain/embeddings/base.py +33 -24
- langchain/embeddings/cache.py +36 -31
- langchain/embeddings/fake.py +1 -1
- langchain/embeddings/huggingface.py +2 -2
- langchain/evaluation/__init__.py +22 -22
- langchain/evaluation/agents/trajectory_eval_chain.py +23 -23
- langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
- langchain/evaluation/comparison/__init__.py +1 -1
- langchain/evaluation/comparison/eval_chain.py +20 -13
- langchain/evaluation/comparison/prompt.py +1 -2
- langchain/evaluation/criteria/__init__.py +1 -1
- langchain/evaluation/criteria/eval_chain.py +20 -11
- langchain/evaluation/criteria/prompt.py +2 -3
- langchain/evaluation/embedding_distance/base.py +23 -20
- langchain/evaluation/loading.py +15 -11
- langchain/evaluation/parsing/base.py +4 -1
- langchain/evaluation/parsing/json_distance.py +5 -2
- langchain/evaluation/parsing/json_schema.py +12 -8
- langchain/evaluation/qa/__init__.py +1 -1
- langchain/evaluation/qa/eval_chain.py +12 -5
- langchain/evaluation/qa/eval_prompt.py +7 -8
- langchain/evaluation/qa/generate_chain.py +2 -1
- langchain/evaluation/qa/generate_prompt.py +2 -4
- langchain/evaluation/schema.py +38 -30
- langchain/evaluation/scoring/__init__.py +1 -1
- langchain/evaluation/scoring/eval_chain.py +22 -15
- langchain/evaluation/scoring/prompt.py +0 -1
- langchain/evaluation/string_distance/base.py +14 -9
- langchain/globals.py +12 -11
- langchain/graphs/__init__.py +6 -6
- langchain/graphs/graph_document.py +1 -1
- langchain/graphs/networkx_graph.py +2 -2
- langchain/hub.py +9 -11
- langchain/indexes/__init__.py +3 -3
- langchain/indexes/_sql_record_manager.py +63 -46
- langchain/indexes/prompts/entity_extraction.py +1 -2
- langchain/indexes/prompts/entity_summarization.py +1 -2
- langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
- langchain/indexes/vectorstore.py +35 -19
- langchain/llms/__init__.py +13 -13
- langchain/llms/ai21.py +1 -1
- langchain/llms/azureml_endpoint.py +4 -4
- langchain/llms/base.py +15 -7
- langchain/llms/bedrock.py +1 -1
- langchain/llms/cloudflare_workersai.py +1 -1
- langchain/llms/gradient_ai.py +1 -1
- langchain/llms/loading.py +1 -1
- langchain/llms/openai.py +1 -1
- langchain/llms/sagemaker_endpoint.py +1 -1
- langchain/load/dump.py +1 -1
- langchain/load/load.py +1 -1
- langchain/load/serializable.py +3 -3
- langchain/memory/__init__.py +3 -3
- langchain/memory/buffer.py +9 -7
- langchain/memory/chat_memory.py +14 -8
- langchain/memory/chat_message_histories/__init__.py +1 -1
- langchain/memory/chat_message_histories/astradb.py +1 -1
- langchain/memory/chat_message_histories/cassandra.py +1 -1
- langchain/memory/chat_message_histories/cosmos_db.py +1 -1
- langchain/memory/chat_message_histories/dynamodb.py +1 -1
- langchain/memory/chat_message_histories/elasticsearch.py +1 -1
- langchain/memory/chat_message_histories/file.py +1 -1
- langchain/memory/chat_message_histories/firestore.py +1 -1
- langchain/memory/chat_message_histories/momento.py +1 -1
- langchain/memory/chat_message_histories/mongodb.py +1 -1
- langchain/memory/chat_message_histories/neo4j.py +1 -1
- langchain/memory/chat_message_histories/postgres.py +1 -1
- langchain/memory/chat_message_histories/redis.py +1 -1
- langchain/memory/chat_message_histories/rocksetdb.py +1 -1
- langchain/memory/chat_message_histories/singlestoredb.py +1 -1
- langchain/memory/chat_message_histories/streamlit.py +1 -1
- langchain/memory/chat_message_histories/upstash_redis.py +1 -1
- langchain/memory/chat_message_histories/xata.py +1 -1
- langchain/memory/chat_message_histories/zep.py +1 -1
- langchain/memory/combined.py +13 -12
- langchain/memory/entity.py +84 -61
- langchain/memory/prompt.py +10 -11
- langchain/memory/readonly.py +0 -2
- langchain/memory/simple.py +1 -3
- langchain/memory/summary.py +13 -11
- langchain/memory/summary_buffer.py +17 -8
- langchain/memory/utils.py +3 -2
- langchain/memory/vectorstore.py +12 -5
- langchain/memory/vectorstore_token_buffer_memory.py +5 -5
- langchain/model_laboratory.py +12 -11
- langchain/output_parsers/__init__.py +4 -4
- langchain/output_parsers/boolean.py +7 -4
- langchain/output_parsers/combining.py +10 -5
- langchain/output_parsers/datetime.py +32 -31
- langchain/output_parsers/enum.py +5 -3
- langchain/output_parsers/fix.py +52 -52
- langchain/output_parsers/format_instructions.py +6 -8
- langchain/output_parsers/json.py +2 -2
- langchain/output_parsers/list.py +2 -2
- langchain/output_parsers/loading.py +9 -9
- langchain/output_parsers/openai_functions.py +3 -3
- langchain/output_parsers/openai_tools.py +1 -1
- langchain/output_parsers/pandas_dataframe.py +43 -47
- langchain/output_parsers/prompts.py +1 -2
- langchain/output_parsers/rail_parser.py +1 -1
- langchain/output_parsers/regex.py +7 -8
- langchain/output_parsers/regex_dict.py +7 -10
- langchain/output_parsers/retry.py +77 -78
- langchain/output_parsers/structured.py +11 -6
- langchain/output_parsers/yaml.py +15 -11
- langchain/prompts/__init__.py +5 -3
- langchain/prompts/base.py +5 -5
- langchain/prompts/chat.py +8 -8
- langchain/prompts/example_selector/__init__.py +3 -1
- langchain/prompts/example_selector/semantic_similarity.py +2 -2
- langchain/prompts/few_shot.py +1 -1
- langchain/prompts/loading.py +3 -3
- langchain/prompts/prompt.py +1 -1
- langchain/retrievers/__init__.py +5 -5
- langchain/retrievers/bedrock.py +2 -2
- langchain/retrievers/bm25.py +1 -1
- langchain/retrievers/contextual_compression.py +14 -8
- langchain/retrievers/docarray.py +1 -1
- langchain/retrievers/document_compressors/__init__.py +5 -4
- langchain/retrievers/document_compressors/base.py +12 -6
- langchain/retrievers/document_compressors/chain_extract.py +2 -2
- langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
- langchain/retrievers/document_compressors/chain_filter.py +9 -9
- langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
- langchain/retrievers/document_compressors/cohere_rerank.py +15 -15
- langchain/retrievers/document_compressors/embeddings_filter.py +21 -17
- langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
- langchain/retrievers/document_compressors/listwise_rerank.py +7 -5
- langchain/retrievers/ensemble.py +28 -25
- langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
- langchain/retrievers/google_vertex_ai_search.py +2 -2
- langchain/retrievers/kendra.py +10 -10
- langchain/retrievers/llama_index.py +1 -1
- langchain/retrievers/merger_retriever.py +11 -11
- langchain/retrievers/milvus.py +1 -1
- langchain/retrievers/multi_query.py +32 -26
- langchain/retrievers/multi_vector.py +20 -8
- langchain/retrievers/parent_document_retriever.py +18 -9
- langchain/retrievers/re_phraser.py +6 -5
- langchain/retrievers/self_query/base.py +138 -127
- langchain/retrievers/time_weighted_retriever.py +18 -7
- langchain/retrievers/zilliz.py +1 -1
- langchain/runnables/openai_functions.py +6 -2
- langchain/schema/__init__.py +23 -23
- langchain/schema/cache.py +1 -1
- langchain/schema/callbacks/base.py +7 -7
- langchain/schema/callbacks/manager.py +19 -19
- langchain/schema/callbacks/tracers/base.py +1 -1
- langchain/schema/callbacks/tracers/evaluation.py +1 -1
- langchain/schema/callbacks/tracers/langchain.py +1 -1
- langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
- langchain/schema/callbacks/tracers/log_stream.py +1 -1
- langchain/schema/callbacks/tracers/schemas.py +8 -8
- langchain/schema/callbacks/tracers/stdout.py +3 -3
- langchain/schema/document.py +1 -1
- langchain/schema/language_model.py +2 -2
- langchain/schema/messages.py +12 -12
- langchain/schema/output.py +3 -3
- langchain/schema/output_parser.py +3 -3
- langchain/schema/runnable/__init__.py +3 -3
- langchain/schema/runnable/base.py +9 -9
- langchain/schema/runnable/config.py +5 -5
- langchain/schema/runnable/configurable.py +1 -1
- langchain/schema/runnable/history.py +1 -1
- langchain/schema/runnable/passthrough.py +1 -1
- langchain/schema/runnable/utils.py +16 -16
- langchain/schema/vectorstore.py +1 -1
- langchain/smith/__init__.py +1 -1
- langchain/smith/evaluation/__init__.py +2 -2
- langchain/smith/evaluation/config.py +10 -7
- langchain/smith/evaluation/name_generation.py +3 -3
- langchain/smith/evaluation/progress.py +11 -2
- langchain/smith/evaluation/runner_utils.py +179 -127
- langchain/smith/evaluation/string_run_evaluator.py +75 -68
- langchain/storage/__init__.py +2 -2
- langchain/storage/_lc_store.py +4 -2
- langchain/storage/encoder_backed.py +6 -2
- langchain/storage/file_system.py +19 -16
- langchain/storage/in_memory.py +1 -1
- langchain/storage/upstash_redis.py +1 -1
- langchain/text_splitter.py +15 -15
- langchain/tools/__init__.py +28 -26
- langchain/tools/ainetwork/app.py +1 -1
- langchain/tools/ainetwork/base.py +1 -1
- langchain/tools/ainetwork/owner.py +1 -1
- langchain/tools/ainetwork/rule.py +1 -1
- langchain/tools/ainetwork/transfer.py +1 -1
- langchain/tools/ainetwork/value.py +1 -1
- langchain/tools/amadeus/closest_airport.py +1 -1
- langchain/tools/amadeus/flight_search.py +1 -1
- langchain/tools/azure_cognitive_services/__init__.py +1 -1
- langchain/tools/base.py +4 -4
- langchain/tools/bearly/tool.py +1 -1
- langchain/tools/bing_search/__init__.py +1 -1
- langchain/tools/bing_search/tool.py +1 -1
- langchain/tools/dataforseo_api_search/__init__.py +1 -1
- langchain/tools/dataforseo_api_search/tool.py +1 -1
- langchain/tools/ddg_search/tool.py +1 -1
- langchain/tools/e2b_data_analysis/tool.py +2 -2
- langchain/tools/edenai/__init__.py +1 -1
- langchain/tools/file_management/__init__.py +1 -1
- langchain/tools/file_management/copy.py +1 -1
- langchain/tools/file_management/delete.py +1 -1
- langchain/tools/gmail/__init__.py +2 -2
- langchain/tools/gmail/get_message.py +1 -1
- langchain/tools/gmail/search.py +1 -1
- langchain/tools/gmail/send_message.py +1 -1
- langchain/tools/google_finance/__init__.py +1 -1
- langchain/tools/google_finance/tool.py +1 -1
- langchain/tools/google_scholar/__init__.py +1 -1
- langchain/tools/google_scholar/tool.py +1 -1
- langchain/tools/google_search/__init__.py +1 -1
- langchain/tools/google_search/tool.py +1 -1
- langchain/tools/google_serper/__init__.py +1 -1
- langchain/tools/google_serper/tool.py +1 -1
- langchain/tools/google_trends/__init__.py +1 -1
- langchain/tools/google_trends/tool.py +1 -1
- langchain/tools/jira/tool.py +20 -1
- langchain/tools/json/tool.py +25 -3
- langchain/tools/memorize/tool.py +1 -1
- langchain/tools/multion/__init__.py +1 -1
- langchain/tools/multion/update_session.py +1 -1
- langchain/tools/office365/__init__.py +2 -2
- langchain/tools/office365/events_search.py +1 -1
- langchain/tools/office365/messages_search.py +1 -1
- langchain/tools/office365/send_event.py +1 -1
- langchain/tools/office365/send_message.py +1 -1
- langchain/tools/openapi/utils/api_models.py +6 -6
- langchain/tools/playwright/__init__.py +5 -5
- langchain/tools/playwright/click.py +1 -1
- langchain/tools/playwright/extract_hyperlinks.py +1 -1
- langchain/tools/playwright/get_elements.py +1 -1
- langchain/tools/playwright/navigate.py +1 -1
- langchain/tools/plugin.py +2 -2
- langchain/tools/powerbi/tool.py +1 -1
- langchain/tools/python/__init__.py +2 -1
- langchain/tools/reddit_search/tool.py +1 -1
- langchain/tools/render.py +2 -2
- langchain/tools/requests/tool.py +2 -2
- langchain/tools/searchapi/tool.py +1 -1
- langchain/tools/searx_search/tool.py +1 -1
- langchain/tools/slack/get_message.py +1 -1
- langchain/tools/spark_sql/tool.py +1 -1
- langchain/tools/sql_database/tool.py +1 -1
- langchain/tools/tavily_search/__init__.py +1 -1
- langchain/tools/tavily_search/tool.py +1 -1
- langchain/tools/zapier/__init__.py +1 -1
- langchain/tools/zapier/tool.py +24 -2
- langchain/utilities/__init__.py +4 -4
- langchain/utilities/arcee.py +4 -4
- langchain/utilities/clickup.py +4 -4
- langchain/utilities/dalle_image_generator.py +1 -1
- langchain/utilities/dataforseo_api_search.py +1 -1
- langchain/utilities/opaqueprompts.py +1 -1
- langchain/utilities/reddit_search.py +1 -1
- langchain/utilities/sql_database.py +1 -1
- langchain/utilities/tavily_search.py +1 -1
- langchain/utilities/vertexai.py +2 -2
- langchain/utils/__init__.py +1 -1
- langchain/utils/aiter.py +1 -1
- langchain/utils/html.py +3 -3
- langchain/utils/input.py +1 -1
- langchain/utils/iter.py +1 -1
- langchain/utils/json_schema.py +1 -3
- langchain/utils/strings.py +1 -1
- langchain/utils/utils.py +6 -6
- langchain/vectorstores/__init__.py +5 -5
- langchain/vectorstores/alibabacloud_opensearch.py +1 -1
- langchain/vectorstores/azure_cosmos_db.py +1 -1
- langchain/vectorstores/clickhouse.py +1 -1
- langchain/vectorstores/elastic_vector_search.py +1 -1
- langchain/vectorstores/elasticsearch.py +2 -2
- langchain/vectorstores/myscale.py +1 -1
- langchain/vectorstores/neo4j_vector.py +1 -1
- langchain/vectorstores/pgembedding.py +1 -1
- langchain/vectorstores/qdrant.py +1 -1
- langchain/vectorstores/redis/__init__.py +1 -1
- langchain/vectorstores/redis/base.py +1 -1
- langchain/vectorstores/redis/filters.py +4 -4
- langchain/vectorstores/redis/schema.py +6 -6
- langchain/vectorstores/sklearn.py +2 -2
- langchain/vectorstores/starrocks.py +1 -1
- langchain/vectorstores/utils.py +1 -1
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/METADATA +4 -4
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/RECORD +580 -580
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
- {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
|
@@ -28,8 +28,7 @@ def _get_messages_from_run_dict(messages: list[dict]) -> list[BaseMessage]:
|
|
|
28
28
|
first_message = messages[0]
|
|
29
29
|
if "lc" in first_message:
|
|
30
30
|
return [load(dumpd(message)) for message in messages]
|
|
31
|
-
|
|
32
|
-
return messages_from_dict(messages)
|
|
31
|
+
return messages_from_dict(messages)
|
|
33
32
|
|
|
34
33
|
|
|
35
34
|
class StringRunMapper(Serializable):
|
|
@@ -47,7 +46,8 @@ class StringRunMapper(Serializable):
|
|
|
47
46
|
def __call__(self, run: Run) -> dict[str, str]:
|
|
48
47
|
"""Maps the Run to a dictionary."""
|
|
49
48
|
if not run.outputs:
|
|
50
|
-
|
|
49
|
+
msg = f"Run {run.id} has no outputs to evaluate."
|
|
50
|
+
raise ValueError(msg)
|
|
51
51
|
return self.map(run)
|
|
52
52
|
|
|
53
53
|
|
|
@@ -63,9 +63,11 @@ class LLMStringRunMapper(StringRunMapper):
|
|
|
63
63
|
# Runs from Tracer have messages as a list of lists of dicts
|
|
64
64
|
chat_messages = _get_messages_from_run_dict(messages[0])
|
|
65
65
|
else:
|
|
66
|
-
|
|
66
|
+
msg = f"Could not extract messages to evaluate {messages}"
|
|
67
|
+
raise ValueError(msg)
|
|
67
68
|
return get_buffer_string(chat_messages)
|
|
68
|
-
|
|
69
|
+
msg = f"Could not extract messages to evaluate {messages}"
|
|
70
|
+
raise ValueError(msg)
|
|
69
71
|
|
|
70
72
|
def serialize_inputs(self, inputs: dict) -> str:
|
|
71
73
|
if "prompts" in inputs: # Should we even accept this?
|
|
@@ -75,15 +77,18 @@ class LLMStringRunMapper(StringRunMapper):
|
|
|
75
77
|
elif "messages" in inputs:
|
|
76
78
|
input_ = self.serialize_chat_messages(inputs["messages"])
|
|
77
79
|
else:
|
|
78
|
-
|
|
80
|
+
msg = "LLM Run must have either messages or prompts as inputs."
|
|
81
|
+
raise ValueError(msg)
|
|
79
82
|
return input_
|
|
80
83
|
|
|
81
84
|
def serialize_outputs(self, outputs: dict) -> str:
|
|
82
85
|
if not outputs.get("generations"):
|
|
83
|
-
|
|
86
|
+
msg = "Cannot evaluate LLM Run without generations."
|
|
87
|
+
raise ValueError(msg)
|
|
84
88
|
generations: list[dict] = outputs["generations"]
|
|
85
89
|
if not generations:
|
|
86
|
-
|
|
90
|
+
msg = "Cannot evaluate LLM run with empty generations."
|
|
91
|
+
raise ValueError(msg)
|
|
87
92
|
first_generation: dict = generations[0]
|
|
88
93
|
if isinstance(first_generation, list):
|
|
89
94
|
# Runs from Tracer have generations as a list of lists of dicts
|
|
@@ -98,30 +103,25 @@ class LLMStringRunMapper(StringRunMapper):
|
|
|
98
103
|
def map(self, run: Run) -> dict[str, str]:
|
|
99
104
|
"""Maps the Run to a dictionary."""
|
|
100
105
|
if run.run_type != "llm":
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
msg = "LLM RunMapper only supports LLM runs."
|
|
107
|
+
raise ValueError(msg)
|
|
108
|
+
if not run.outputs:
|
|
103
109
|
if run.error:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
output_ = self.serialize_outputs(run.outputs)
|
|
120
|
-
except Exception as e:
|
|
121
|
-
raise ValueError(
|
|
122
|
-
f"Could not parse LM prediction from run outputs {run.outputs}"
|
|
123
|
-
) from e
|
|
124
|
-
return {"input": inputs, "prediction": output_}
|
|
110
|
+
msg = f"Cannot evaluate errored LLM run {run.id}: {run.error}"
|
|
111
|
+
raise ValueError(msg)
|
|
112
|
+
msg = f"Run {run.id} has no outputs. Cannot evaluate this run."
|
|
113
|
+
raise ValueError(msg)
|
|
114
|
+
try:
|
|
115
|
+
inputs = self.serialize_inputs(run.inputs)
|
|
116
|
+
except Exception as e:
|
|
117
|
+
msg = f"Could not parse LM input from run inputs {run.inputs}"
|
|
118
|
+
raise ValueError(msg) from e
|
|
119
|
+
try:
|
|
120
|
+
output_ = self.serialize_outputs(run.outputs)
|
|
121
|
+
except Exception as e:
|
|
122
|
+
msg = f"Could not parse LM prediction from run outputs {run.outputs}"
|
|
123
|
+
raise ValueError(msg) from e
|
|
124
|
+
return {"input": inputs, "prediction": output_}
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
class ChainStringRunMapper(StringRunMapper):
|
|
@@ -139,45 +139,47 @@ class ChainStringRunMapper(StringRunMapper):
|
|
|
139
139
|
def _get_key(self, source: dict, key: Optional[str], which: str) -> str:
|
|
140
140
|
if key is not None:
|
|
141
141
|
return source[key]
|
|
142
|
-
|
|
142
|
+
if len(source) == 1:
|
|
143
143
|
return next(iter(source.values()))
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
144
|
+
msg = (
|
|
145
|
+
f"Could not map run {which} with multiple keys: "
|
|
146
|
+
f"{source}\nPlease manually specify a {which}_key"
|
|
147
|
+
)
|
|
148
|
+
raise ValueError(msg)
|
|
149
149
|
|
|
150
150
|
def map(self, run: Run) -> dict[str, str]:
|
|
151
151
|
"""Maps the Run to a dictionary."""
|
|
152
152
|
if not run.outputs:
|
|
153
|
-
|
|
153
|
+
msg = (
|
|
154
154
|
f"Run with ID {run.id} lacks outputs required for evaluation."
|
|
155
155
|
" Ensure the Run has valid outputs."
|
|
156
156
|
)
|
|
157
|
+
raise ValueError(msg)
|
|
157
158
|
if self.input_key is not None and self.input_key not in run.inputs:
|
|
158
|
-
|
|
159
|
+
msg = (
|
|
159
160
|
f"Run with ID {run.id} is missing the expected input key"
|
|
160
161
|
f" '{self.input_key}'.\nAvailable input keys in this Run"
|
|
161
162
|
f" are: {run.inputs.keys()}.\nAdjust the evaluator's"
|
|
162
163
|
f" input_key or ensure your input data includes key"
|
|
163
164
|
f" '{self.input_key}'."
|
|
164
165
|
)
|
|
165
|
-
|
|
166
|
+
raise ValueError(msg)
|
|
167
|
+
if self.prediction_key is not None and self.prediction_key not in run.outputs:
|
|
166
168
|
available_keys = ", ".join(run.outputs.keys())
|
|
167
|
-
|
|
169
|
+
msg = (
|
|
168
170
|
f"Run with ID {run.id} doesn't have the expected prediction key"
|
|
169
171
|
f" '{self.prediction_key}'. Available prediction keys in this Run are:"
|
|
170
172
|
f" {available_keys}. Adjust the evaluator's prediction_key or"
|
|
171
173
|
" ensure the Run object's outputs the expected key."
|
|
172
174
|
)
|
|
175
|
+
raise ValueError(msg)
|
|
173
176
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
177
|
+
input_ = self._get_key(run.inputs, self.input_key, "input")
|
|
178
|
+
prediction = self._get_key(run.outputs, self.prediction_key, "prediction")
|
|
179
|
+
return {
|
|
180
|
+
"input": input_,
|
|
181
|
+
"prediction": prediction,
|
|
182
|
+
}
|
|
181
183
|
|
|
182
184
|
|
|
183
185
|
class ToolStringRunMapper(StringRunMapper):
|
|
@@ -185,7 +187,8 @@ class ToolStringRunMapper(StringRunMapper):
|
|
|
185
187
|
|
|
186
188
|
def map(self, run: Run) -> dict[str, str]:
|
|
187
189
|
if not run.outputs:
|
|
188
|
-
|
|
190
|
+
msg = f"Run {run.id} has no outputs to evaluate."
|
|
191
|
+
raise ValueError(msg)
|
|
189
192
|
return {"input": run.inputs["input"], "prediction": run.outputs["output"]}
|
|
190
193
|
|
|
191
194
|
|
|
@@ -207,36 +210,35 @@ class StringExampleMapper(Serializable):
|
|
|
207
210
|
def map(self, example: Example) -> dict[str, str]:
|
|
208
211
|
"""Maps the Example, or dataset row to a dictionary."""
|
|
209
212
|
if not example.outputs:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
)
|
|
213
|
+
msg = f"Example {example.id} has no outputs to use as a reference."
|
|
214
|
+
raise ValueError(msg)
|
|
213
215
|
if self.reference_key is None:
|
|
214
216
|
if len(example.outputs) > 1:
|
|
215
|
-
|
|
217
|
+
msg = (
|
|
216
218
|
f"Example {example.id} has multiple outputs, so you must"
|
|
217
219
|
" specify a reference_key."
|
|
218
220
|
)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
raise ValueError(msg)
|
|
222
|
+
output = next(iter(example.outputs.values()))
|
|
221
223
|
elif self.reference_key not in example.outputs:
|
|
222
|
-
|
|
224
|
+
msg = (
|
|
223
225
|
f"Example {example.id} does not have reference key"
|
|
224
226
|
f" {self.reference_key}."
|
|
225
227
|
)
|
|
228
|
+
raise ValueError(msg)
|
|
226
229
|
else:
|
|
227
230
|
output = example.outputs[self.reference_key]
|
|
228
231
|
return {
|
|
229
232
|
"reference": self.serialize_chat_messages([output])
|
|
230
233
|
if isinstance(output, dict) and output.get("type") and output.get("data")
|
|
231
|
-
else output
|
|
234
|
+
else output,
|
|
232
235
|
}
|
|
233
236
|
|
|
234
237
|
def __call__(self, example: Example) -> dict[str, str]:
|
|
235
238
|
"""Maps the Run and Example to a dictionary."""
|
|
236
239
|
if not example.outputs:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
)
|
|
240
|
+
msg = f"Example {example.id} has no outputs to use as areference label."
|
|
241
|
+
raise ValueError(msg)
|
|
240
242
|
return self.map(example)
|
|
241
243
|
|
|
242
244
|
|
|
@@ -271,16 +273,19 @@ class StringRunEvaluatorChain(Chain, RunEvaluator):
|
|
|
271
273
|
if example and self.example_mapper and self.string_evaluator.requires_reference:
|
|
272
274
|
evaluate_strings_inputs.update(self.example_mapper(example))
|
|
273
275
|
elif self.string_evaluator.requires_reference:
|
|
274
|
-
|
|
276
|
+
msg = (
|
|
275
277
|
f"Evaluator {self.name} requires an reference"
|
|
276
278
|
" example from the dataset,"
|
|
277
279
|
f" but none was provided for run {run.id}."
|
|
278
280
|
)
|
|
281
|
+
raise ValueError(msg)
|
|
279
282
|
return evaluate_strings_inputs
|
|
280
283
|
|
|
281
284
|
def _prepare_output(self, output: dict[str, Any]) -> dict[str, Any]:
|
|
282
285
|
evaluation_result = EvaluationResult(
|
|
283
|
-
key=self.name,
|
|
286
|
+
key=self.name,
|
|
287
|
+
comment=output.get("reasoning"),
|
|
288
|
+
**output,
|
|
284
289
|
)
|
|
285
290
|
if RUN_KEY in output:
|
|
286
291
|
# TODO: Not currently surfaced. Update
|
|
@@ -351,7 +356,8 @@ class StringRunEvaluatorChain(Chain, RunEvaluator):
|
|
|
351
356
|
"""Evaluate an example."""
|
|
352
357
|
try:
|
|
353
358
|
result = await self.acall(
|
|
354
|
-
{"run": run, "example": example},
|
|
359
|
+
{"run": run, "example": example},
|
|
360
|
+
include_run_info=True,
|
|
355
361
|
)
|
|
356
362
|
return self._prepare_evaluator_output(result)
|
|
357
363
|
except Exception as e:
|
|
@@ -402,12 +408,12 @@ class StringRunEvaluatorChain(Chain, RunEvaluator):
|
|
|
402
408
|
run_mapper: StringRunMapper = LLMStringRunMapper()
|
|
403
409
|
elif run_type == "chain":
|
|
404
410
|
run_mapper = ChainStringRunMapper(
|
|
405
|
-
input_key=input_key,
|
|
411
|
+
input_key=input_key,
|
|
412
|
+
prediction_key=prediction_key,
|
|
406
413
|
)
|
|
407
414
|
else:
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
)
|
|
415
|
+
msg = f"Unsupported run type {run_type}. Expected one of 'llm' or 'chain'."
|
|
416
|
+
raise ValueError(msg)
|
|
411
417
|
|
|
412
418
|
# Configure how example rows are fed as a reference string to the evaluator
|
|
413
419
|
if (
|
|
@@ -417,11 +423,12 @@ class StringRunEvaluatorChain(Chain, RunEvaluator):
|
|
|
417
423
|
):
|
|
418
424
|
example_mapper = StringExampleMapper(reference_key=reference_key)
|
|
419
425
|
elif evaluator.requires_reference:
|
|
420
|
-
|
|
426
|
+
msg = (
|
|
421
427
|
f"Evaluator {evaluator.evaluation_name} requires a reference"
|
|
422
428
|
" example from the dataset. Please specify the reference key from"
|
|
423
429
|
" amongst the dataset outputs keys."
|
|
424
430
|
)
|
|
431
|
+
raise ValueError(msg)
|
|
425
432
|
else:
|
|
426
433
|
example_mapper = None
|
|
427
434
|
return cls(
|
langchain/storage/__init__.py
CHANGED
|
@@ -44,8 +44,6 @@ def __getattr__(name: str) -> Any:
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
__all__ = [
|
|
47
|
-
"create_kv_docstore",
|
|
48
|
-
"create_lc_store",
|
|
49
47
|
"EncoderBackedStore",
|
|
50
48
|
"InMemoryByteStore",
|
|
51
49
|
"InMemoryStore",
|
|
@@ -54,4 +52,6 @@ __all__ = [
|
|
|
54
52
|
"RedisStore",
|
|
55
53
|
"UpstashRedisByteStore",
|
|
56
54
|
"UpstashRedisStore",
|
|
55
|
+
"create_kv_docstore",
|
|
56
|
+
"create_lc_store",
|
|
57
57
|
]
|
langchain/storage/_lc_store.py
CHANGED
|
@@ -17,7 +17,8 @@ def _dump_as_bytes(obj: Serializable) -> bytes:
|
|
|
17
17
|
def _dump_document_as_bytes(obj: Document) -> bytes:
|
|
18
18
|
"""Return a bytes representation of a document."""
|
|
19
19
|
if not isinstance(obj, Document):
|
|
20
|
-
|
|
20
|
+
msg = "Expected a Document instance"
|
|
21
|
+
raise TypeError(msg)
|
|
21
22
|
return dumps(obj).encode("utf-8")
|
|
22
23
|
|
|
23
24
|
|
|
@@ -25,7 +26,8 @@ def _load_document_from_bytes(serialized: bytes) -> Document:
|
|
|
25
26
|
"""Return a document from a bytes representation."""
|
|
26
27
|
obj = loads(serialized.decode("utf-8"))
|
|
27
28
|
if not isinstance(obj, Document):
|
|
28
|
-
|
|
29
|
+
msg = f"Expected a Document instance. Got {type(obj)}"
|
|
30
|
+
raise TypeError(msg)
|
|
29
31
|
return obj
|
|
30
32
|
|
|
31
33
|
|
|
@@ -106,7 +106,9 @@ class EncoderBackedStore(BaseStore[K, V]):
|
|
|
106
106
|
await self.store.amdelete(encoded_keys)
|
|
107
107
|
|
|
108
108
|
def yield_keys(
|
|
109
|
-
self,
|
|
109
|
+
self,
|
|
110
|
+
*,
|
|
111
|
+
prefix: Optional[str] = None,
|
|
110
112
|
) -> Union[Iterator[K], Iterator[str]]:
|
|
111
113
|
"""Get an iterator over keys that match the given prefix."""
|
|
112
114
|
# For the time being this does not return K, but str
|
|
@@ -114,7 +116,9 @@ class EncoderBackedStore(BaseStore[K, V]):
|
|
|
114
116
|
yield from self.store.yield_keys(prefix=prefix)
|
|
115
117
|
|
|
116
118
|
async def ayield_keys(
|
|
117
|
-
self,
|
|
119
|
+
self,
|
|
120
|
+
*,
|
|
121
|
+
prefix: Optional[str] = None,
|
|
118
122
|
) -> Union[AsyncIterator[K], AsyncIterator[str]]:
|
|
119
123
|
"""Get an iterator over keys that match the given prefix."""
|
|
120
124
|
# For the time being this does not return K, but str
|
langchain/storage/file_system.py
CHANGED
|
@@ -75,34 +75,37 @@ class LocalFileStore(ByteStore):
|
|
|
75
75
|
Path: The full path for the given key.
|
|
76
76
|
"""
|
|
77
77
|
if not re.match(r"^[a-zA-Z0-9_.\-/]+$", key):
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
msg = f"Invalid characters in key: {key}"
|
|
79
|
+
raise InvalidKeyException(msg)
|
|
80
|
+
full_path = (self.root_path / key).resolve()
|
|
81
|
+
root_path = self.root_path.resolve()
|
|
82
|
+
common_path = os.path.commonpath([root_path, full_path])
|
|
83
|
+
if common_path != str(root_path):
|
|
84
|
+
msg = (
|
|
85
|
+
f"Invalid key: {key}. Key should be relative to the full path. "
|
|
86
|
+
f"{root_path} vs. {common_path} and full path of {full_path}"
|
|
85
87
|
)
|
|
88
|
+
raise InvalidKeyException(msg)
|
|
86
89
|
|
|
87
|
-
return
|
|
90
|
+
return full_path
|
|
88
91
|
|
|
89
|
-
def _mkdir_for_store(self,
|
|
92
|
+
def _mkdir_for_store(self, dir_path: Path) -> None:
|
|
90
93
|
"""Makes a store directory path (including parents) with specified permissions
|
|
91
94
|
|
|
92
95
|
This is needed because `Path.mkdir()` is restricted by the current `umask`,
|
|
93
96
|
whereas the explicit `os.chmod()` used here is not.
|
|
94
97
|
|
|
95
98
|
Args:
|
|
96
|
-
|
|
99
|
+
dir_path: (Path) The store directory to make
|
|
97
100
|
|
|
98
101
|
Returns:
|
|
99
102
|
None
|
|
100
103
|
"""
|
|
101
|
-
if not
|
|
102
|
-
self._mkdir_for_store(
|
|
103
|
-
|
|
104
|
+
if not dir_path.exists():
|
|
105
|
+
self._mkdir_for_store(dir_path.parent)
|
|
106
|
+
dir_path.mkdir(exist_ok=True)
|
|
104
107
|
if self.chmod_dir is not None:
|
|
105
|
-
|
|
108
|
+
dir_path.chmod(self.chmod_dir)
|
|
106
109
|
|
|
107
110
|
def mget(self, keys: Sequence[str]) -> list[Optional[bytes]]:
|
|
108
111
|
"""Get the values associated with the given keys.
|
|
@@ -122,7 +125,7 @@ class LocalFileStore(ByteStore):
|
|
|
122
125
|
values.append(value)
|
|
123
126
|
if self.update_atime:
|
|
124
127
|
# update access time only; preserve modified time
|
|
125
|
-
os.utime(full_path, (time.time(),
|
|
128
|
+
os.utime(full_path, (time.time(), full_path.stat().st_mtime))
|
|
126
129
|
else:
|
|
127
130
|
values.append(None)
|
|
128
131
|
return values
|
|
@@ -141,7 +144,7 @@ class LocalFileStore(ByteStore):
|
|
|
141
144
|
self._mkdir_for_store(full_path.parent)
|
|
142
145
|
full_path.write_bytes(value)
|
|
143
146
|
if self.chmod_file is not None:
|
|
144
|
-
|
|
147
|
+
full_path.chmod(self.chmod_file)
|
|
145
148
|
|
|
146
149
|
def mdelete(self, keys: Sequence[str]) -> None:
|
|
147
150
|
"""Delete the given keys and their associated values.
|
langchain/storage/in_memory.py
CHANGED
langchain/text_splitter.py
CHANGED
|
@@ -27,24 +27,24 @@ from langchain_text_splitters.sentence_transformers import (
|
|
|
27
27
|
from langchain_text_splitters.spacy import SpacyTextSplitter
|
|
28
28
|
|
|
29
29
|
__all__ = [
|
|
30
|
-
"
|
|
31
|
-
"TextSplitter",
|
|
32
|
-
"Tokenizer",
|
|
33
|
-
"Language",
|
|
34
|
-
"RecursiveCharacterTextSplitter",
|
|
35
|
-
"RecursiveJsonSplitter",
|
|
36
|
-
"LatexTextSplitter",
|
|
37
|
-
"PythonCodeTextSplitter",
|
|
38
|
-
"KonlpyTextSplitter",
|
|
39
|
-
"SpacyTextSplitter",
|
|
40
|
-
"NLTKTextSplitter",
|
|
41
|
-
"split_text_on_tokens",
|
|
42
|
-
"SentenceTransformersTokenTextSplitter",
|
|
30
|
+
"CharacterTextSplitter",
|
|
43
31
|
"ElementType",
|
|
32
|
+
"HTMLHeaderTextSplitter",
|
|
44
33
|
"HeaderType",
|
|
34
|
+
"KonlpyTextSplitter",
|
|
35
|
+
"Language",
|
|
36
|
+
"LatexTextSplitter",
|
|
45
37
|
"LineType",
|
|
46
|
-
"HTMLHeaderTextSplitter",
|
|
47
38
|
"MarkdownHeaderTextSplitter",
|
|
48
39
|
"MarkdownTextSplitter",
|
|
49
|
-
"
|
|
40
|
+
"NLTKTextSplitter",
|
|
41
|
+
"PythonCodeTextSplitter",
|
|
42
|
+
"RecursiveCharacterTextSplitter",
|
|
43
|
+
"RecursiveJsonSplitter",
|
|
44
|
+
"SentenceTransformersTokenTextSplitter",
|
|
45
|
+
"SpacyTextSplitter",
|
|
46
|
+
"TextSplitter",
|
|
47
|
+
"TokenTextSplitter",
|
|
48
|
+
"Tokenizer",
|
|
49
|
+
"split_text_on_tokens",
|
|
50
50
|
]
|
langchain/tools/__init__.py
CHANGED
|
@@ -39,7 +39,7 @@ _DEPRECATED_TOOLS = {"PythonAstREPLTool", "PythonREPLTool"}
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def _import_python_tool_PythonAstREPLTool() -> Any:
|
|
42
|
-
|
|
42
|
+
msg = (
|
|
43
43
|
"This tool has been moved to langchain experiment. "
|
|
44
44
|
"This tool has access to a python REPL. "
|
|
45
45
|
"For best practices make sure to sandbox this tool. "
|
|
@@ -47,10 +47,11 @@ def _import_python_tool_PythonAstREPLTool() -> Any:
|
|
|
47
47
|
"To keep using this code as is, install langchain experimental and "
|
|
48
48
|
"update relevant imports replacing 'langchain' with 'langchain_experimental'"
|
|
49
49
|
)
|
|
50
|
+
raise ImportError(msg)
|
|
50
51
|
|
|
51
52
|
|
|
52
53
|
def _import_python_tool_PythonREPLTool() -> Any:
|
|
53
|
-
|
|
54
|
+
msg = (
|
|
54
55
|
"This tool has been moved to langchain experiment. "
|
|
55
56
|
"This tool has access to a python REPL. "
|
|
56
57
|
"For best practices make sure to sandbox this tool. "
|
|
@@ -58,36 +59,33 @@ def _import_python_tool_PythonREPLTool() -> Any:
|
|
|
58
59
|
"To keep using this code as is, install langchain experimental and "
|
|
59
60
|
"update relevant imports replacing 'langchain' with 'langchain_experimental'"
|
|
60
61
|
)
|
|
62
|
+
raise ImportError(msg)
|
|
61
63
|
|
|
62
64
|
|
|
63
65
|
def __getattr__(name: str) -> Any:
|
|
64
66
|
if name == "PythonAstREPLTool":
|
|
65
67
|
return _import_python_tool_PythonAstREPLTool()
|
|
66
|
-
|
|
68
|
+
if name == "PythonREPLTool":
|
|
67
69
|
return _import_python_tool_PythonREPLTool()
|
|
68
|
-
|
|
69
|
-
from langchain_community import tools
|
|
70
|
+
from langchain_community import tools
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
# If not in interactive env, raise warning.
|
|
73
|
+
if not is_interactive_env():
|
|
74
|
+
warnings.warn(
|
|
75
|
+
"Importing tools from langchain is deprecated. Importing from "
|
|
76
|
+
"langchain will no longer be supported as of langchain==0.2.0. "
|
|
77
|
+
"Please import from langchain-community instead:\n\n"
|
|
78
|
+
f"`from langchain_community.tools import {name}`.\n\n"
|
|
79
|
+
"To install langchain-community run "
|
|
80
|
+
"`pip install -U langchain-community`.",
|
|
81
|
+
stacklevel=2,
|
|
82
|
+
category=LangChainDeprecationWarning,
|
|
83
|
+
)
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
return getattr(tools, name)
|
|
84
86
|
|
|
85
87
|
|
|
86
88
|
__all__ = [
|
|
87
|
-
"StructuredTool",
|
|
88
|
-
"BaseTool",
|
|
89
|
-
"tool",
|
|
90
|
-
"Tool",
|
|
91
89
|
"AINAppOps",
|
|
92
90
|
"AINOwnerOps",
|
|
93
91
|
"AINRuleOps",
|
|
@@ -105,6 +103,7 @@ __all__ = [
|
|
|
105
103
|
"BaseRequestsTool",
|
|
106
104
|
"BaseSQLDatabaseTool",
|
|
107
105
|
"BaseSparkSQLTool",
|
|
106
|
+
"BaseTool",
|
|
108
107
|
"BearlyInterpreterTool",
|
|
109
108
|
"BingSearchResults",
|
|
110
109
|
"BingSearchRun",
|
|
@@ -140,8 +139,6 @@ __all__ = [
|
|
|
140
139
|
"GoogleSearchRun",
|
|
141
140
|
"GoogleSerperResults",
|
|
142
141
|
"GoogleSerperRun",
|
|
143
|
-
"SearchAPIResults",
|
|
144
|
-
"SearchAPIRun",
|
|
145
142
|
"HumanInputRun",
|
|
146
143
|
"IFTTTWebhook",
|
|
147
144
|
"InfoPowerBITool",
|
|
@@ -168,20 +165,21 @@ __all__ = [
|
|
|
168
165
|
"OpenAPISpec",
|
|
169
166
|
"OpenWeatherMapQueryRun",
|
|
170
167
|
"PubmedQueryRun",
|
|
171
|
-
"RedditSearchRun",
|
|
172
168
|
"QueryCheckerTool",
|
|
173
169
|
"QueryPowerBITool",
|
|
174
170
|
"QuerySQLCheckerTool",
|
|
175
171
|
"QuerySQLDataBaseTool",
|
|
176
172
|
"QuerySparkSQLTool",
|
|
177
173
|
"ReadFileTool",
|
|
174
|
+
"RedditSearchRun",
|
|
178
175
|
"RequestsDeleteTool",
|
|
179
176
|
"RequestsGetTool",
|
|
180
177
|
"RequestsPatchTool",
|
|
181
178
|
"RequestsPostTool",
|
|
182
179
|
"RequestsPutTool",
|
|
183
|
-
"SteamWebAPIQueryRun",
|
|
184
180
|
"SceneXplainTool",
|
|
181
|
+
"SearchAPIResults",
|
|
182
|
+
"SearchAPIRun",
|
|
185
183
|
"SearxSearchResults",
|
|
186
184
|
"SearxSearchRun",
|
|
187
185
|
"ShellTool",
|
|
@@ -190,9 +188,12 @@ __all__ = [
|
|
|
190
188
|
"SlackScheduleMessage",
|
|
191
189
|
"SlackSendMessage",
|
|
192
190
|
"SleepTool",
|
|
193
|
-
"StdInInquireTool",
|
|
194
191
|
"StackExchangeTool",
|
|
192
|
+
"StdInInquireTool",
|
|
193
|
+
"SteamWebAPIQueryRun",
|
|
195
194
|
"SteamshipImageGenerationTool",
|
|
195
|
+
"StructuredTool",
|
|
196
|
+
"Tool",
|
|
196
197
|
"VectorStoreQATool",
|
|
197
198
|
"VectorStoreQAWithSourcesTool",
|
|
198
199
|
"WikipediaQueryRun",
|
|
@@ -203,4 +204,5 @@ __all__ = [
|
|
|
203
204
|
"ZapierNLAListActions",
|
|
204
205
|
"ZapierNLARunAction",
|
|
205
206
|
"format_tool_to_openai_function",
|
|
207
|
+
"tool",
|
|
206
208
|
]
|
langchain/tools/ainetwork/app.py
CHANGED