langchain 0.3.26__py3-none-any.whl → 0.4.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langchain/__init__.py +110 -96
- langchain/_api/__init__.py +2 -2
- langchain/_api/deprecation.py +3 -3
- langchain/_api/module_import.py +51 -46
- langchain/_api/path.py +1 -1
- langchain/adapters/openai.py +8 -8
- langchain/agents/__init__.py +15 -12
- langchain/agents/agent.py +174 -151
- langchain/agents/agent_iterator.py +50 -26
- langchain/agents/agent_toolkits/__init__.py +7 -6
- langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
- langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
- langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
- langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
- langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
- langchain/agents/agent_toolkits/csv/__init__.py +4 -2
- langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
- langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
- langchain/agents/agent_toolkits/github/toolkit.py +9 -9
- langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
- langchain/agents/agent_toolkits/json/base.py +1 -1
- langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
- langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
- langchain/agents/agent_toolkits/openapi/base.py +1 -1
- langchain/agents/agent_toolkits/openapi/planner.py +2 -2
- langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
- langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
- langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
- langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
- langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
- langchain/agents/agent_toolkits/powerbi/base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
- langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
- langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
- langchain/agents/agent_toolkits/python/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark/__init__.py +4 -2
- langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
- langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/sql/prompt.py +1 -1
- langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
- langchain/agents/agent_toolkits/vectorstore/base.py +4 -2
- langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
- langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
- langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
- langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
- langchain/agents/agent_types.py +6 -6
- langchain/agents/chat/base.py +8 -12
- langchain/agents/chat/output_parser.py +9 -6
- langchain/agents/chat/prompt.py +3 -4
- langchain/agents/conversational/base.py +11 -5
- langchain/agents/conversational/output_parser.py +4 -2
- langchain/agents/conversational/prompt.py +2 -3
- langchain/agents/conversational_chat/base.py +9 -5
- langchain/agents/conversational_chat/output_parser.py +9 -11
- langchain/agents/conversational_chat/prompt.py +5 -6
- langchain/agents/format_scratchpad/__init__.py +3 -3
- langchain/agents/format_scratchpad/log_to_messages.py +1 -1
- langchain/agents/format_scratchpad/openai_functions.py +8 -6
- langchain/agents/format_scratchpad/tools.py +5 -3
- langchain/agents/format_scratchpad/xml.py +33 -2
- langchain/agents/initialize.py +17 -9
- langchain/agents/json_chat/base.py +19 -18
- langchain/agents/json_chat/prompt.py +2 -3
- langchain/agents/load_tools.py +2 -1
- langchain/agents/loading.py +28 -18
- langchain/agents/mrkl/base.py +11 -4
- langchain/agents/mrkl/output_parser.py +17 -13
- langchain/agents/mrkl/prompt.py +1 -2
- langchain/agents/openai_assistant/base.py +81 -71
- langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +2 -0
- langchain/agents/openai_functions_agent/base.py +47 -37
- langchain/agents/openai_functions_multi_agent/base.py +40 -27
- langchain/agents/openai_tools/base.py +9 -8
- langchain/agents/output_parsers/__init__.py +3 -3
- langchain/agents/output_parsers/json.py +8 -6
- langchain/agents/output_parsers/openai_functions.py +24 -9
- langchain/agents/output_parsers/openai_tools.py +16 -4
- langchain/agents/output_parsers/react_json_single_input.py +13 -5
- langchain/agents/output_parsers/react_single_input.py +18 -11
- langchain/agents/output_parsers/self_ask.py +5 -2
- langchain/agents/output_parsers/tools.py +32 -13
- langchain/agents/output_parsers/xml.py +102 -28
- langchain/agents/react/agent.py +5 -4
- langchain/agents/react/base.py +26 -17
- langchain/agents/react/output_parser.py +7 -6
- langchain/agents/react/textworld_prompt.py +0 -1
- langchain/agents/react/wiki_prompt.py +14 -15
- langchain/agents/schema.py +5 -2
- langchain/agents/self_ask_with_search/base.py +23 -15
- langchain/agents/self_ask_with_search/prompt.py +0 -1
- langchain/agents/structured_chat/base.py +19 -11
- langchain/agents/structured_chat/output_parser.py +29 -18
- langchain/agents/structured_chat/prompt.py +3 -4
- langchain/agents/tool_calling_agent/base.py +8 -6
- langchain/agents/tools.py +5 -2
- langchain/agents/utils.py +2 -3
- langchain/agents/xml/base.py +12 -6
- langchain/agents/xml/prompt.py +1 -2
- langchain/cache.py +12 -12
- langchain/callbacks/__init__.py +11 -11
- langchain/callbacks/aim_callback.py +2 -2
- langchain/callbacks/argilla_callback.py +1 -1
- langchain/callbacks/arize_callback.py +1 -1
- langchain/callbacks/arthur_callback.py +1 -1
- langchain/callbacks/base.py +7 -7
- langchain/callbacks/clearml_callback.py +1 -1
- langchain/callbacks/comet_ml_callback.py +1 -1
- langchain/callbacks/confident_callback.py +1 -1
- langchain/callbacks/context_callback.py +1 -1
- langchain/callbacks/flyte_callback.py +1 -1
- langchain/callbacks/human.py +2 -2
- langchain/callbacks/infino_callback.py +1 -1
- langchain/callbacks/labelstudio_callback.py +1 -1
- langchain/callbacks/llmonitor_callback.py +1 -1
- langchain/callbacks/manager.py +5 -5
- langchain/callbacks/mlflow_callback.py +2 -2
- langchain/callbacks/openai_info.py +1 -1
- langchain/callbacks/promptlayer_callback.py +1 -1
- langchain/callbacks/sagemaker_callback.py +1 -1
- langchain/callbacks/streaming_aiter.py +17 -3
- langchain/callbacks/streaming_aiter_final_only.py +16 -5
- langchain/callbacks/streaming_stdout_final_only.py +10 -3
- langchain/callbacks/streamlit/__init__.py +3 -2
- langchain/callbacks/streamlit/mutable_expander.py +1 -1
- langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
- langchain/callbacks/tracers/__init__.py +1 -1
- langchain/callbacks/tracers/comet.py +1 -1
- langchain/callbacks/tracers/evaluation.py +1 -1
- langchain/callbacks/tracers/log_stream.py +1 -1
- langchain/callbacks/tracers/logging.py +12 -1
- langchain/callbacks/tracers/stdout.py +1 -1
- langchain/callbacks/trubrics_callback.py +1 -1
- langchain/callbacks/utils.py +4 -4
- langchain/callbacks/wandb_callback.py +1 -1
- langchain/callbacks/whylabs_callback.py +1 -1
- langchain/chains/api/base.py +41 -23
- langchain/chains/api/news_docs.py +1 -2
- langchain/chains/api/open_meteo_docs.py +1 -2
- langchain/chains/api/openapi/requests_chain.py +1 -1
- langchain/chains/api/openapi/response_chain.py +1 -1
- langchain/chains/api/podcast_docs.py +1 -2
- langchain/chains/api/prompt.py +1 -2
- langchain/chains/api/tmdb_docs.py +1 -2
- langchain/chains/base.py +96 -56
- langchain/chains/chat_vector_db/prompts.py +2 -3
- langchain/chains/combine_documents/__init__.py +1 -1
- langchain/chains/combine_documents/base.py +30 -11
- langchain/chains/combine_documents/map_reduce.py +41 -30
- langchain/chains/combine_documents/map_rerank.py +39 -24
- langchain/chains/combine_documents/reduce.py +48 -26
- langchain/chains/combine_documents/refine.py +27 -17
- langchain/chains/combine_documents/stuff.py +24 -13
- langchain/chains/constitutional_ai/base.py +11 -4
- langchain/chains/constitutional_ai/principles.py +22 -25
- langchain/chains/constitutional_ai/prompts.py +25 -28
- langchain/chains/conversation/base.py +9 -4
- langchain/chains/conversation/memory.py +5 -5
- langchain/chains/conversation/prompt.py +5 -5
- langchain/chains/conversational_retrieval/base.py +108 -79
- langchain/chains/conversational_retrieval/prompts.py +2 -3
- langchain/chains/elasticsearch_database/base.py +10 -10
- langchain/chains/elasticsearch_database/prompts.py +2 -3
- langchain/chains/ernie_functions/__init__.py +2 -2
- langchain/chains/example_generator.py +3 -1
- langchain/chains/flare/base.py +28 -12
- langchain/chains/flare/prompts.py +2 -0
- langchain/chains/graph_qa/cypher.py +2 -2
- langchain/chains/graph_qa/falkordb.py +1 -1
- langchain/chains/graph_qa/gremlin.py +1 -1
- langchain/chains/graph_qa/neptune_sparql.py +1 -1
- langchain/chains/graph_qa/prompts.py +2 -2
- langchain/chains/history_aware_retriever.py +2 -1
- langchain/chains/hyde/base.py +6 -5
- langchain/chains/hyde/prompts.py +5 -6
- langchain/chains/llm.py +82 -61
- langchain/chains/llm_bash/__init__.py +3 -2
- langchain/chains/llm_checker/base.py +19 -6
- langchain/chains/llm_checker/prompt.py +3 -4
- langchain/chains/llm_math/base.py +25 -10
- langchain/chains/llm_math/prompt.py +1 -2
- langchain/chains/llm_summarization_checker/base.py +22 -7
- langchain/chains/llm_symbolic_math/__init__.py +3 -2
- langchain/chains/loading.py +155 -97
- langchain/chains/mapreduce.py +4 -3
- langchain/chains/moderation.py +11 -9
- langchain/chains/natbot/base.py +11 -9
- langchain/chains/natbot/crawler.py +102 -76
- langchain/chains/natbot/prompt.py +2 -3
- langchain/chains/openai_functions/__init__.py +7 -7
- langchain/chains/openai_functions/base.py +15 -10
- langchain/chains/openai_functions/citation_fuzzy_match.py +21 -11
- langchain/chains/openai_functions/extraction.py +19 -19
- langchain/chains/openai_functions/openapi.py +39 -35
- langchain/chains/openai_functions/qa_with_structure.py +22 -15
- langchain/chains/openai_functions/tagging.py +4 -4
- langchain/chains/openai_tools/extraction.py +7 -8
- langchain/chains/qa_generation/base.py +8 -3
- langchain/chains/qa_generation/prompt.py +5 -5
- langchain/chains/qa_with_sources/base.py +17 -6
- langchain/chains/qa_with_sources/loading.py +16 -8
- langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
- langchain/chains/qa_with_sources/refine_prompts.py +0 -1
- langchain/chains/qa_with_sources/retrieval.py +15 -6
- langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
- langchain/chains/qa_with_sources/vector_db.py +21 -8
- langchain/chains/query_constructor/base.py +37 -34
- langchain/chains/query_constructor/ir.py +4 -4
- langchain/chains/query_constructor/parser.py +101 -34
- langchain/chains/query_constructor/prompt.py +5 -6
- langchain/chains/question_answering/chain.py +21 -10
- langchain/chains/question_answering/map_reduce_prompt.py +14 -14
- langchain/chains/question_answering/map_rerank_prompt.py +3 -3
- langchain/chains/question_answering/refine_prompts.py +2 -5
- langchain/chains/question_answering/stuff_prompt.py +5 -5
- langchain/chains/retrieval.py +1 -3
- langchain/chains/retrieval_qa/base.py +38 -27
- langchain/chains/retrieval_qa/prompt.py +1 -2
- langchain/chains/router/__init__.py +3 -3
- langchain/chains/router/base.py +38 -22
- langchain/chains/router/embedding_router.py +15 -8
- langchain/chains/router/llm_router.py +23 -20
- langchain/chains/router/multi_prompt.py +5 -2
- langchain/chains/router/multi_retrieval_qa.py +28 -5
- langchain/chains/sequential.py +30 -18
- langchain/chains/sql_database/prompt.py +14 -16
- langchain/chains/sql_database/query.py +7 -5
- langchain/chains/structured_output/__init__.py +1 -1
- langchain/chains/structured_output/base.py +77 -67
- langchain/chains/summarize/chain.py +11 -5
- langchain/chains/summarize/map_reduce_prompt.py +0 -1
- langchain/chains/summarize/stuff_prompt.py +0 -1
- langchain/chains/transform.py +9 -6
- langchain/chat_loaders/facebook_messenger.py +1 -1
- langchain/chat_loaders/langsmith.py +1 -1
- langchain/chat_loaders/utils.py +3 -3
- langchain/chat_models/__init__.py +20 -19
- langchain/chat_models/anthropic.py +1 -1
- langchain/chat_models/azureml_endpoint.py +1 -1
- langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
- langchain/chat_models/base.py +213 -139
- langchain/chat_models/bedrock.py +1 -1
- langchain/chat_models/fake.py +1 -1
- langchain/chat_models/meta.py +1 -1
- langchain/chat_models/pai_eas_endpoint.py +1 -1
- langchain/chat_models/promptlayer_openai.py +1 -1
- langchain/chat_models/volcengine_maas.py +1 -1
- langchain/docstore/base.py +1 -1
- langchain/document_loaders/__init__.py +9 -9
- langchain/document_loaders/airbyte.py +3 -3
- langchain/document_loaders/assemblyai.py +1 -1
- langchain/document_loaders/azure_blob_storage_container.py +1 -1
- langchain/document_loaders/azure_blob_storage_file.py +1 -1
- langchain/document_loaders/baiducloud_bos_file.py +1 -1
- langchain/document_loaders/base.py +1 -1
- langchain/document_loaders/blob_loaders/__init__.py +1 -1
- langchain/document_loaders/blob_loaders/schema.py +1 -4
- langchain/document_loaders/blockchain.py +1 -1
- langchain/document_loaders/chatgpt.py +1 -1
- langchain/document_loaders/college_confidential.py +1 -1
- langchain/document_loaders/confluence.py +1 -1
- langchain/document_loaders/email.py +1 -1
- langchain/document_loaders/facebook_chat.py +1 -1
- langchain/document_loaders/markdown.py +1 -1
- langchain/document_loaders/notebook.py +1 -1
- langchain/document_loaders/org_mode.py +1 -1
- langchain/document_loaders/parsers/__init__.py +1 -1
- langchain/document_loaders/parsers/docai.py +1 -1
- langchain/document_loaders/parsers/generic.py +1 -1
- langchain/document_loaders/parsers/html/__init__.py +1 -1
- langchain/document_loaders/parsers/html/bs4.py +1 -1
- langchain/document_loaders/parsers/language/cobol.py +1 -1
- langchain/document_loaders/parsers/language/python.py +1 -1
- langchain/document_loaders/parsers/msword.py +1 -1
- langchain/document_loaders/parsers/pdf.py +5 -5
- langchain/document_loaders/parsers/registry.py +1 -1
- langchain/document_loaders/pdf.py +8 -8
- langchain/document_loaders/powerpoint.py +1 -1
- langchain/document_loaders/pyspark_dataframe.py +1 -1
- langchain/document_loaders/telegram.py +2 -2
- langchain/document_loaders/tencent_cos_directory.py +1 -1
- langchain/document_loaders/unstructured.py +5 -5
- langchain/document_loaders/url_playwright.py +1 -1
- langchain/document_loaders/whatsapp_chat.py +1 -1
- langchain/document_loaders/youtube.py +2 -2
- langchain/document_transformers/__init__.py +3 -3
- langchain/document_transformers/beautiful_soup_transformer.py +1 -1
- langchain/document_transformers/doctran_text_extract.py +1 -1
- langchain/document_transformers/doctran_text_qa.py +1 -1
- langchain/document_transformers/doctran_text_translate.py +1 -1
- langchain/document_transformers/embeddings_redundant_filter.py +3 -3
- langchain/document_transformers/google_translate.py +1 -1
- langchain/document_transformers/html2text.py +1 -1
- langchain/document_transformers/nuclia_text_transform.py +1 -1
- langchain/embeddings/__init__.py +5 -5
- langchain/embeddings/base.py +35 -24
- langchain/embeddings/cache.py +37 -32
- langchain/embeddings/fake.py +1 -1
- langchain/embeddings/huggingface.py +2 -2
- langchain/evaluation/__init__.py +22 -22
- langchain/evaluation/agents/trajectory_eval_chain.py +26 -25
- langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
- langchain/evaluation/comparison/__init__.py +1 -1
- langchain/evaluation/comparison/eval_chain.py +21 -13
- langchain/evaluation/comparison/prompt.py +1 -2
- langchain/evaluation/criteria/__init__.py +1 -1
- langchain/evaluation/criteria/eval_chain.py +23 -11
- langchain/evaluation/criteria/prompt.py +2 -3
- langchain/evaluation/embedding_distance/base.py +34 -20
- langchain/evaluation/exact_match/base.py +14 -1
- langchain/evaluation/loading.py +16 -11
- langchain/evaluation/parsing/base.py +20 -4
- langchain/evaluation/parsing/json_distance.py +24 -10
- langchain/evaluation/parsing/json_schema.py +13 -12
- langchain/evaluation/qa/__init__.py +1 -1
- langchain/evaluation/qa/eval_chain.py +20 -5
- langchain/evaluation/qa/eval_prompt.py +7 -8
- langchain/evaluation/qa/generate_chain.py +4 -1
- langchain/evaluation/qa/generate_prompt.py +2 -4
- langchain/evaluation/regex_match/base.py +9 -1
- langchain/evaluation/schema.py +38 -30
- langchain/evaluation/scoring/__init__.py +1 -1
- langchain/evaluation/scoring/eval_chain.py +23 -15
- langchain/evaluation/scoring/prompt.py +0 -1
- langchain/evaluation/string_distance/base.py +20 -9
- langchain/globals.py +12 -11
- langchain/graphs/__init__.py +6 -6
- langchain/graphs/graph_document.py +1 -1
- langchain/graphs/networkx_graph.py +2 -2
- langchain/hub.py +9 -11
- langchain/indexes/__init__.py +3 -3
- langchain/indexes/_sql_record_manager.py +63 -46
- langchain/indexes/prompts/entity_extraction.py +1 -2
- langchain/indexes/prompts/entity_summarization.py +1 -2
- langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
- langchain/indexes/vectorstore.py +35 -19
- langchain/llms/__init__.py +13 -13
- langchain/llms/ai21.py +1 -1
- langchain/llms/azureml_endpoint.py +4 -4
- langchain/llms/base.py +15 -7
- langchain/llms/bedrock.py +1 -1
- langchain/llms/cloudflare_workersai.py +1 -1
- langchain/llms/gradient_ai.py +1 -1
- langchain/llms/loading.py +1 -1
- langchain/llms/openai.py +1 -1
- langchain/llms/sagemaker_endpoint.py +1 -1
- langchain/load/dump.py +1 -1
- langchain/load/load.py +1 -1
- langchain/load/serializable.py +3 -3
- langchain/memory/__init__.py +3 -3
- langchain/memory/buffer.py +14 -7
- langchain/memory/buffer_window.py +2 -0
- langchain/memory/chat_memory.py +14 -8
- langchain/memory/chat_message_histories/__init__.py +1 -1
- langchain/memory/chat_message_histories/astradb.py +1 -1
- langchain/memory/chat_message_histories/cassandra.py +1 -1
- langchain/memory/chat_message_histories/cosmos_db.py +1 -1
- langchain/memory/chat_message_histories/dynamodb.py +1 -1
- langchain/memory/chat_message_histories/elasticsearch.py +1 -1
- langchain/memory/chat_message_histories/file.py +1 -1
- langchain/memory/chat_message_histories/firestore.py +1 -1
- langchain/memory/chat_message_histories/momento.py +1 -1
- langchain/memory/chat_message_histories/mongodb.py +1 -1
- langchain/memory/chat_message_histories/neo4j.py +1 -1
- langchain/memory/chat_message_histories/postgres.py +1 -1
- langchain/memory/chat_message_histories/redis.py +1 -1
- langchain/memory/chat_message_histories/rocksetdb.py +1 -1
- langchain/memory/chat_message_histories/singlestoredb.py +1 -1
- langchain/memory/chat_message_histories/streamlit.py +1 -1
- langchain/memory/chat_message_histories/upstash_redis.py +1 -1
- langchain/memory/chat_message_histories/xata.py +1 -1
- langchain/memory/chat_message_histories/zep.py +1 -1
- langchain/memory/combined.py +14 -13
- langchain/memory/entity.py +131 -61
- langchain/memory/prompt.py +10 -11
- langchain/memory/readonly.py +0 -2
- langchain/memory/simple.py +4 -3
- langchain/memory/summary.py +43 -11
- langchain/memory/summary_buffer.py +20 -8
- langchain/memory/token_buffer.py +2 -0
- langchain/memory/utils.py +3 -2
- langchain/memory/vectorstore.py +12 -5
- langchain/memory/vectorstore_token_buffer_memory.py +5 -5
- langchain/model_laboratory.py +12 -11
- langchain/output_parsers/__init__.py +4 -4
- langchain/output_parsers/boolean.py +7 -4
- langchain/output_parsers/combining.py +14 -7
- langchain/output_parsers/datetime.py +32 -31
- langchain/output_parsers/enum.py +10 -4
- langchain/output_parsers/fix.py +60 -53
- langchain/output_parsers/format_instructions.py +6 -8
- langchain/output_parsers/json.py +2 -2
- langchain/output_parsers/list.py +2 -2
- langchain/output_parsers/loading.py +9 -9
- langchain/output_parsers/openai_functions.py +3 -3
- langchain/output_parsers/openai_tools.py +1 -1
- langchain/output_parsers/pandas_dataframe.py +59 -48
- langchain/output_parsers/prompts.py +1 -2
- langchain/output_parsers/rail_parser.py +1 -1
- langchain/output_parsers/regex.py +9 -8
- langchain/output_parsers/regex_dict.py +7 -10
- langchain/output_parsers/retry.py +99 -80
- langchain/output_parsers/structured.py +21 -6
- langchain/output_parsers/yaml.py +19 -11
- langchain/prompts/__init__.py +5 -3
- langchain/prompts/base.py +5 -5
- langchain/prompts/chat.py +8 -8
- langchain/prompts/example_selector/__init__.py +3 -1
- langchain/prompts/example_selector/semantic_similarity.py +2 -2
- langchain/prompts/few_shot.py +1 -1
- langchain/prompts/loading.py +3 -3
- langchain/prompts/prompt.py +1 -1
- langchain/pydantic_v1/__init__.py +1 -1
- langchain/retrievers/__init__.py +5 -5
- langchain/retrievers/bedrock.py +2 -2
- langchain/retrievers/bm25.py +1 -1
- langchain/retrievers/contextual_compression.py +14 -8
- langchain/retrievers/docarray.py +1 -1
- langchain/retrievers/document_compressors/__init__.py +5 -4
- langchain/retrievers/document_compressors/base.py +12 -6
- langchain/retrievers/document_compressors/chain_extract.py +5 -3
- langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
- langchain/retrievers/document_compressors/chain_filter.py +9 -9
- langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
- langchain/retrievers/document_compressors/cohere_rerank.py +17 -15
- langchain/retrievers/document_compressors/cross_encoder_rerank.py +2 -0
- langchain/retrievers/document_compressors/embeddings_filter.py +24 -17
- langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
- langchain/retrievers/document_compressors/listwise_rerank.py +8 -5
- langchain/retrievers/ensemble.py +30 -27
- langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
- langchain/retrievers/google_vertex_ai_search.py +2 -2
- langchain/retrievers/kendra.py +10 -10
- langchain/retrievers/llama_index.py +1 -1
- langchain/retrievers/merger_retriever.py +11 -11
- langchain/retrievers/milvus.py +1 -1
- langchain/retrievers/multi_query.py +35 -27
- langchain/retrievers/multi_vector.py +24 -9
- langchain/retrievers/parent_document_retriever.py +33 -9
- langchain/retrievers/re_phraser.py +6 -5
- langchain/retrievers/self_query/base.py +157 -127
- langchain/retrievers/time_weighted_retriever.py +21 -7
- langchain/retrievers/zilliz.py +1 -1
- langchain/runnables/hub.py +12 -0
- langchain/runnables/openai_functions.py +12 -2
- langchain/schema/__init__.py +23 -23
- langchain/schema/cache.py +1 -1
- langchain/schema/callbacks/base.py +7 -7
- langchain/schema/callbacks/manager.py +19 -19
- langchain/schema/callbacks/tracers/base.py +1 -1
- langchain/schema/callbacks/tracers/evaluation.py +1 -1
- langchain/schema/callbacks/tracers/langchain.py +1 -1
- langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
- langchain/schema/callbacks/tracers/log_stream.py +1 -1
- langchain/schema/callbacks/tracers/schemas.py +8 -8
- langchain/schema/callbacks/tracers/stdout.py +3 -3
- langchain/schema/document.py +1 -1
- langchain/schema/language_model.py +2 -2
- langchain/schema/messages.py +12 -12
- langchain/schema/output.py +3 -3
- langchain/schema/output_parser.py +3 -3
- langchain/schema/runnable/__init__.py +3 -3
- langchain/schema/runnable/base.py +9 -9
- langchain/schema/runnable/config.py +5 -5
- langchain/schema/runnable/configurable.py +1 -1
- langchain/schema/runnable/history.py +1 -1
- langchain/schema/runnable/passthrough.py +1 -1
- langchain/schema/runnable/utils.py +16 -16
- langchain/schema/vectorstore.py +1 -1
- langchain/smith/__init__.py +2 -1
- langchain/smith/evaluation/__init__.py +2 -2
- langchain/smith/evaluation/config.py +9 -23
- langchain/smith/evaluation/name_generation.py +3 -3
- langchain/smith/evaluation/progress.py +22 -4
- langchain/smith/evaluation/runner_utils.py +416 -247
- langchain/smith/evaluation/string_run_evaluator.py +102 -68
- langchain/storage/__init__.py +2 -2
- langchain/storage/_lc_store.py +4 -2
- langchain/storage/encoder_backed.py +7 -2
- langchain/storage/file_system.py +19 -16
- langchain/storage/in_memory.py +1 -1
- langchain/storage/upstash_redis.py +1 -1
- langchain/text_splitter.py +15 -15
- langchain/tools/__init__.py +28 -26
- langchain/tools/ainetwork/app.py +1 -1
- langchain/tools/ainetwork/base.py +1 -1
- langchain/tools/ainetwork/owner.py +1 -1
- langchain/tools/ainetwork/rule.py +1 -1
- langchain/tools/ainetwork/transfer.py +1 -1
- langchain/tools/ainetwork/value.py +1 -1
- langchain/tools/amadeus/closest_airport.py +1 -1
- langchain/tools/amadeus/flight_search.py +1 -1
- langchain/tools/azure_cognitive_services/__init__.py +1 -1
- langchain/tools/base.py +4 -4
- langchain/tools/bearly/tool.py +1 -1
- langchain/tools/bing_search/__init__.py +1 -1
- langchain/tools/bing_search/tool.py +1 -1
- langchain/tools/dataforseo_api_search/__init__.py +1 -1
- langchain/tools/dataforseo_api_search/tool.py +1 -1
- langchain/tools/ddg_search/tool.py +1 -1
- langchain/tools/e2b_data_analysis/tool.py +2 -2
- langchain/tools/edenai/__init__.py +1 -1
- langchain/tools/file_management/__init__.py +1 -1
- langchain/tools/file_management/copy.py +1 -1
- langchain/tools/file_management/delete.py +1 -1
- langchain/tools/gmail/__init__.py +2 -2
- langchain/tools/gmail/get_message.py +1 -1
- langchain/tools/gmail/search.py +1 -1
- langchain/tools/gmail/send_message.py +1 -1
- langchain/tools/google_finance/__init__.py +1 -1
- langchain/tools/google_finance/tool.py +1 -1
- langchain/tools/google_scholar/__init__.py +1 -1
- langchain/tools/google_scholar/tool.py +1 -1
- langchain/tools/google_search/__init__.py +1 -1
- langchain/tools/google_search/tool.py +1 -1
- langchain/tools/google_serper/__init__.py +1 -1
- langchain/tools/google_serper/tool.py +1 -1
- langchain/tools/google_trends/__init__.py +1 -1
- langchain/tools/google_trends/tool.py +1 -1
- langchain/tools/jira/tool.py +20 -1
- langchain/tools/json/tool.py +25 -3
- langchain/tools/memorize/tool.py +1 -1
- langchain/tools/multion/__init__.py +1 -1
- langchain/tools/multion/update_session.py +1 -1
- langchain/tools/office365/__init__.py +2 -2
- langchain/tools/office365/events_search.py +1 -1
- langchain/tools/office365/messages_search.py +1 -1
- langchain/tools/office365/send_event.py +1 -1
- langchain/tools/office365/send_message.py +1 -1
- langchain/tools/openapi/utils/api_models.py +6 -6
- langchain/tools/playwright/__init__.py +5 -5
- langchain/tools/playwright/click.py +1 -1
- langchain/tools/playwright/extract_hyperlinks.py +1 -1
- langchain/tools/playwright/get_elements.py +1 -1
- langchain/tools/playwright/navigate.py +1 -1
- langchain/tools/plugin.py +2 -2
- langchain/tools/powerbi/tool.py +1 -1
- langchain/tools/python/__init__.py +3 -2
- langchain/tools/reddit_search/tool.py +1 -1
- langchain/tools/render.py +2 -2
- langchain/tools/requests/tool.py +2 -2
- langchain/tools/searchapi/tool.py +1 -1
- langchain/tools/searx_search/tool.py +1 -1
- langchain/tools/slack/get_message.py +1 -1
- langchain/tools/spark_sql/tool.py +1 -1
- langchain/tools/sql_database/tool.py +1 -1
- langchain/tools/tavily_search/__init__.py +1 -1
- langchain/tools/tavily_search/tool.py +1 -1
- langchain/tools/zapier/__init__.py +1 -1
- langchain/tools/zapier/tool.py +24 -2
- langchain/utilities/__init__.py +4 -4
- langchain/utilities/arcee.py +4 -4
- langchain/utilities/clickup.py +4 -4
- langchain/utilities/dalle_image_generator.py +1 -1
- langchain/utilities/dataforseo_api_search.py +1 -1
- langchain/utilities/opaqueprompts.py +1 -1
- langchain/utilities/reddit_search.py +1 -1
- langchain/utilities/sql_database.py +1 -1
- langchain/utilities/tavily_search.py +1 -1
- langchain/utilities/vertexai.py +2 -2
- langchain/utils/__init__.py +1 -1
- langchain/utils/aiter.py +1 -1
- langchain/utils/html.py +3 -3
- langchain/utils/input.py +1 -1
- langchain/utils/iter.py +1 -1
- langchain/utils/json_schema.py +1 -3
- langchain/utils/strings.py +1 -1
- langchain/utils/utils.py +6 -6
- langchain/vectorstores/__init__.py +5 -5
- langchain/vectorstores/alibabacloud_opensearch.py +1 -1
- langchain/vectorstores/azure_cosmos_db.py +1 -1
- langchain/vectorstores/clickhouse.py +1 -1
- langchain/vectorstores/elastic_vector_search.py +1 -1
- langchain/vectorstores/elasticsearch.py +2 -2
- langchain/vectorstores/myscale.py +1 -1
- langchain/vectorstores/neo4j_vector.py +1 -1
- langchain/vectorstores/pgembedding.py +1 -1
- langchain/vectorstores/qdrant.py +1 -1
- langchain/vectorstores/redis/__init__.py +1 -1
- langchain/vectorstores/redis/base.py +1 -1
- langchain/vectorstores/redis/filters.py +4 -4
- langchain/vectorstores/redis/schema.py +6 -6
- langchain/vectorstores/sklearn.py +2 -2
- langchain/vectorstores/starrocks.py +1 -1
- langchain/vectorstores/utils.py +1 -1
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/METADATA +4 -14
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/RECORD +590 -591
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/WHEEL +1 -1
- langchain/smith/evaluation/utils.py +0 -0
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/entry_points.txt +0 -0
- {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/licenses/LICENSE +0 -0
|
@@ -6,6 +6,8 @@ from typing import Any, Literal, Union, cast
|
|
|
6
6
|
|
|
7
7
|
from langchain_core.callbacks import AsyncCallbackHandler
|
|
8
8
|
from langchain_core.outputs import LLMResult
|
|
9
|
+
from langchain_core.v1.messages import AIMessage
|
|
10
|
+
from typing_extensions import override
|
|
9
11
|
|
|
10
12
|
# TODO If used by two LLM runs in parallel this won't work as expected
|
|
11
13
|
|
|
@@ -19,31 +21,43 @@ class AsyncIteratorCallbackHandler(AsyncCallbackHandler):
|
|
|
19
21
|
|
|
20
22
|
@property
|
|
21
23
|
def always_verbose(self) -> bool:
|
|
24
|
+
"""Always verbose."""
|
|
22
25
|
return True
|
|
23
26
|
|
|
24
27
|
def __init__(self) -> None:
|
|
28
|
+
"""Instantiate AsyncIteratorCallbackHandler."""
|
|
25
29
|
self.queue = asyncio.Queue()
|
|
26
30
|
self.done = asyncio.Event()
|
|
27
31
|
|
|
32
|
+
@override
|
|
28
33
|
async def on_llm_start(
|
|
29
|
-
self,
|
|
34
|
+
self,
|
|
35
|
+
serialized: dict[str, Any],
|
|
36
|
+
prompts: list[str],
|
|
37
|
+
**kwargs: Any,
|
|
30
38
|
) -> None:
|
|
31
39
|
# If two calls are made in a row, this resets the state
|
|
32
40
|
self.done.clear()
|
|
33
41
|
|
|
42
|
+
@override
|
|
34
43
|
async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
|
|
35
44
|
if token is not None and token != "":
|
|
36
45
|
self.queue.put_nowait(token)
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
@override
|
|
48
|
+
async def on_llm_end(
|
|
49
|
+
self, response: Union[LLMResult, AIMessage], **kwargs: Any
|
|
50
|
+
) -> None:
|
|
39
51
|
self.done.set()
|
|
40
52
|
|
|
53
|
+
@override
|
|
41
54
|
async def on_llm_error(self, error: BaseException, **kwargs: Any) -> None:
|
|
42
55
|
self.done.set()
|
|
43
56
|
|
|
44
57
|
# TODO implement the other methods
|
|
45
58
|
|
|
46
59
|
async def aiter(self) -> AsyncIterator[str]:
|
|
60
|
+
"""Asynchronous iterator that yields tokens."""
|
|
47
61
|
while not self.queue.empty() or not self.done.is_set():
|
|
48
62
|
# Wait for the next token in the queue,
|
|
49
63
|
# but stop waiting if the done event is set
|
|
@@ -62,7 +76,7 @@ class AsyncIteratorCallbackHandler(AsyncCallbackHandler):
|
|
|
62
76
|
other.pop().cancel()
|
|
63
77
|
|
|
64
78
|
# Extract the value of the first completed task
|
|
65
|
-
token_or_done = cast(Union[str, Literal[True]], done.pop().result())
|
|
79
|
+
token_or_done = cast("Union[str, Literal[True]]", done.pop().result())
|
|
66
80
|
|
|
67
81
|
# If the extracted value is the boolean True, the done event was set
|
|
68
82
|
if token_or_done is True:
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Optional
|
|
3
|
+
from typing import Any, Optional, Union
|
|
4
4
|
|
|
5
5
|
from langchain_core.outputs import LLMResult
|
|
6
|
+
from langchain_core.v1.messages import AIMessage
|
|
7
|
+
from typing_extensions import override
|
|
6
8
|
|
|
7
9
|
from langchain.callbacks.streaming_aiter import AsyncIteratorCallbackHandler
|
|
8
10
|
|
|
@@ -15,6 +17,7 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
|
|
|
15
17
|
"""
|
|
16
18
|
|
|
17
19
|
def append_to_last_tokens(self, token: str) -> None:
|
|
20
|
+
"""Append token to the last tokens."""
|
|
18
21
|
self.last_tokens.append(token)
|
|
19
22
|
self.last_tokens_stripped.append(token.strip())
|
|
20
23
|
if len(self.last_tokens) > len(self.answer_prefix_tokens):
|
|
@@ -22,10 +25,10 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
|
|
|
22
25
|
self.last_tokens_stripped.pop(0)
|
|
23
26
|
|
|
24
27
|
def check_if_answer_reached(self) -> bool:
|
|
28
|
+
"""Check if the answer has been reached."""
|
|
25
29
|
if self.strip_tokens:
|
|
26
30
|
return self.last_tokens_stripped == self.answer_prefix_tokens_stripped
|
|
27
|
-
|
|
28
|
-
return self.last_tokens == self.answer_prefix_tokens
|
|
31
|
+
return self.last_tokens == self.answer_prefix_tokens
|
|
29
32
|
|
|
30
33
|
def __init__(
|
|
31
34
|
self,
|
|
@@ -61,17 +64,25 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
|
|
|
61
64
|
self.stream_prefix = stream_prefix
|
|
62
65
|
self.answer_reached = False
|
|
63
66
|
|
|
67
|
+
@override
|
|
64
68
|
async def on_llm_start(
|
|
65
|
-
self,
|
|
69
|
+
self,
|
|
70
|
+
serialized: dict[str, Any],
|
|
71
|
+
prompts: list[str],
|
|
72
|
+
**kwargs: Any,
|
|
66
73
|
) -> None:
|
|
67
74
|
# If two calls are made in a row, this resets the state
|
|
68
75
|
self.done.clear()
|
|
69
76
|
self.answer_reached = False
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
@override
|
|
79
|
+
async def on_llm_end(
|
|
80
|
+
self, response: Union[LLMResult, AIMessage], **kwargs: Any
|
|
81
|
+
) -> None:
|
|
72
82
|
if self.answer_reached:
|
|
73
83
|
self.done.set()
|
|
74
84
|
|
|
85
|
+
@override
|
|
75
86
|
async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
|
|
76
87
|
# Remember the last n tokens, where n = len(answer_prefix_tokens)
|
|
77
88
|
self.append_to_last_tokens(token)
|
|
@@ -4,6 +4,7 @@ import sys
|
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
from langchain_core.callbacks import StreamingStdOutCallbackHandler
|
|
7
|
+
from typing_extensions import override
|
|
7
8
|
|
|
8
9
|
DEFAULT_ANSWER_PREFIX_TOKENS = ["Final", "Answer", ":"]
|
|
9
10
|
|
|
@@ -16,6 +17,7 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
|
|
|
16
17
|
"""
|
|
17
18
|
|
|
18
19
|
def append_to_last_tokens(self, token: str) -> None:
|
|
20
|
+
"""Append token to the last tokens."""
|
|
19
21
|
self.last_tokens.append(token)
|
|
20
22
|
self.last_tokens_stripped.append(token.strip())
|
|
21
23
|
if len(self.last_tokens) > len(self.answer_prefix_tokens):
|
|
@@ -23,10 +25,10 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
|
|
|
23
25
|
self.last_tokens_stripped.pop(0)
|
|
24
26
|
|
|
25
27
|
def check_if_answer_reached(self) -> bool:
|
|
28
|
+
"""Check if the answer has been reached."""
|
|
26
29
|
if self.strip_tokens:
|
|
27
30
|
return self.last_tokens_stripped == self.answer_prefix_tokens_stripped
|
|
28
|
-
|
|
29
|
-
return self.last_tokens == self.answer_prefix_tokens
|
|
31
|
+
return self.last_tokens == self.answer_prefix_tokens
|
|
30
32
|
|
|
31
33
|
def __init__(
|
|
32
34
|
self,
|
|
@@ -62,12 +64,17 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
|
|
|
62
64
|
self.stream_prefix = stream_prefix
|
|
63
65
|
self.answer_reached = False
|
|
64
66
|
|
|
67
|
+
@override
|
|
65
68
|
def on_llm_start(
|
|
66
|
-
self,
|
|
69
|
+
self,
|
|
70
|
+
serialized: dict[str, Any],
|
|
71
|
+
prompts: list[str],
|
|
72
|
+
**kwargs: Any,
|
|
67
73
|
) -> None:
|
|
68
74
|
"""Run when LLM starts running."""
|
|
69
75
|
self.answer_reached = False
|
|
70
76
|
|
|
77
|
+
@override
|
|
71
78
|
def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
|
|
72
79
|
"""Run on new LLM token. Only available when streaming is enabled."""
|
|
73
80
|
|
|
@@ -70,11 +70,12 @@ def StreamlitCallbackHandler(
|
|
|
70
70
|
from langchain_community.callbacks.streamlit.streamlit_callback_handler import ( # noqa: E501
|
|
71
71
|
StreamlitCallbackHandler as _InternalStreamlitCallbackHandler,
|
|
72
72
|
)
|
|
73
|
-
except ImportError:
|
|
74
|
-
|
|
73
|
+
except ImportError as e:
|
|
74
|
+
msg = (
|
|
75
75
|
"To use the StreamlitCallbackHandler, please install "
|
|
76
76
|
"langchain-community with `pip install langchain-community`."
|
|
77
77
|
)
|
|
78
|
+
raise ImportError(msg) from e
|
|
78
79
|
|
|
79
80
|
return _InternalStreamlitCallbackHandler(
|
|
80
81
|
parent_container,
|
|
@@ -7,6 +7,7 @@ from uuid import UUID
|
|
|
7
7
|
from langchain_core.exceptions import TracerException
|
|
8
8
|
from langchain_core.tracers.stdout import FunctionCallbackHandler
|
|
9
9
|
from langchain_core.utils.input import get_bolded_text, get_colored_text
|
|
10
|
+
from typing_extensions import override
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class LoggingCallbackHandler(FunctionCallbackHandler):
|
|
@@ -21,6 +22,15 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
|
|
|
21
22
|
extra: Optional[dict] = None,
|
|
22
23
|
**kwargs: Any,
|
|
23
24
|
) -> None:
|
|
25
|
+
"""
|
|
26
|
+
Initialize the LoggingCallbackHandler.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
logger: the logger to use for logging
|
|
30
|
+
log_level: the logging level (default: logging.INFO)
|
|
31
|
+
extra: the extra context to log (default: None)
|
|
32
|
+
**kwargs:
|
|
33
|
+
"""
|
|
24
34
|
log_method = getattr(logger, logging.getLevelName(level=log_level).lower())
|
|
25
35
|
|
|
26
36
|
def callback(text: str) -> None:
|
|
@@ -28,6 +38,7 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
|
|
|
28
38
|
|
|
29
39
|
super().__init__(function=callback, **kwargs)
|
|
30
40
|
|
|
41
|
+
@override
|
|
31
42
|
def on_text(
|
|
32
43
|
self,
|
|
33
44
|
text: str,
|
|
@@ -42,5 +53,5 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
|
|
|
42
53
|
crumbs_str = ""
|
|
43
54
|
self.function_callback(
|
|
44
55
|
f"{get_colored_text('[text]', color='blue')}"
|
|
45
|
-
f" {get_bolded_text(f'{crumbs_str}New text:')}\n{text}"
|
|
56
|
+
f" {get_bolded_text(f'{crumbs_str}New text:')}\n{text}",
|
|
46
57
|
)
|
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback"
|
|
12
|
+
"TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
|
langchain/callbacks/utils.py
CHANGED
|
@@ -37,12 +37,12 @@ def __getattr__(name: str) -> Any:
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
__all__ = [
|
|
40
|
-
"
|
|
41
|
-
"import_pandas",
|
|
42
|
-
"import_textstat",
|
|
40
|
+
"BaseMetadataCallbackHandler",
|
|
43
41
|
"_flatten_dict",
|
|
44
42
|
"flatten_dict",
|
|
45
43
|
"hash_string",
|
|
44
|
+
"import_pandas",
|
|
45
|
+
"import_spacy",
|
|
46
|
+
"import_textstat",
|
|
46
47
|
"load_json",
|
|
47
|
-
"BaseMetadataCallbackHandler",
|
|
48
48
|
]
|
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"WandbCallbackHandler": "langchain_community.callbacks.wandb_callback"
|
|
12
|
+
"WandbCallbackHandler": "langchain_community.callbacks.wandb_callback",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
|
|
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
|
|
|
9
9
|
# Used to consolidate logic for raising deprecation warnings and
|
|
10
10
|
# handling optional imports.
|
|
11
11
|
DEPRECATED_LOOKUP = {
|
|
12
|
-
"WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback"
|
|
12
|
+
"WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback",
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
_import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
|
langchain/chains/api/base.py
CHANGED
|
@@ -47,8 +47,8 @@ def _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:
|
|
|
47
47
|
scheme, domain = _extract_scheme_and_domain(url)
|
|
48
48
|
|
|
49
49
|
for allowed_domain in limit_to_domains:
|
|
50
|
-
allowed_scheme,
|
|
51
|
-
if scheme == allowed_scheme and domain ==
|
|
50
|
+
allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)
|
|
51
|
+
if scheme == allowed_scheme and domain == allowed_domain_:
|
|
52
52
|
return True
|
|
53
53
|
return False
|
|
54
54
|
|
|
@@ -61,7 +61,7 @@ try:
|
|
|
61
61
|
message=(
|
|
62
62
|
"This class is deprecated and will be removed in langchain 1.0. "
|
|
63
63
|
"See API reference for replacement: "
|
|
64
|
-
"https://api.python.langchain.com/en/latest/chains/langchain.chains.api.base.APIChain.html"
|
|
64
|
+
"https://api.python.langchain.com/en/latest/chains/langchain.chains.api.base.APIChain.html"
|
|
65
65
|
),
|
|
66
66
|
removal="1.0",
|
|
67
67
|
)
|
|
@@ -191,6 +191,7 @@ try:
|
|
|
191
191
|
)
|
|
192
192
|
async for event in events:
|
|
193
193
|
event["messages"][-1].pretty_print()
|
|
194
|
+
|
|
194
195
|
""" # noqa: E501
|
|
195
196
|
|
|
196
197
|
api_request_chain: LLMChain
|
|
@@ -201,10 +202,10 @@ try:
|
|
|
201
202
|
output_key: str = "output" #: :meta private:
|
|
202
203
|
limit_to_domains: Optional[Sequence[str]] = Field(default_factory=list) # type: ignore[arg-type]
|
|
203
204
|
"""Use to limit the domains that can be accessed by the API chain.
|
|
204
|
-
|
|
205
|
+
|
|
205
206
|
* For example, to limit to just the domain `https://www.example.com`, set
|
|
206
207
|
`limit_to_domains=["https://www.example.com"]`.
|
|
207
|
-
|
|
208
|
+
|
|
208
209
|
* The default value is an empty tuple, which means that no domains are
|
|
209
210
|
allowed by default. By design this will raise an error on instantiation.
|
|
210
211
|
* Use a None if you want to allow all domains by default -- this is not
|
|
@@ -235,9 +236,8 @@ try:
|
|
|
235
236
|
input_vars = self.api_request_chain.prompt.input_variables
|
|
236
237
|
expected_vars = {"question", "api_docs"}
|
|
237
238
|
if set(input_vars) != expected_vars:
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
)
|
|
239
|
+
msg = f"Input variables should be {expected_vars}, got {input_vars}"
|
|
240
|
+
raise ValueError(msg)
|
|
241
241
|
return self
|
|
242
242
|
|
|
243
243
|
@model_validator(mode="before")
|
|
@@ -247,18 +247,20 @@ try:
|
|
|
247
247
|
# This check must be a pre=True check, so that a default of None
|
|
248
248
|
# won't be set to limit_to_domains if it's not provided.
|
|
249
249
|
if "limit_to_domains" not in values:
|
|
250
|
-
|
|
250
|
+
msg = (
|
|
251
251
|
"You must specify a list of domains to limit access using "
|
|
252
252
|
"`limit_to_domains`"
|
|
253
253
|
)
|
|
254
|
+
raise ValueError(msg)
|
|
254
255
|
if (
|
|
255
256
|
not values["limit_to_domains"]
|
|
256
257
|
and values["limit_to_domains"] is not None
|
|
257
258
|
):
|
|
258
|
-
|
|
259
|
+
msg = (
|
|
259
260
|
"Please provide a list of domains to limit access using "
|
|
260
261
|
"`limit_to_domains`."
|
|
261
262
|
)
|
|
263
|
+
raise ValueError(msg)
|
|
262
264
|
return values
|
|
263
265
|
|
|
264
266
|
@model_validator(mode="after")
|
|
@@ -267,9 +269,8 @@ try:
|
|
|
267
269
|
input_vars = self.api_answer_chain.prompt.input_variables
|
|
268
270
|
expected_vars = {"question", "api_docs", "api_url", "api_response"}
|
|
269
271
|
if set(input_vars) != expected_vars:
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
)
|
|
272
|
+
msg = f"Input variables should be {expected_vars}, got {input_vars}"
|
|
273
|
+
raise ValueError(msg)
|
|
273
274
|
return self
|
|
274
275
|
|
|
275
276
|
def _call(
|
|
@@ -287,14 +288,19 @@ try:
|
|
|
287
288
|
_run_manager.on_text(api_url, color="green", end="\n", verbose=self.verbose)
|
|
288
289
|
api_url = api_url.strip()
|
|
289
290
|
if self.limit_to_domains and not _check_in_allowed_domain(
|
|
290
|
-
api_url,
|
|
291
|
+
api_url,
|
|
292
|
+
self.limit_to_domains,
|
|
291
293
|
):
|
|
292
|
-
|
|
294
|
+
msg = (
|
|
293
295
|
f"{api_url} is not in the allowed domains: {self.limit_to_domains}"
|
|
294
296
|
)
|
|
297
|
+
raise ValueError(msg)
|
|
295
298
|
api_response = self.requests_wrapper.get(api_url)
|
|
296
299
|
_run_manager.on_text(
|
|
297
|
-
str(api_response),
|
|
300
|
+
str(api_response),
|
|
301
|
+
color="yellow",
|
|
302
|
+
end="\n",
|
|
303
|
+
verbose=self.verbose,
|
|
298
304
|
)
|
|
299
305
|
answer = self.api_answer_chain.predict(
|
|
300
306
|
question=question,
|
|
@@ -320,18 +326,26 @@ try:
|
|
|
320
326
|
callbacks=_run_manager.get_child(),
|
|
321
327
|
)
|
|
322
328
|
await _run_manager.on_text(
|
|
323
|
-
api_url,
|
|
329
|
+
api_url,
|
|
330
|
+
color="green",
|
|
331
|
+
end="\n",
|
|
332
|
+
verbose=self.verbose,
|
|
324
333
|
)
|
|
325
334
|
api_url = api_url.strip()
|
|
326
335
|
if self.limit_to_domains and not _check_in_allowed_domain(
|
|
327
|
-
api_url,
|
|
336
|
+
api_url,
|
|
337
|
+
self.limit_to_domains,
|
|
328
338
|
):
|
|
329
|
-
|
|
339
|
+
msg = (
|
|
330
340
|
f"{api_url} is not in the allowed domains: {self.limit_to_domains}"
|
|
331
341
|
)
|
|
342
|
+
raise ValueError(msg)
|
|
332
343
|
api_response = await self.requests_wrapper.aget(api_url)
|
|
333
344
|
await _run_manager.on_text(
|
|
334
|
-
str(api_response),
|
|
345
|
+
str(api_response),
|
|
346
|
+
color="yellow",
|
|
347
|
+
end="\n",
|
|
348
|
+
verbose=self.verbose,
|
|
335
349
|
)
|
|
336
350
|
answer = await self.api_answer_chain.apredict(
|
|
337
351
|
question=question,
|
|
@@ -350,7 +364,7 @@ try:
|
|
|
350
364
|
headers: Optional[dict] = None,
|
|
351
365
|
api_url_prompt: BasePromptTemplate = API_URL_PROMPT,
|
|
352
366
|
api_response_prompt: BasePromptTemplate = API_RESPONSE_PROMPT,
|
|
353
|
-
limit_to_domains: Optional[Sequence[str]] =
|
|
367
|
+
limit_to_domains: Optional[Sequence[str]] = (),
|
|
354
368
|
**kwargs: Any,
|
|
355
369
|
) -> APIChain:
|
|
356
370
|
"""Load chain from just an LLM and the api docs."""
|
|
@@ -373,8 +387,12 @@ try:
|
|
|
373
387
|
except ImportError:
|
|
374
388
|
|
|
375
389
|
class APIChain: # type: ignore[no-redef]
|
|
376
|
-
|
|
377
|
-
|
|
390
|
+
"""Raise an ImportError if APIChain is used without langchain_community."""
|
|
391
|
+
|
|
392
|
+
def __init__(self, *_: Any, **__: Any) -> None:
|
|
393
|
+
"""Raise an ImportError if APIChain is used without langchain_community."""
|
|
394
|
+
msg = (
|
|
378
395
|
"To use the APIChain, you must install the langchain_community package."
|
|
379
396
|
"pip install langchain_community"
|
|
380
397
|
)
|
|
398
|
+
raise ImportError(msg)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
NEWS_DOCS = """API documentation:
|
|
3
2
|
Endpoint: https://newsapi.org
|
|
4
3
|
Top headlines /v2/top-headlines
|
|
@@ -29,4 +28,4 @@ Response object
|
|
|
29
28
|
content | string | The unformatted content of the article, where available. This is truncated to 200 chars.
|
|
30
29
|
|
|
31
30
|
Use page size: 2
|
|
32
|
-
"""
|
|
31
|
+
""" # noqa: E501
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
OPEN_METEO_DOCS = """BASE URL: https://api.open-meteo.com/
|
|
3
2
|
|
|
4
3
|
API Documentation
|
|
@@ -30,4 +29,4 @@ showers Preceding hour sum mm (inch) Showers from convective precipitation in mi
|
|
|
30
29
|
weathercode Instant WMO code Weather condition as a numeric code. Follow WMO weather interpretation codes. See table below for details.
|
|
31
30
|
snow_depth Instant meters Snow depth on the ground
|
|
32
31
|
freezinglevel_height Instant meters Altitude above sea level of the 0°C level
|
|
33
|
-
visibility Instant meters Viewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km."""
|
|
32
|
+
visibility Instant meters Viewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km.""" # noqa: E501
|
langchain/chains/api/prompt.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
from langchain_core.prompts.prompt import PromptTemplate
|
|
3
2
|
|
|
4
3
|
API_URL_PROMPT_TEMPLATE = """You are given the below API Documentation:
|
|
@@ -7,7 +6,7 @@ Using this documentation, generate the full API url to call for answering the us
|
|
|
7
6
|
You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.
|
|
8
7
|
|
|
9
8
|
Question:{question}
|
|
10
|
-
API url:"""
|
|
9
|
+
API url:""" # noqa: E501
|
|
11
10
|
|
|
12
11
|
API_URL_PROMPT = PromptTemplate(
|
|
13
12
|
input_variables=[
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# flake8: noqa
|
|
2
1
|
TMDB_DOCS = """API documentation:
|
|
3
2
|
Endpoint: https://api.themoviedb.org/3
|
|
4
3
|
GET /search/movie
|
|
@@ -34,4 +33,4 @@ backdrop_path | string or null | optional
|
|
|
34
33
|
popularity | number | optional
|
|
35
34
|
vote_count | integer | optional
|
|
36
35
|
video | boolean | optional
|
|
37
|
-
vote_average | number | optional"""
|
|
36
|
+
vote_average | number | optional""" # noqa: E501
|