From 5a016de53fcb1e8c88151ac1e06e22c82ed59f7b Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Thu, 2 Oct 2025 23:33:24 -0400 Subject: [PATCH] chore: delete deprecated items (#33192) Removed: - `libs/core/langchain_core/chat_history.py`: `add_user_message` and `add_ai_message` in favor of `add_messages` and `aadd_messages` - `libs/core/langchain_core/language_models/base.py`: `predict`, `predict_messages`, and async versions in favor of `invoke`. removed `_all_required_field_names` since it was a wrapper on `get_pydantic_field_names` - `libs/core/langchain_core/language_models/chat_models.py`: `callback_manager` param in favor of `callbacks`. `__call__` and `call_as_llm` method in favor of `invoke` - `libs/core/langchain_core/language_models/llms.py`: `callback_manager` param in favor of `callbacks`. `__call__`, `predict`, `apredict`, and `apredict_messages` methods in favor of `invoke` - `libs/core/langchain_core/prompts/chat.py`: `from_role_strings` and `from_strings` in favor of `from_messages` - `libs/core/langchain_core/prompts/pipeline.py`: removed `PipelinePromptTemplate` - `libs/core/langchain_core/prompts/prompt.py`: `input_variables` param on `from_file` as it wasn't used - `libs/core/langchain_core/tools/base.py`: `callback_manager` param in favor of `callbacks` - `libs/core/langchain_core/tracers/context.py`: `tracing_enabled` in favor of `tracing_enabled_v2` - `libs/core/langchain_core/tracers/langchain_v1.py`: entire module - `libs/core/langchain_core/utils/loading.py`: entire module, `try_load_from_hub` - `libs/core/langchain_core/vectorstores/in_memory.py`: `upsert` in favor of `add_documents` - `libs/standard-tests/langchain_tests/integration_tests/chat_models.py` and `libs/standard-tests/langchain_tests/unit_tests/chat_models.py`: `tool_choice_value` as models should accept `tool_choice="any"` - `langchain` will consequently no longer expose these items if it was previously --------- Co-authored-by: Mohammad Mohtashim <45242107+keenborder786@users.noreply.github.com> Co-authored-by: Caspar Broekhuizen Co-authored-by: ccurme Co-authored-by: Christophe Bornet Co-authored-by: Eugene Yurtsev Co-authored-by: Sadra Barikbin Co-authored-by: Vadym Barda --- .../.grit/patterns/langchain_to_core.json | 479 ++++++++++++++---- libs/core/langchain_core/chat_history.py | 38 +- .../langchain_core/language_models/base.py | 107 ---- .../language_models/chat_models.py | 156 +----- .../langchain_core/language_models/llms.py | 117 +---- libs/core/langchain_core/load/mapping.py | 6 +- libs/core/langchain_core/prompts/__init__.py | 6 +- libs/core/langchain_core/prompts/chat.py | 38 -- libs/core/langchain_core/prompts/pipeline.py | 138 ----- libs/core/langchain_core/prompts/prompt.py | 12 - libs/core/langchain_core/tools/base.py | 45 -- libs/core/langchain_core/tracers/context.py | 16 - .../langchain_core/tracers/langchain_v1.py | 31 -- libs/core/langchain_core/utils/__init__.py | 3 - libs/core/langchain_core/utils/loading.py | 35 -- .../langchain_core/vectorstores/in_memory.py | 72 --- .../tests/unit_tests/prompts/test_chat.py | 31 -- .../tests/unit_tests/prompts/test_imports.py | 1 - .../prompts/test_pipeline_prompt.py | 68 --- .../unit_tests/runnables/test_history.py | 7 +- .../tests/unit_tests/utils/test_imports.py | 1 - .../agent_token_buffer_memory.py | 4 +- .../agents/openai_functions_agent/base.py | 6 +- .../openai_functions_multi_agent/base.py | 4 +- .../langchain/langchain/callbacks/__init__.py | 2 - libs/langchain/langchain/callbacks/manager.py | 2 - .../langchain/callbacks/tracers/__init__.py | 2 - .../callbacks/tracers/langchain_v1.py | 3 - libs/langchain/langchain/prompts/__init__.py | 5 +- libs/langchain/langchain/prompts/loading.py | 2 - libs/langchain/langchain/prompts/pipeline.py | 3 - .../langchain/schema/callbacks/manager.py | 2 - .../schema/callbacks/tracers/langchain_v1.py | 3 - libs/langchain/langchain/utilities/loading.py | 4 - libs/langchain/langchain/utils/loading.py | 3 - .../unit_tests/callbacks/test_imports.py | 1 - .../unit_tests/callbacks/test_manager.py | 1 - .../tests/unit_tests/prompts/test_imports.py | 1 - .../tests/unit_tests/prompts/test_loading.py | 1 - .../tests/unit_tests/prompts/test_pipeline.py | 7 - .../langchain/agents/react_agent.py | 4 +- .../tests/integration_tests/llms/test_base.py | 4 +- .../integration_tests/chat_models.py | 17 - .../langchain_tests/unit_tests/tools.py | 2 +- 44 files changed, 402 insertions(+), 1088 deletions(-) delete mode 100644 libs/core/langchain_core/prompts/pipeline.py delete mode 100644 libs/core/langchain_core/tracers/langchain_v1.py delete mode 100644 libs/core/langchain_core/utils/loading.py delete mode 100644 libs/core/tests/unit_tests/prompts/test_pipeline_prompt.py delete mode 100644 libs/langchain/langchain/callbacks/tracers/langchain_v1.py delete mode 100644 libs/langchain/langchain/prompts/pipeline.py delete mode 100644 libs/langchain/langchain/schema/callbacks/tracers/langchain_v1.py delete mode 100644 libs/langchain/langchain/utilities/loading.py delete mode 100644 libs/langchain/langchain/utils/loading.py delete mode 100644 libs/langchain/tests/unit_tests/prompts/test_pipeline.py diff --git a/libs/cli/langchain_cli/namespaces/migrate/.grit/patterns/langchain_to_core.json b/libs/cli/langchain_cli/namespaces/migrate/.grit/patterns/langchain_to_core.json index 7170f1d28a8..3a767528618 100644 --- a/libs/cli/langchain_cli/namespaces/migrate/.grit/patterns/langchain_to_core.json +++ b/libs/cli/langchain_cli/namespaces/migrate/.grit/patterns/langchain_to_core.json @@ -1,5 +1,8 @@ [ - ["langchain._api.deprecated", "langchain_core._api.deprecated"], + [ + "langchain._api.deprecated", + "langchain_core._api.deprecated" + ], [ "langchain._api.LangChainDeprecationWarning", "langchain_core._api.LangChainDeprecationWarning" @@ -12,7 +15,10 @@ "langchain._api.surface_langchain_deprecation_warnings", "langchain_core._api.surface_langchain_deprecation_warnings" ], - ["langchain._api.warn_deprecated", "langchain_core._api.warn_deprecated"], + [ + "langchain._api.warn_deprecated", + "langchain_core._api.warn_deprecated" + ], [ "langchain._api.deprecation.LangChainDeprecationWarning", "langchain_core._api.LangChainDeprecationWarning" @@ -21,7 +27,10 @@ "langchain._api.deprecation.LangChainPendingDeprecationWarning", "langchain_core._api.deprecation.LangChainPendingDeprecationWarning" ], - ["langchain._api.deprecation.deprecated", "langchain_core._api.deprecated"], + [ + "langchain._api.deprecation.deprecated", + "langchain_core._api.deprecated" + ], [ "langchain._api.deprecation.suppress_langchain_deprecation_warning", "langchain_core._api.suppress_langchain_deprecation_warning" @@ -38,12 +47,30 @@ "langchain._api.path.get_relative_path", "langchain_core._api.get_relative_path" ], - ["langchain._api.path.as_import_path", "langchain_core._api.as_import_path"], - ["langchain.agents.Tool", "langchain_core.tools.Tool"], - ["langchain.agents.tool", "langchain_core.tools.tool"], - ["langchain.agents.tools.BaseTool", "langchain_core.tools.BaseTool"], - ["langchain.agents.tools.tool", "langchain_core.tools.tool"], - ["langchain.agents.tools.Tool", "langchain_core.tools.Tool"], + [ + "langchain._api.path.as_import_path", + "langchain_core._api.as_import_path" + ], + [ + "langchain.agents.Tool", + "langchain_core.tools.Tool" + ], + [ + "langchain.agents.tool", + "langchain_core.tools.tool" + ], + [ + "langchain.agents.tools.BaseTool", + "langchain_core.tools.BaseTool" + ], + [ + "langchain.agents.tools.tool", + "langchain_core.tools.tool" + ], + [ + "langchain.agents.tools.Tool", + "langchain_core.tools.Tool" + ], [ "langchain.base_language.BaseLanguageModel", "langchain_core.language_models.BaseLanguageModel" @@ -60,10 +87,6 @@ "langchain.callbacks.LangChainTracer", "langchain_core.tracers.LangChainTracer" ], - [ - "langchain.callbacks.tracing_enabled", - "langchain_core.tracers.context.tracing_enabled" - ], [ "langchain.callbacks.tracing_v2_enabled", "langchain_core.tracers.context.tracing_v2_enabled" @@ -300,7 +323,10 @@ "langchain.callbacks.tracers.schemas.LLMRun", "langchain_core.tracers.schemas.LLMRun" ], - ["langchain.callbacks.tracers.schemas.Run", "langchain_core.tracers.Run"], + [ + "langchain.callbacks.tracers.schemas.Run", + "langchain_core.tracers.Run" + ], [ "langchain.callbacks.tracers.schemas.RunTypeEnum", "langchain_core.tracers.schemas.RunTypeEnum" @@ -361,8 +387,14 @@ "langchain.chat_models.base.agenerate_from_stream", "langchain_core.language_models.chat_models.agenerate_from_stream" ], - ["langchain.docstore.document.Document", "langchain_core.documents.Document"], - ["langchain.document_loaders.Blob", "langchain_core.document_loaders.Blob"], + [ + "langchain.docstore.document.Document", + "langchain_core.documents.Document" + ], + [ + "langchain.document_loaders.Blob", + "langchain_core.document_loaders.Blob" + ], [ "langchain.document_loaders.BlobLoader", "langchain_core.document_loaders.BlobLoader" @@ -399,29 +431,74 @@ "langchain.formatting.StrictFormatter", "langchain_core.utils.StrictFormatter" ], - ["langchain.input.get_bolded_text", "langchain_core.utils.get_bolded_text"], + [ + "langchain.input.get_bolded_text", + "langchain_core.utils.get_bolded_text" + ], [ "langchain.input.get_color_mapping", "langchain_core.utils.get_color_mapping" ], - ["langchain.input.get_colored_text", "langchain_core.utils.get_colored_text"], - ["langchain.input.print_text", "langchain_core.utils.print_text"], + [ + "langchain.input.get_colored_text", + "langchain_core.utils.get_colored_text" + ], + [ + "langchain.input.print_text", + "langchain_core.utils.print_text" + ], [ "langchain.llms.base.BaseLanguageModel", "langchain_core.language_models.BaseLanguageModel" ], - ["langchain.llms.base.BaseLLM", "langchain_core.language_models.BaseLLM"], - ["langchain.llms.base.LLM", "langchain_core.language_models.LLM"], - ["langchain.load.dumpd", "langchain_core.load.dumpd"], - ["langchain.load.dumps", "langchain_core.load.dumps"], - ["langchain.load.load", "langchain_core.load.load"], - ["langchain.load.loads", "langchain_core.load.loads"], - ["langchain.load.dump.default", "langchain_core.load.dump.default"], - ["langchain.load.dump.dumps", "langchain_core.load.dumps"], - ["langchain.load.dump.dumpd", "langchain_core.load.dumpd"], - ["langchain.load.load.Reviver", "langchain_core.load.load.Reviver"], - ["langchain.load.load.loads", "langchain_core.load.loads"], - ["langchain.load.load.load", "langchain_core.load.load"], + [ + "langchain.llms.base.BaseLLM", + "langchain_core.language_models.BaseLLM" + ], + [ + "langchain.llms.base.LLM", + "langchain_core.language_models.LLM" + ], + [ + "langchain.load.dumpd", + "langchain_core.load.dumpd" + ], + [ + "langchain.load.dumps", + "langchain_core.load.dumps" + ], + [ + "langchain.load.load", + "langchain_core.load.load" + ], + [ + "langchain.load.loads", + "langchain_core.load.loads" + ], + [ + "langchain.load.dump.default", + "langchain_core.load.dump.default" + ], + [ + "langchain.load.dump.dumps", + "langchain_core.load.dumps" + ], + [ + "langchain.load.dump.dumpd", + "langchain_core.load.dumpd" + ], + [ + "langchain.load.load.Reviver", + "langchain_core.load.load.Reviver" + ], + [ + "langchain.load.load.loads", + "langchain_core.load.loads" + ], + [ + "langchain.load.load.load", + "langchain_core.load.load" + ], [ "langchain.load.serializable.BaseSerialized", "langchain_core.load.serializable.BaseSerialized" @@ -602,7 +679,10 @@ "langchain.prompts.PipelinePromptTemplate", "langchain_core.prompts.PipelinePromptTemplate" ], - ["langchain.prompts.PromptTemplate", "langchain_core.prompts.PromptTemplate"], + [ + "langchain.prompts.PromptTemplate", + "langchain_core.prompts.PromptTemplate" + ], [ "langchain.prompts.SemanticSimilarityExampleSelector", "langchain_core.example_selectors.SemanticSimilarityExampleSelector" @@ -615,12 +695,18 @@ "langchain.prompts.SystemMessagePromptTemplate", "langchain_core.prompts.SystemMessagePromptTemplate" ], - ["langchain.prompts.load_prompt", "langchain_core.prompts.load_prompt"], + [ + "langchain.prompts.load_prompt", + "langchain_core.prompts.load_prompt" + ], [ "langchain.prompts.FewShotChatMessagePromptTemplate", "langchain_core.prompts.FewShotChatMessagePromptTemplate" ], - ["langchain.prompts.Prompt", "langchain_core.prompts.PromptTemplate"], + [ + "langchain.prompts.Prompt", + "langchain_core.prompts.PromptTemplate" + ], [ "langchain.prompts.base.jinja2_formatter", "langchain_core.prompts.jinja2_formatter" @@ -801,13 +887,34 @@ "langchain.prompts.prompt.PromptTemplate", "langchain_core.prompts.PromptTemplate" ], - ["langchain.prompts.prompt.Prompt", "langchain_core.prompts.PromptTemplate"], - ["langchain.schema.BaseCache", "langchain_core.caches.BaseCache"], - ["langchain.schema.BaseMemory", "langchain_core.memory.BaseMemory"], - ["langchain.schema.BaseStore", "langchain_core.stores.BaseStore"], - ["langchain.schema.AgentFinish", "langchain_core.agents.AgentFinish"], - ["langchain.schema.AgentAction", "langchain_core.agents.AgentAction"], - ["langchain.schema.Document", "langchain_core.documents.Document"], + [ + "langchain.prompts.prompt.Prompt", + "langchain_core.prompts.PromptTemplate" + ], + [ + "langchain.schema.BaseCache", + "langchain_core.caches.BaseCache" + ], + [ + "langchain.schema.BaseMemory", + "langchain_core.memory.BaseMemory" + ], + [ + "langchain.schema.BaseStore", + "langchain_core.stores.BaseStore" + ], + [ + "langchain.schema.AgentFinish", + "langchain_core.agents.AgentFinish" + ], + [ + "langchain.schema.AgentAction", + "langchain_core.agents.AgentAction" + ], + [ + "langchain.schema.Document", + "langchain_core.documents.Document" + ], [ "langchain.schema.BaseChatMessageHistory", "langchain_core.chat_history.BaseChatMessageHistory" @@ -816,15 +923,30 @@ "langchain.schema.BaseDocumentTransformer", "langchain_core.documents.BaseDocumentTransformer" ], - ["langchain.schema.BaseMessage", "langchain_core.messages.BaseMessage"], - ["langchain.schema.ChatMessage", "langchain_core.messages.ChatMessage"], + [ + "langchain.schema.BaseMessage", + "langchain_core.messages.BaseMessage" + ], + [ + "langchain.schema.ChatMessage", + "langchain_core.messages.ChatMessage" + ], [ "langchain.schema.FunctionMessage", "langchain_core.messages.FunctionMessage" ], - ["langchain.schema.HumanMessage", "langchain_core.messages.HumanMessage"], - ["langchain.schema.AIMessage", "langchain_core.messages.AIMessage"], - ["langchain.schema.SystemMessage", "langchain_core.messages.SystemMessage"], + [ + "langchain.schema.HumanMessage", + "langchain_core.messages.HumanMessage" + ], + [ + "langchain.schema.AIMessage", + "langchain_core.messages.AIMessage" + ], + [ + "langchain.schema.SystemMessage", + "langchain_core.messages.SystemMessage" + ], [ "langchain.schema.messages_from_dict", "langchain_core.messages.messages_from_dict" @@ -849,18 +971,42 @@ "langchain.schema.get_buffer_string", "langchain_core.messages.get_buffer_string" ], - ["langchain.schema.RunInfo", "langchain_core.outputs.RunInfo"], - ["langchain.schema.LLMResult", "langchain_core.outputs.LLMResult"], - ["langchain.schema.ChatResult", "langchain_core.outputs.ChatResult"], - ["langchain.schema.ChatGeneration", "langchain_core.outputs.ChatGeneration"], - ["langchain.schema.Generation", "langchain_core.outputs.Generation"], - ["langchain.schema.PromptValue", "langchain_core.prompt_values.PromptValue"], + [ + "langchain.schema.RunInfo", + "langchain_core.outputs.RunInfo" + ], + [ + "langchain.schema.LLMResult", + "langchain_core.outputs.LLMResult" + ], + [ + "langchain.schema.ChatResult", + "langchain_core.outputs.ChatResult" + ], + [ + "langchain.schema.ChatGeneration", + "langchain_core.outputs.ChatGeneration" + ], + [ + "langchain.schema.Generation", + "langchain_core.outputs.Generation" + ], + [ + "langchain.schema.PromptValue", + "langchain_core.prompt_values.PromptValue" + ], [ "langchain.schema.LangChainException", "langchain_core.exceptions.LangChainException" ], - ["langchain.schema.BaseRetriever", "langchain_core.retrievers.BaseRetriever"], - ["langchain.schema.Memory", "langchain_core.memory.BaseMemory"], + [ + "langchain.schema.BaseRetriever", + "langchain_core.retrievers.BaseRetriever" + ], + [ + "langchain.schema.Memory", + "langchain_core.memory.BaseMemory" + ], [ "langchain.schema.OutputParserException", "langchain_core.exceptions.OutputParserException" @@ -885,13 +1031,22 @@ "langchain.schema.format_document", "langchain_core.prompts.format_document" ], - ["langchain.schema.agent.AgentAction", "langchain_core.agents.AgentAction"], + [ + "langchain.schema.agent.AgentAction", + "langchain_core.agents.AgentAction" + ], [ "langchain.schema.agent.AgentActionMessageLog", "langchain_core.agents.AgentActionMessageLog" ], - ["langchain.schema.agent.AgentFinish", "langchain_core.agents.AgentFinish"], - ["langchain.schema.cache.BaseCache", "langchain_core.caches.BaseCache"], + [ + "langchain.schema.agent.AgentFinish", + "langchain_core.agents.AgentFinish" + ], + [ + "langchain.schema.cache.BaseCache", + "langchain_core.caches.BaseCache" + ], [ "langchain.schema.callbacks.base.RetrieverManagerMixin", "langchain_core.callbacks.RetrieverManagerMixin" @@ -1168,7 +1323,10 @@ "langchain.schema.chat_history.BaseChatMessageHistory", "langchain_core.chat_history.BaseChatMessageHistory" ], - ["langchain.schema.document.Document", "langchain_core.documents.Document"], + [ + "langchain.schema.document.Document", + "langchain_core.documents.Document" + ], [ "langchain.schema.document.BaseDocumentTransformer", "langchain_core.documents.BaseDocumentTransformer" @@ -1189,7 +1347,10 @@ "langchain.schema.language_model._get_token_ids_default_method", "langchain_core.language_models.base._get_token_ids_default_method" ], - ["langchain.schema.memory.BaseMemory", "langchain_core.memory.BaseMemory"], + [ + "langchain.schema.memory.BaseMemory", + "langchain_core.memory.BaseMemory" + ], [ "langchain.schema.messages.get_buffer_string", "langchain_core.messages.get_buffer_string" @@ -1214,7 +1375,10 @@ "langchain.schema.messages.HumanMessageChunk", "langchain_core.messages.HumanMessageChunk" ], - ["langchain.schema.messages.AIMessage", "langchain_core.messages.AIMessage"], + [ + "langchain.schema.messages.AIMessage", + "langchain_core.messages.AIMessage" + ], [ "langchain.schema.messages.AIMessageChunk", "langchain_core.messages.AIMessageChunk" @@ -1271,7 +1435,10 @@ "langchain.schema.messages.message_to_dict", "langchain_core.messages.message_to_dict" ], - ["langchain.schema.output.Generation", "langchain_core.outputs.Generation"], + [ + "langchain.schema.output.Generation", + "langchain_core.outputs.Generation" + ], [ "langchain.schema.output.GenerationChunk", "langchain_core.outputs.GenerationChunk" @@ -1284,9 +1451,18 @@ "langchain.schema.output.ChatGenerationChunk", "langchain_core.outputs.ChatGenerationChunk" ], - ["langchain.schema.output.RunInfo", "langchain_core.outputs.RunInfo"], - ["langchain.schema.output.ChatResult", "langchain_core.outputs.ChatResult"], - ["langchain.schema.output.LLMResult", "langchain_core.outputs.LLMResult"], + [ + "langchain.schema.output.RunInfo", + "langchain_core.outputs.RunInfo" + ], + [ + "langchain.schema.output.ChatResult", + "langchain_core.outputs.ChatResult" + ], + [ + "langchain.schema.output.LLMResult", + "langchain_core.outputs.LLMResult" + ], [ "langchain.schema.output_parser.BaseLLMOutputParser", "langchain_core.output_parsers.BaseLLMOutputParser" @@ -1359,7 +1535,10 @@ "langchain.schema.runnable.RouterRunnable", "langchain_core.runnables.RouterRunnable" ], - ["langchain.schema.runnable.Runnable", "langchain_core.runnables.Runnable"], + [ + "langchain.schema.runnable.Runnable", + "langchain_core.runnables.Runnable" + ], [ "langchain.schema.runnable.RunnableSerializable", "langchain_core.runnables.RunnableSerializable" @@ -1596,7 +1775,10 @@ "langchain.schema.runnable.utils.SupportsAdd", "langchain_core.runnables.utils.SupportsAdd" ], - ["langchain.schema.runnable.utils.add", "langchain_core.runnables.add"], + [ + "langchain.schema.runnable.utils.add", + "langchain_core.runnables.add" + ], [ "langchain.schema.runnable.utils.ConfigurableField", "langchain_core.runnables.ConfigurableField" @@ -1617,7 +1799,10 @@ "langchain.schema.runnable.utils.get_unique_config_specs", "langchain_core.runnables.utils.get_unique_config_specs" ], - ["langchain.schema.runnable.utils.aadd", "langchain_core.runnables.aadd"], + [ + "langchain.schema.runnable.utils.aadd", + "langchain_core.runnables.aadd" + ], [ "langchain.schema.runnable.utils.gated_coro", "langchain_core.runnables.utils.gated_coro" @@ -1626,7 +1811,10 @@ "langchain.schema.runnable.utils.gather_with_concurrency", "langchain_core.runnables.utils.gather_with_concurrency" ], - ["langchain.schema.storage.BaseStore", "langchain_core.stores.BaseStore"], + [ + "langchain.schema.storage.BaseStore", + "langchain_core.stores.BaseStore" + ], [ "langchain.schema.vectorstore.VectorStore", "langchain_core.vectorstores.VectorStore" @@ -1635,14 +1823,26 @@ "langchain.schema.vectorstore.VectorStoreRetriever", "langchain_core.vectorstores.VectorStoreRetriever" ], - ["langchain.tools.BaseTool", "langchain_core.tools.BaseTool"], - ["langchain.tools.StructuredTool", "langchain_core.tools.StructuredTool"], - ["langchain.tools.Tool", "langchain_core.tools.Tool"], + [ + "langchain.tools.BaseTool", + "langchain_core.tools.BaseTool" + ], + [ + "langchain.tools.StructuredTool", + "langchain_core.tools.StructuredTool" + ], + [ + "langchain.tools.Tool", + "langchain_core.tools.Tool" + ], [ "langchain.tools.format_tool_to_openai_function", "langchain_core.utils.function_calling.format_tool_to_openai_function" ], - ["langchain.tools.tool", "langchain_core.tools.tool"], + [ + "langchain.tools.tool", + "langchain_core.tools.tool" + ], [ "langchain.tools.base.SchemaAnnotationError", "langchain_core.tools.SchemaAnnotationError" @@ -1651,14 +1851,26 @@ "langchain.tools.base.create_schema_from_function", "langchain_core.tools.create_schema_from_function" ], - ["langchain.tools.base.ToolException", "langchain_core.tools.ToolException"], - ["langchain.tools.base.BaseTool", "langchain_core.tools.BaseTool"], - ["langchain.tools.base.Tool", "langchain_core.tools.Tool"], + [ + "langchain.tools.base.ToolException", + "langchain_core.tools.ToolException" + ], + [ + "langchain.tools.base.BaseTool", + "langchain_core.tools.BaseTool" + ], + [ + "langchain.tools.base.Tool", + "langchain_core.tools.Tool" + ], [ "langchain.tools.base.StructuredTool", "langchain_core.tools.StructuredTool" ], - ["langchain.tools.base.tool", "langchain_core.tools.tool"], + [ + "langchain.tools.base.tool", + "langchain_core.tools.tool" + ], [ "langchain.tools.convert_to_openai.format_tool_to_openai_function", "langchain_core.utils.function_calling.format_tool_to_openai_function" @@ -1675,49 +1887,94 @@ "langchain.utilities.loading.try_load_from_hub", "langchain_core.utils.try_load_from_hub" ], - ["langchain.utils.StrictFormatter", "langchain_core.utils.StrictFormatter"], + [ + "langchain.utils.StrictFormatter", + "langchain_core.utils.StrictFormatter" + ], [ "langchain.utils.check_package_version", "langchain_core.utils.check_package_version" ], - ["langchain.utils.comma_list", "langchain_core.utils.comma_list"], + [ + "langchain.utils.comma_list", + "langchain_core.utils.comma_list" + ], [ "langchain.utils.convert_to_secret_str", "langchain_core.utils.convert_to_secret_str" ], - ["langchain.utils.get_bolded_text", "langchain_core.utils.get_bolded_text"], + [ + "langchain.utils.get_bolded_text", + "langchain_core.utils.get_bolded_text" + ], [ "langchain.utils.get_color_mapping", "langchain_core.utils.get_color_mapping" ], - ["langchain.utils.get_colored_text", "langchain_core.utils.get_colored_text"], + [ + "langchain.utils.get_colored_text", + "langchain_core.utils.get_colored_text" + ], [ "langchain.utils.get_from_dict_or_env", "langchain_core.utils.get_from_dict_or_env" ], - ["langchain.utils.get_from_env", "langchain_core.utils.get_from_env"], + [ + "langchain.utils.get_from_env", + "langchain_core.utils.get_from_env" + ], [ "langchain.utils.get_pydantic_field_names", "langchain_core.utils.get_pydantic_field_names" ], - ["langchain.utils.guard_import", "langchain_core.utils.guard_import"], - ["langchain.utils.mock_now", "langchain_core.utils.mock_now"], - ["langchain.utils.print_text", "langchain_core.utils.print_text"], + [ + "langchain.utils.guard_import", + "langchain_core.utils.guard_import" + ], + [ + "langchain.utils.mock_now", + "langchain_core.utils.mock_now" + ], + [ + "langchain.utils.print_text", + "langchain_core.utils.print_text" + ], [ "langchain.utils.raise_for_status_with_text", "langchain_core.utils.raise_for_status_with_text" ], - ["langchain.utils.stringify_dict", "langchain_core.utils.stringify_dict"], - ["langchain.utils.stringify_value", "langchain_core.utils.stringify_value"], - ["langchain.utils.xor_args", "langchain_core.utils.xor_args"], - ["langchain.utils.aiter.py_anext", "langchain_core.utils.aiter.py_anext"], - ["langchain.utils.aiter.NoLock", "langchain_core.utils.aiter.NoLock"], - ["langchain.utils.aiter.Tee", "langchain_core.utils.aiter.Tee"], + [ + "langchain.utils.stringify_dict", + "langchain_core.utils.stringify_dict" + ], + [ + "langchain.utils.stringify_value", + "langchain_core.utils.stringify_value" + ], + [ + "langchain.utils.xor_args", + "langchain_core.utils.xor_args" + ], + [ + "langchain.utils.aiter.py_anext", + "langchain_core.utils.aiter.py_anext" + ], + [ + "langchain.utils.aiter.NoLock", + "langchain_core.utils.aiter.NoLock" + ], + [ + "langchain.utils.aiter.Tee", + "langchain_core.utils.aiter.Tee" + ], [ "langchain.utils.env.get_from_dict_or_env", "langchain_core.utils.get_from_dict_or_env" ], - ["langchain.utils.env.get_from_env", "langchain_core.utils.get_from_env"], + [ + "langchain.utils.env.get_from_env", + "langchain_core.utils.get_from_env" + ], [ "langchain.utils.formatting.StrictFormatter", "langchain_core.utils.StrictFormatter" @@ -1742,10 +1999,22 @@ "langchain.utils.input.get_bolded_text", "langchain_core.utils.get_bolded_text" ], - ["langchain.utils.input.print_text", "langchain_core.utils.print_text"], - ["langchain.utils.iter.NoLock", "langchain_core.utils.iter.NoLock"], - ["langchain.utils.iter.tee_peer", "langchain_core.utils.iter.tee_peer"], - ["langchain.utils.iter.Tee", "langchain_core.utils.iter.Tee"], + [ + "langchain.utils.input.print_text", + "langchain_core.utils.print_text" + ], + [ + "langchain.utils.iter.NoLock", + "langchain_core.utils.iter.NoLock" + ], + [ + "langchain.utils.iter.tee_peer", + "langchain_core.utils.iter.tee_peer" + ], + [ + "langchain.utils.iter.Tee", + "langchain_core.utils.iter.Tee" + ], [ "langchain.utils.iter.batch_iterate", "langchain_core.utils.iter.batch_iterate" @@ -1798,14 +2067,26 @@ "langchain.utils.strings.stringify_dict", "langchain_core.utils.stringify_dict" ], - ["langchain.utils.strings.comma_list", "langchain_core.utils.comma_list"], - ["langchain.utils.utils.xor_args", "langchain_core.utils.xor_args"], + [ + "langchain.utils.strings.comma_list", + "langchain_core.utils.comma_list" + ], + [ + "langchain.utils.utils.xor_args", + "langchain_core.utils.xor_args" + ], [ "langchain.utils.utils.raise_for_status_with_text", "langchain_core.utils.raise_for_status_with_text" ], - ["langchain.utils.utils.mock_now", "langchain_core.utils.mock_now"], - ["langchain.utils.utils.guard_import", "langchain_core.utils.guard_import"], + [ + "langchain.utils.utils.mock_now", + "langchain_core.utils.mock_now" + ], + [ + "langchain.utils.utils.guard_import", + "langchain_core.utils.guard_import" + ], [ "langchain.utils.utils.check_package_version", "langchain_core.utils.check_package_version" diff --git a/libs/core/langchain_core/chat_history.py b/libs/core/langchain_core/chat_history.py index 023effef798..b440db352ee 100644 --- a/libs/core/langchain_core/chat_history.py +++ b/libs/core/langchain_core/chat_history.py @@ -17,14 +17,12 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING from pydantic import BaseModel, Field from langchain_core.messages import ( - AIMessage, BaseMessage, - HumanMessage, get_buffer_string, ) from langchain_core.runnables.config import run_in_executor @@ -126,40 +124,6 @@ class BaseChatMessageHistory(ABC): """ return await run_in_executor(None, lambda: self.messages) - def add_user_message(self, message: Union[HumanMessage, str]) -> None: - """Convenience method for adding a human message string to the store. - - !!! note - This is a convenience method. Code should favor the bulk ``add_messages`` - interface instead to save on round-trips to the persistence layer. - - This method may be deprecated in a future release. - - Args: - message: The human message to add to the store. - """ - if isinstance(message, HumanMessage): - self.add_message(message) - else: - self.add_message(HumanMessage(content=message)) - - def add_ai_message(self, message: Union[AIMessage, str]) -> None: - """Convenience method for adding an AI message string to the store. - - !!! note - This is a convenience method. Code should favor the bulk ``add_messages`` - interface instead to save on round-trips to the persistence layer. - - This method may be deprecated in a future release. - - Args: - message: The AI message to add. - """ - if isinstance(message, AIMessage): - self.add_message(message) - else: - self.add_message(AIMessage(content=message)) - def add_message(self, message: BaseMessage) -> None: """Add a Message object to the store. diff --git a/libs/core/langchain_core/language_models/base.py b/libs/core/langchain_core/language_models/base.py index 979ddec604f..2321af2f05d 100644 --- a/libs/core/langchain_core/language_models/base.py +++ b/libs/core/langchain_core/language_models/base.py @@ -20,7 +20,6 @@ from typing import ( from pydantic import BaseModel, ConfigDict, Field, field_validator from typing_extensions import TypedDict, override -from langchain_core._api import deprecated from langchain_core.caches import BaseCache from langchain_core.callbacks import Callbacks from langchain_core.globals import get_verbose @@ -37,7 +36,6 @@ from langchain_core.prompt_values import ( StringPromptValue, ) from langchain_core.runnables import Runnable, RunnableSerializable -from langchain_core.utils import get_pydantic_field_names if TYPE_CHECKING: from langchain_core.outputs import LLMResult @@ -259,102 +257,6 @@ class BaseLanguageModel( # generate responses that match a given schema. raise NotImplementedError - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @abstractmethod - def predict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - """Pass a single string input to the model and return a string. - - Use this method when passing in raw text. If you want to pass in specific types - of chat messages, use predict_messages. - - Args: - text: String input to pass to the model. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - Top model prediction as a string. - - """ - - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @abstractmethod - def predict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - """Pass a message sequence to the model and return a message. - - Use this method when passing in chat messages. If you want to pass in raw text, - use predict. - - Args: - messages: A sequence of chat messages corresponding to a single model input. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - Top model prediction as a message. - - """ - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @abstractmethod - async def apredict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - """Asynchronously pass a string to the model and return a string. - - Use this method when calling pure text generation models and only the top - candidate generation is needed. - - Args: - text: String input to pass to the model. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - Top model prediction as a string. - - """ - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @abstractmethod - async def apredict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - """Asynchronously pass messages to the model and return a message. - - Use this method when calling chat models and only the top candidate generation - is needed. - - Args: - messages: A sequence of chat messages corresponding to a single model input. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - Top model prediction as a message. - - """ - @property def _identifying_params(self) -> Mapping[str, Any]: """Get the identifying parameters.""" @@ -417,12 +319,3 @@ class BaseLanguageModel( stacklevel=2, ) return sum(self.get_num_tokens(get_buffer_string([m])) for m in messages) - - @classmethod - def _all_required_field_names(cls) -> set: - """DEPRECATED: Kept for backwards compatibility. - - Use ``get_pydantic_field_names``. - - """ - return get_pydantic_field_names(cls) diff --git a/libs/core/langchain_core/language_models/chat_models.py b/libs/core/langchain_core/language_models/chat_models.py index 2c3dd357f62..070d71f8482 100644 --- a/libs/core/langchain_core/language_models/chat_models.py +++ b/libs/core/langchain_core/language_models/chat_models.py @@ -6,22 +6,19 @@ import asyncio import inspect import json import typing -import warnings from abc import ABC, abstractmethod from collections.abc import AsyncIterator, Iterator, Sequence from functools import cached_property from operator import itemgetter from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Union, cast -from pydantic import BaseModel, ConfigDict, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field from typing_extensions import override -from langchain_core._api import deprecated from langchain_core.caches import BaseCache from langchain_core.callbacks import ( AsyncCallbackManager, AsyncCallbackManagerForLLMRun, - BaseCallbackManager, CallbackManager, CallbackManagerForLLMRun, Callbacks, @@ -42,7 +39,6 @@ from langchain_core.messages import ( AIMessageChunk, AnyMessage, BaseMessage, - HumanMessage, convert_to_messages, is_data_content_block, message_chunk_to_message, @@ -319,16 +315,6 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): """ # noqa: E501 - callback_manager: Optional[BaseCallbackManager] = deprecated( - name="callback_manager", since="0.1.7", removal="1.0", alternative="callbacks" - )( - Field( - default=None, - exclude=True, - description="Callback manager to add to the run trace.", - ) - ) - rate_limiter: Optional[BaseRateLimiter] = Field(default=None, exclude=True) "An optional rate limiter to use for limiting the number of requests." @@ -373,27 +359,6 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): """ - @model_validator(mode="before") - @classmethod - def raise_deprecation(cls, values: dict) -> Any: - """Emit deprecation warning if ``callback_manager`` is used. - - Args: - values (Dict): Values to validate. - - Returns: - Dict: Validated values. - - """ - if values.get("callback_manager") is not None: - warnings.warn( - "callback_manager is deprecated. Please use callbacks instead.", - DeprecationWarning, - stacklevel=5, - ) - values["callbacks"] = values.pop("callback_manager", None) - return values - model_config = ConfigDict( arbitrary_types_allowed=True, ) @@ -1455,40 +1420,6 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): break yield item # type: ignore[misc] - @deprecated("0.1.7", alternative="invoke", removal="1.0") - def __call__( - self, - messages: list[BaseMessage], - stop: Optional[list[str]] = None, - callbacks: Callbacks = None, - **kwargs: Any, - ) -> BaseMessage: - """Call the model. - - Args: - messages: List of messages. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - callbacks: Callbacks to pass through. Used for executing additional - functionality, such as logging or streaming, throughout generation. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Raises: - ValueError: If the generation is not a chat generation. - - Returns: - The model output message. - - """ - generation = self.generate( - [messages], stop=stop, callbacks=callbacks, **kwargs - ).generations[0][0] - if isinstance(generation, ChatGeneration): - return generation.message - msg = "Unexpected generation type" - raise ValueError(msg) - async def _call_async( self, messages: list[BaseMessage], @@ -1505,91 +1436,6 @@ class BaseChatModel(BaseLanguageModel[AIMessage], ABC): msg = "Unexpected generation type" raise ValueError(msg) - @deprecated("0.1.7", alternative="invoke", removal="1.0") - def call_as_llm( - self, message: str, stop: Optional[list[str]] = None, **kwargs: Any - ) -> str: - """Call the model. - - Args: - message: The input message. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - The model output string. - - """ - return self.predict(message, stop=stop, **kwargs) - - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @override - def predict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - """Predict the next message. - - Args: - text: The input message. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Raises: - ValueError: If the output is not a string. - - Returns: - The predicted output string. - - """ - stop_ = None if stop is None else list(stop) - result = self([HumanMessage(content=text)], stop=stop_, **kwargs) - if isinstance(result.content, str): - return result.content - msg = "Cannot use predict when output is not a string." - raise ValueError(msg) - - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @override - def predict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - stop_ = None if stop is None else list(stop) - return self(messages, stop=stop_, **kwargs) - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @override - async def apredict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - stop_ = None if stop is None else list(stop) - result = await self._call_async( - [HumanMessage(content=text)], stop=stop_, **kwargs - ) - if isinstance(result.content, str): - return result.content - msg = "Cannot use predict when output is not a string." - raise ValueError(msg) - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @override - async def apredict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - stop_ = None if stop is None else list(stop) - return await self._call_async(messages, stop=stop_, **kwargs) - @property @abstractmethod def _llm_type(self) -> str: diff --git a/libs/core/langchain_core/language_models/llms.py b/libs/core/langchain_core/language_models/llms.py index 045fa411093..a98dac6dedf 100644 --- a/libs/core/langchain_core/language_models/llms.py +++ b/libs/core/langchain_core/language_models/llms.py @@ -7,7 +7,6 @@ import functools import inspect import json import logging -import warnings from abc import ABC, abstractmethod from collections.abc import AsyncIterator, Iterator, Sequence from pathlib import Path @@ -21,7 +20,7 @@ from typing import ( ) import yaml -from pydantic import ConfigDict, Field, model_validator +from pydantic import ConfigDict from tenacity import ( RetryCallState, before_sleep_log, @@ -33,7 +32,6 @@ from tenacity import ( ) from typing_extensions import override -from langchain_core._api import deprecated from langchain_core.caches import BaseCache from langchain_core.callbacks import ( AsyncCallbackManager, @@ -51,10 +49,7 @@ from langchain_core.language_models.base import ( ) from langchain_core.load import dumpd from langchain_core.messages import ( - AIMessage, - BaseMessage, convert_to_messages, - get_buffer_string, ) from langchain_core.outputs import Generation, GenerationChunk, LLMResult, RunInfo from langchain_core.prompt_values import ChatPromptValue, PromptValue, StringPromptValue @@ -296,26 +291,10 @@ class BaseLLM(BaseLanguageModel[str], ABC): It should take in a prompt and return a string. """ - callback_manager: Optional[BaseCallbackManager] = Field(default=None, exclude=True) - """[DEPRECATED]""" - model_config = ConfigDict( arbitrary_types_allowed=True, ) - @model_validator(mode="before") - @classmethod - def raise_deprecation(cls, values: dict) -> Any: - """Raise deprecation warning if callback_manager is used.""" - if values.get("callback_manager") is not None: - warnings.warn( - "callback_manager is deprecated. Please use callbacks instead.", - DeprecationWarning, - stacklevel=5, - ) - values["callbacks"] = values.pop("callback_manager", None) - return values - @functools.cached_property def _serialized(self) -> dict[str, Any]: return dumpd(self) @@ -1308,56 +1287,6 @@ class BaseLLM(BaseLanguageModel[str], ABC): generations = [existing_prompts[i] for i in range(len(prompts))] return LLMResult(generations=generations, llm_output=llm_output, run=run_info) - @deprecated("0.1.7", alternative="invoke", removal="1.0") - def __call__( - self, - prompt: str, - stop: Optional[list[str]] = None, - callbacks: Callbacks = None, - *, - tags: Optional[list[str]] = None, - metadata: Optional[dict[str, Any]] = None, - **kwargs: Any, - ) -> str: - """Check Cache and run the LLM on the given prompt and input. - - Args: - prompt: The prompt to generate from. - stop: Stop words to use when generating. Model output is cut off at the - first occurrence of any of these substrings. - callbacks: Callbacks to pass through. Used for executing additional - functionality, such as logging or streaming, throughout generation. - tags: List of tags to associate with the prompt. - metadata: Metadata to associate with the prompt. - **kwargs: Arbitrary additional keyword arguments. These are usually passed - to the model provider API call. - - Returns: - The generated text. - - Raises: - ValueError: If the prompt is not a string. - """ - if not isinstance(prompt, str): - msg = ( - "Argument `prompt` is expected to be a string. Instead found " - f"{type(prompt)}. If you want to run the LLM on multiple prompts, use " - "`generate` instead." - ) - raise ValueError(msg) # noqa: TRY004 - return ( - self.generate( - [prompt], - stop=stop, - callbacks=callbacks, - tags=tags, - metadata=metadata, - **kwargs, - ) - .generations[0][0] - .text - ) - async def _call_async( self, prompt: str, @@ -1379,50 +1308,6 @@ class BaseLLM(BaseLanguageModel[str], ABC): ) return result.generations[0][0].text - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @override - def predict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - stop_ = None if stop is None else list(stop) - return self(text, stop=stop_, **kwargs) - - @deprecated("0.1.7", alternative="invoke", removal="1.0") - @override - def predict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - text = get_buffer_string(messages) - stop_ = None if stop is None else list(stop) - content = self(text, stop=stop_, **kwargs) - return AIMessage(content=content) - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @override - async def apredict( - self, text: str, *, stop: Optional[Sequence[str]] = None, **kwargs: Any - ) -> str: - stop_ = None if stop is None else list(stop) - return await self._call_async(text, stop=stop_, **kwargs) - - @deprecated("0.1.7", alternative="ainvoke", removal="1.0") - @override - async def apredict_messages( - self, - messages: list[BaseMessage], - *, - stop: Optional[Sequence[str]] = None, - **kwargs: Any, - ) -> BaseMessage: - text = get_buffer_string(messages) - stop_ = None if stop is None else list(stop) - content = await self._call_async(text, stop=stop_, **kwargs) - return AIMessage(content=content) - def __str__(self) -> str: """Return a string representation of the object for printing.""" cls_name = f"\033[1m{self.__class__.__name__}\033[0m" diff --git a/libs/core/langchain_core/load/mapping.py b/libs/core/langchain_core/load/mapping.py index aee837b539d..e2367ea1ebb 100644 --- a/libs/core/langchain_core/load/mapping.py +++ b/libs/core/langchain_core/load/mapping.py @@ -413,11 +413,10 @@ SERIALIZABLE_MAPPING: dict[tuple[str, ...], tuple[str, ...]] = { "few_shot_with_templates", "FewShotPromptWithTemplates", ), - ("langchain", "prompts", "pipeline", "PipelinePromptTemplate"): ( + ("langchain", "prompts", "pipeline"): ( "langchain_core", "prompts", "pipeline", - "PipelinePromptTemplate", ), ("langchain", "prompts", "base", "StringPromptTemplate"): ( "langchain_core", @@ -846,11 +845,10 @@ OLD_CORE_NAMESPACES_MAPPING: dict[tuple[str, ...], tuple[str, ...]] = { "few_shot_with_templates", "FewShotPromptWithTemplates", ), - ("langchain_core", "prompts", "pipeline", "PipelinePromptTemplate"): ( + ("langchain_core", "prompts", "pipeline"): ( "langchain_core", "prompts", "pipeline", - "PipelinePromptTemplate", ), ("langchain_core", "prompts", "string", "StringPromptTemplate"): ( "langchain_core", diff --git a/libs/core/langchain_core/prompts/__init__.py b/libs/core/langchain_core/prompts/__init__.py index 532970d7751..1505a9f8783 100644 --- a/libs/core/langchain_core/prompts/__init__.py +++ b/libs/core/langchain_core/prompts/__init__.py @@ -8,8 +8,7 @@ from multiple components and prompt values. Prompt classes and functions make co .. code-block:: - BasePromptTemplate --> PipelinePromptTemplate - StringPromptTemplate --> PromptTemplate + BasePromptTemplate --> StringPromptTemplate --> PromptTemplate FewShotPromptTemplate FewShotPromptWithTemplates BaseChatPromptTemplate --> AutoGPTPrompt @@ -53,7 +52,6 @@ if TYPE_CHECKING: FewShotPromptWithTemplates, ) from langchain_core.prompts.loading import load_prompt - from langchain_core.prompts.pipeline import PipelinePromptTemplate from langchain_core.prompts.prompt import PromptTemplate from langchain_core.prompts.string import ( StringPromptTemplate, @@ -75,7 +73,6 @@ __all__ = ( "FewShotPromptWithTemplates", "HumanMessagePromptTemplate", "MessagesPlaceholder", - "PipelinePromptTemplate", "PromptTemplate", "StringPromptTemplate", "SystemMessagePromptTemplate", @@ -104,7 +101,6 @@ _dynamic_imports = { "FewShotPromptTemplate": "few_shot", "FewShotPromptWithTemplates": "few_shot_with_templates", "load_prompt": "loading", - "PipelinePromptTemplate": "pipeline", "PromptTemplate": "prompt", "StringPromptTemplate": "string", "check_valid_template": "string", diff --git a/libs/core/langchain_core/prompts/chat.py b/libs/core/langchain_core/prompts/chat.py index 2fcbc75850c..dc9c45f8274 100644 --- a/libs/core/langchain_core/prompts/chat.py +++ b/libs/core/langchain_core/prompts/chat.py @@ -24,7 +24,6 @@ from pydantic import ( ) from typing_extensions import Self, override -from langchain_core._api import deprecated from langchain_core.messages import ( AIMessage, AnyMessage, @@ -262,14 +261,12 @@ class BaseStringMessagePromptTemplate(BaseMessagePromptTemplate, ABC): def from_template_file( cls, template_file: Union[str, Path], - input_variables: list[str], # noqa: ARG003 # Deprecated **kwargs: Any, ) -> Self: """Create a class from a template file. Args: template_file: path to a template file. String or Path. - input_variables: list of input variables. **kwargs: keyword arguments to pass to the constructor. Returns: @@ -1105,41 +1102,6 @@ class ChatPromptTemplate(BaseChatPromptTemplate): message = HumanMessagePromptTemplate(prompt=prompt_template) return cls.from_messages([message]) - @classmethod - @deprecated("0.0.1", alternative="from_messages", pending=True) - def from_role_strings( - cls, string_messages: list[tuple[str, str]] - ) -> ChatPromptTemplate: - """Create a chat prompt template from a list of (role, template) tuples. - - Args: - string_messages: list of (role, template) tuples. - - Returns: - a chat prompt template. - """ - return cls( - messages=[ - ChatMessagePromptTemplate.from_template(template, role=role) - for role, template in string_messages - ] - ) - - @classmethod - @deprecated("0.0.1", alternative="from_messages", pending=True) - def from_strings( - cls, string_messages: list[tuple[type[BaseMessagePromptTemplate], str]] - ) -> ChatPromptTemplate: - """Create a chat prompt template from a list of (role class, template) tuples. - - Args: - string_messages: list of (role class, template) tuples. - - Returns: - a chat prompt template. - """ - return cls.from_messages(string_messages) - @classmethod def from_messages( cls, diff --git a/libs/core/langchain_core/prompts/pipeline.py b/libs/core/langchain_core/prompts/pipeline.py deleted file mode 100644 index 194979fcfee..00000000000 --- a/libs/core/langchain_core/prompts/pipeline.py +++ /dev/null @@ -1,138 +0,0 @@ -"""[DEPRECATED] Pipeline prompt template.""" - -from typing import Any - -from pydantic import model_validator - -from langchain_core._api.deprecation import deprecated -from langchain_core.prompt_values import PromptValue -from langchain_core.prompts.base import BasePromptTemplate -from langchain_core.prompts.chat import BaseChatPromptTemplate - - -def _get_inputs(inputs: dict, input_variables: list[str]) -> dict: - return {k: inputs[k] for k in input_variables} - - -@deprecated( - since="0.3.22", - removal="1.0", - message=( - "This class is deprecated in favor of chaining individual prompts together." - ), -) -class PipelinePromptTemplate(BasePromptTemplate): - """Pipeline prompt template. - - This has been deprecated in favor of chaining individual prompts together in your - code; e.g. using a for loop, you could do: - - .. code-block:: python - - my_input = {"key": "value"} - for name, prompt in pipeline_prompts: - my_input[name] = prompt.invoke(my_input).to_string() - my_output = final_prompt.invoke(my_input) - - Prompt template for composing multiple prompt templates together. - - This can be useful when you want to reuse parts of prompts. - - A PipelinePrompt consists of two main parts: - - - final_prompt: This is the final prompt that is returned - - pipeline_prompts: This is a list of tuples, consisting - of a string (``name``) and a Prompt Template. - Each PromptTemplate will be formatted and then passed - to future prompt templates as a variable with - the same name as ``name`` - - """ - - final_prompt: BasePromptTemplate - """The final prompt that is returned.""" - pipeline_prompts: list[tuple[str, BasePromptTemplate]] - """A list of tuples, consisting of a string (``name``) and a Prompt Template.""" - - @classmethod - def get_lc_namespace(cls) -> list[str]: - """Get the namespace of the langchain object. - - Returns: - ``["langchain", "prompts", "pipeline"]`` - """ - return ["langchain", "prompts", "pipeline"] - - @model_validator(mode="before") - @classmethod - def get_input_variables(cls, values: dict) -> Any: - """Get input variables.""" - created_variables = set() - all_variables = set() - for k, prompt in values["pipeline_prompts"]: - created_variables.add(k) - all_variables.update(prompt.input_variables) - values["input_variables"] = list(all_variables.difference(created_variables)) - return values - - def format_prompt(self, **kwargs: Any) -> PromptValue: - """Format the prompt with the inputs. - - Args: - kwargs: Any arguments to be passed to the prompt template. - - Returns: - A formatted string. - """ - for k, prompt in self.pipeline_prompts: - inputs = _get_inputs(kwargs, prompt.input_variables) - if isinstance(prompt, BaseChatPromptTemplate): - kwargs[k] = prompt.format_messages(**inputs) - else: - kwargs[k] = prompt.format(**inputs) - inputs = _get_inputs(kwargs, self.final_prompt.input_variables) - return self.final_prompt.format_prompt(**inputs) - - async def aformat_prompt(self, **kwargs: Any) -> PromptValue: - """Async format the prompt with the inputs. - - Args: - kwargs: Any arguments to be passed to the prompt template. - - Returns: - A formatted string. - """ - for k, prompt in self.pipeline_prompts: - inputs = _get_inputs(kwargs, prompt.input_variables) - if isinstance(prompt, BaseChatPromptTemplate): - kwargs[k] = await prompt.aformat_messages(**inputs) - else: - kwargs[k] = await prompt.aformat(**inputs) - inputs = _get_inputs(kwargs, self.final_prompt.input_variables) - return await self.final_prompt.aformat_prompt(**inputs) - - def format(self, **kwargs: Any) -> str: - """Format the prompt with the inputs. - - Args: - kwargs: Any arguments to be passed to the prompt template. - - Returns: - A formatted string. - """ - return self.format_prompt(**kwargs).to_string() - - async def aformat(self, **kwargs: Any) -> str: - """Async format the prompt with the inputs. - - Args: - kwargs: Any arguments to be passed to the prompt template. - - Returns: - A formatted string. - """ - return (await self.aformat_prompt(**kwargs)).to_string() - - @property - def _prompt_type(self) -> str: - raise ValueError diff --git a/libs/core/langchain_core/prompts/prompt.py b/libs/core/langchain_core/prompts/prompt.py index 168e8ffc2b0..b5ab56d7a43 100644 --- a/libs/core/langchain_core/prompts/prompt.py +++ b/libs/core/langchain_core/prompts/prompt.py @@ -2,7 +2,6 @@ from __future__ import annotations -import warnings from pathlib import Path from typing import TYPE_CHECKING, Any, Optional, Union @@ -235,7 +234,6 @@ class PromptTemplate(StringPromptTemplate): def from_file( cls, template_file: Union[str, Path], - input_variables: Optional[list[str]] = None, encoding: Optional[str] = None, **kwargs: Any, ) -> PromptTemplate: @@ -243,23 +241,13 @@ class PromptTemplate(StringPromptTemplate): Args: template_file: The path to the file containing the prompt template. - input_variables: [DEPRECATED] A list of variable names the final prompt - template will expect. Defaults to None. encoding: The encoding system for opening the template file. If not provided, will use the OS default. - input_variables is ignored as from_file now delegates to from_template(). - Returns: The prompt loaded from the file. """ template = Path(template_file).read_text(encoding=encoding) - if input_variables: - warnings.warn( - "`input_variables' is deprecated and ignored.", - DeprecationWarning, - stacklevel=2, - ) return cls.from_template(template=template, **kwargs) @classmethod diff --git a/libs/core/langchain_core/tools/base.py b/libs/core/langchain_core/tools/base.py index e58711ecb99..733c6ac6a62 100644 --- a/libs/core/langchain_core/tools/base.py +++ b/libs/core/langchain_core/tools/base.py @@ -31,7 +31,6 @@ from pydantic import ( PydanticDeprecationWarning, SkipValidation, ValidationError, - model_validator, validate_arguments, ) from pydantic.v1 import BaseModel as BaseModelV1 @@ -39,10 +38,8 @@ from pydantic.v1 import ValidationError as ValidationErrorV1 from pydantic.v1 import validate_arguments as validate_arguments_v1 from typing_extensions import override -from langchain_core._api import deprecated from langchain_core.callbacks import ( AsyncCallbackManager, - BaseCallbackManager, CallbackManager, Callbacks, ) @@ -464,15 +461,6 @@ class ChildTool(BaseTool): callbacks: Callbacks = Field(default=None, exclude=True) """Callbacks to be called during tool execution.""" - callback_manager: Optional[BaseCallbackManager] = deprecated( - name="callback_manager", since="0.1.7", removal="1.0", alternative="callbacks" - )( - Field( - default=None, - exclude=True, - description="Callback manager to add to the run trace.", - ) - ) tags: Optional[list[str]] = None """Optional list of tags associated with the tool. Defaults to None. These tags will be associated with each call to this tool, @@ -700,26 +688,6 @@ class ChildTool(BaseTool): } return tool_input - @model_validator(mode="before") - @classmethod - def raise_deprecation(cls, values: dict) -> Any: - """Raise deprecation warning if callback_manager is used. - - Args: - values: The values to validate. - - Returns: - The validated values. - """ - if values.get("callback_manager") is not None: - warnings.warn( - "callback_manager is deprecated. Please use callbacks instead.", - DeprecationWarning, - stacklevel=6, - ) - values["callbacks"] = values.pop("callback_manager", None) - return values - @abstractmethod def _run(self, *args: Any, **kwargs: Any) -> Any: """Use the tool. @@ -1011,19 +979,6 @@ class ChildTool(BaseTool): await run_manager.on_tool_end(output, color=color, name=self.name, **kwargs) return output - @deprecated("0.1.47", alternative="invoke", removal="1.0") - def __call__(self, tool_input: str, callbacks: Callbacks = None) -> str: - """Make tool callable (deprecated). - - Args: - tool_input: The input to the tool. - callbacks: Callbacks to use during execution. - - Returns: - The tool's output. - """ - return self.run(tool_input, callbacks=callbacks) - def _is_tool_call(x: Any) -> bool: """Check if the input is a tool call dictionary. diff --git a/libs/core/langchain_core/tracers/context.py b/libs/core/langchain_core/tracers/context.py index 838eaa6d8f5..5c68ffef5aa 100644 --- a/libs/core/langchain_core/tracers/context.py +++ b/libs/core/langchain_core/tracers/context.py @@ -27,7 +27,6 @@ if TYPE_CHECKING: from langchain_core.callbacks.base import BaseCallbackHandler, Callbacks from langchain_core.callbacks.manager import AsyncCallbackManager, CallbackManager - from langchain_core.tracers.schemas import TracerSessionV1 # for backwards partial compatibility if this is imported by users but unused tracing_callback_var: Any = None @@ -39,21 +38,6 @@ run_collector_var: ContextVar[Optional[RunCollectorCallbackHandler]] = ContextVa ) -@contextmanager -def tracing_enabled( - session_name: str = "default", # noqa: ARG001 -) -> Generator[TracerSessionV1, None, None]: - """Throw an error because this has been replaced by ``tracing_v2_enabled``. - - Raises: - RuntimeError: Always, because this function is deprecated. - """ - msg = ( - "tracing_enabled is no longer supported. Please use tracing_enabled_v2 instead." - ) - raise RuntimeError(msg) - - @contextmanager def tracing_v2_enabled( project_name: Optional[str] = None, diff --git a/libs/core/langchain_core/tracers/langchain_v1.py b/libs/core/langchain_core/tracers/langchain_v1.py deleted file mode 100644 index 92634f5c912..00000000000 --- a/libs/core/langchain_core/tracers/langchain_v1.py +++ /dev/null @@ -1,31 +0,0 @@ -"""This module is deprecated and will be removed in a future release. - -Please use LangChainTracer instead. -""" - -from typing import Any - - -def get_headers(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001 - """Throw an error because this has been replaced by get_headers. - - Raises: - RuntimeError: Always, because this function is deprecated. - """ - msg = ( - "get_headers for LangChainTracerV1 is no longer supported. " - "Please use LangChainTracer instead." - ) - raise RuntimeError(msg) - - -def LangChainTracerV1(*args: Any, **kwargs: Any) -> Any: # noqa: N802,ARG001 - """Throw an error because this has been replaced by ``LangChainTracer``. - - Raises: - RuntimeError: Always, because this class is deprecated. - """ - msg = ( - "LangChainTracerV1 is no longer supported. Please use LangChainTracer instead." - ) - raise RuntimeError(msg) diff --git a/libs/core/langchain_core/utils/__init__.py b/libs/core/langchain_core/utils/__init__.py index 5f26895db83..e16f3c11583 100644 --- a/libs/core/langchain_core/utils/__init__.py +++ b/libs/core/langchain_core/utils/__init__.py @@ -21,7 +21,6 @@ if TYPE_CHECKING: print_text, ) from langchain_core.utils.iter import batch_iterate - from langchain_core.utils.loading import try_load_from_hub from langchain_core.utils.pydantic import pre_init from langchain_core.utils.strings import ( comma_list, @@ -68,7 +67,6 @@ __all__ = ( "secret_from_env", "stringify_dict", "stringify_value", - "try_load_from_hub", "xor_args", ) @@ -84,7 +82,6 @@ _dynamic_imports = { "get_colored_text": "input", "print_text": "input", "batch_iterate": "iter", - "try_load_from_hub": "loading", "pre_init": "pydantic", "comma_list": "strings", "sanitize_for_postgres": "strings", diff --git a/libs/core/langchain_core/utils/loading.py b/libs/core/langchain_core/utils/loading.py deleted file mode 100644 index 55066a7bf45..00000000000 --- a/libs/core/langchain_core/utils/loading.py +++ /dev/null @@ -1,35 +0,0 @@ -"""Utilities for loading configurations from langchain_core-hub.""" - -import warnings -from typing import Any - -from langchain_core._api.deprecation import deprecated - - -@deprecated( - since="0.1.30", - removal="1.0", - message=( - "Using the hwchase17/langchain-hub " - "repo for prompts is deprecated. Please use " - " instead." - ), -) -def try_load_from_hub( - *args: Any, # noqa: ARG001 - **kwargs: Any, # noqa: ARG001 -) -> Any: - """[DEPRECATED] Try to load from the old Hub. - - Returns: - None always, indicating that we shouldn't load from the old hub. - """ - warnings.warn( - "Loading from the deprecated github-based Hub is no longer supported. " - "Please use the new LangChain Hub at https://smith.langchain.com/hub instead.", - DeprecationWarning, - stacklevel=2, - ) - # return None, which indicates that we shouldn't load from old hub - # and might just be a filepath for e.g. load_chain - return None diff --git a/libs/core/langchain_core/vectorstores/in_memory.py b/libs/core/langchain_core/vectorstores/in_memory.py index 93ecf2c9030..768b92c448a 100644 --- a/libs/core/langchain_core/vectorstores/in_memory.py +++ b/libs/core/langchain_core/vectorstores/in_memory.py @@ -14,7 +14,6 @@ from typing import ( from typing_extensions import override -from langchain_core._api import deprecated from langchain_core.documents import Document from langchain_core.load import dumpd, load from langchain_core.vectorstores import VectorStore @@ -25,7 +24,6 @@ if TYPE_CHECKING: from collections.abc import Iterator, Sequence from langchain_core.embeddings import Embeddings - from langchain_core.indexing import UpsertResponse try: import numpy as np @@ -281,76 +279,6 @@ class InMemoryVectorStore(VectorStore): ) return documents - @deprecated( - alternative="VectorStore.add_documents", - message=( - "This was a beta API that was added in 0.2.11. It'll be removed in 0.3.0." - ), - since="0.2.29", - removal="1.0", - ) - def upsert(self, items: Sequence[Document], /, **_kwargs: Any) -> UpsertResponse: - """[DEPRECATED] Upsert documents into the store. - - Args: - items: The documents to upsert. - - Returns: - The upsert response. - """ - vectors = self.embedding.embed_documents([item.page_content for item in items]) - ids = [] - for item, vector in zip(items, vectors): - doc_id = item.id or str(uuid.uuid4()) - ids.append(doc_id) - self.store[doc_id] = { - "id": doc_id, - "vector": vector, - "text": item.page_content, - "metadata": item.metadata, - } - return { - "succeeded": ids, - "failed": [], - } - - @deprecated( - alternative="VectorStore.aadd_documents", - message=( - "This was a beta API that was added in 0.2.11. It'll be removed in 0.3.0." - ), - since="0.2.29", - removal="1.0", - ) - async def aupsert( - self, items: Sequence[Document], /, **_kwargs: Any - ) -> UpsertResponse: - """[DEPRECATED] Upsert documents into the store. - - Args: - items: The documents to upsert. - - Returns: - The upsert response. - """ - vectors = await self.embedding.aembed_documents( - [item.page_content for item in items] - ) - ids = [] - for item, vector in zip(items, vectors): - doc_id = item.id or str(uuid.uuid4()) - ids.append(doc_id) - self.store[doc_id] = { - "id": doc_id, - "vector": vector, - "text": item.page_content, - "metadata": item.metadata, - } - return { - "succeeded": ids, - "failed": [], - } - @override async def aget_by_ids(self, ids: Sequence[str], /) -> list[Document]: """Async get documents by their ids. diff --git a/libs/core/tests/unit_tests/prompts/test_chat.py b/libs/core/tests/unit_tests/prompts/test_chat.py index 29e8e6fec3f..1b0926d8743 100644 --- a/libs/core/tests/unit_tests/prompts/test_chat.py +++ b/libs/core/tests/unit_tests/prompts/test_chat.py @@ -8,14 +8,10 @@ from packaging import version from pydantic import ValidationError from syrupy.assertion import SnapshotAssertion -from langchain_core._api.deprecation import ( - LangChainPendingDeprecationWarning, -) from langchain_core.load import dumpd, load from langchain_core.messages import ( AIMessage, BaseMessage, - ChatMessage, HumanMessage, SystemMessage, ToolMessage, @@ -191,7 +187,6 @@ def test_message_prompt_template_from_template_file() -> None: ) actual = ChatMessagePromptTemplate.from_template_file( Path(__file__).parent.parent / "data" / "prompt_file.txt", - ["question"], role="human", ) assert expected == actual @@ -459,32 +454,6 @@ def test_chat_valid_infer_variables() -> None: assert prompt.partial_variables == {"formatins": "some structure"} -async def test_chat_from_role_strings() -> None: - """Test instantiation of chat template from role strings.""" - with pytest.warns(LangChainPendingDeprecationWarning): - template = ChatPromptTemplate.from_role_strings( - [ - ("system", "You are a bot."), - ("assistant", "hello!"), - ("human", "{question}"), - ("other", "{quack}"), - ] - ) - - expected = [ - ChatMessage(content="You are a bot.", role="system"), - ChatMessage(content="hello!", role="assistant"), - ChatMessage(content="How are you?", role="human"), - ChatMessage(content="duck", role="other"), - ] - - messages = template.format_messages(question="How are you?", quack="duck") - assert messages == expected - - messages = await template.aformat_messages(question="How are you?", quack="duck") - assert messages == expected - - @pytest.mark.parametrize( ("args", "expected"), [ diff --git a/libs/core/tests/unit_tests/prompts/test_imports.py b/libs/core/tests/unit_tests/prompts/test_imports.py index be33b06338f..eac443094ab 100644 --- a/libs/core/tests/unit_tests/prompts/test_imports.py +++ b/libs/core/tests/unit_tests/prompts/test_imports.py @@ -14,7 +14,6 @@ EXPECTED_ALL = [ "aformat_document", "HumanMessagePromptTemplate", "MessagesPlaceholder", - "PipelinePromptTemplate", "PromptTemplate", "StringPromptTemplate", "SystemMessagePromptTemplate", diff --git a/libs/core/tests/unit_tests/prompts/test_pipeline_prompt.py b/libs/core/tests/unit_tests/prompts/test_pipeline_prompt.py deleted file mode 100644 index 2438c70d95a..00000000000 --- a/libs/core/tests/unit_tests/prompts/test_pipeline_prompt.py +++ /dev/null @@ -1,68 +0,0 @@ -import pytest - -from langchain_core.prompts.chat import ChatPromptTemplate, MessagesPlaceholder -from langchain_core.prompts.pipeline import PipelinePromptTemplate -from langchain_core.prompts.prompt import PromptTemplate - -# Suppress deprecation warnings for PipelinePromptTemplate since we're testing the -# deprecated functionality intentionally to ensure it still works correctly - - -@pytest.mark.filterwarnings( - "ignore:This class is deprecated" - ":langchain_core._api.deprecation.LangChainDeprecationWarning" -) -def test_get_input_variables() -> None: - prompt_a = PromptTemplate.from_template("{foo}") - prompt_b = PromptTemplate.from_template("{bar}") - pipeline_prompt = PipelinePromptTemplate( # type: ignore[call-arg] - final_prompt=prompt_b, pipeline_prompts=[("bar", prompt_a)] - ) - assert pipeline_prompt.input_variables == ["foo"] - - -@pytest.mark.filterwarnings( - "ignore:This class is deprecated" - ":langchain_core._api.deprecation.LangChainDeprecationWarning" -) -def test_simple_pipeline() -> None: - prompt_a = PromptTemplate.from_template("{foo}") - prompt_b = PromptTemplate.from_template("{bar}") - pipeline_prompt = PipelinePromptTemplate( # type: ignore[call-arg] - final_prompt=prompt_b, pipeline_prompts=[("bar", prompt_a)] - ) - output = pipeline_prompt.format(foo="jim") - assert output == "jim" - - -@pytest.mark.filterwarnings( - "ignore:This class is deprecated" - ":langchain_core._api.deprecation.LangChainDeprecationWarning" -) -def test_multi_variable_pipeline() -> None: - prompt_a = PromptTemplate.from_template("{foo}") - prompt_b = PromptTemplate.from_template("okay {bar} {baz}") - pipeline_prompt = PipelinePromptTemplate( # type: ignore[call-arg] - final_prompt=prompt_b, pipeline_prompts=[("bar", prompt_a)] - ) - output = pipeline_prompt.format(foo="jim", baz="deep") - assert output == "okay jim deep" - - -@pytest.mark.filterwarnings( - "ignore:This class is deprecated" - ":langchain_core._api.deprecation.LangChainDeprecationWarning" -) -async def test_partial_with_chat_prompts() -> None: - prompt_a = ChatPromptTemplate( - input_variables=["foo"], messages=[MessagesPlaceholder(variable_name="foo")] - ) - prompt_b = ChatPromptTemplate.from_template("jim {bar}") - pipeline_prompt = PipelinePromptTemplate( # type: ignore[call-arg] - final_prompt=prompt_a, pipeline_prompts=[("foo", prompt_b)] - ) - assert pipeline_prompt.input_variables == ["bar"] - output = pipeline_prompt.format_prompt(bar="okay") - assert output.to_messages()[0].content == "jim okay" - output = await pipeline_prompt.aformat_prompt(bar="okay") - assert output.to_messages()[0].content == "jim okay" diff --git a/libs/core/tests/unit_tests/runnables/test_history.py b/libs/core/tests/unit_tests/runnables/test_history.py index 249b4d6e45e..daba3e55749 100644 --- a/libs/core/tests/unit_tests/runnables/test_history.py +++ b/libs/core/tests/unit_tests/runnables/test_history.py @@ -32,10 +32,9 @@ from tests.unit_tests.pydantic_utils import _schema def test_interfaces() -> None: history = InMemoryChatMessageHistory() history.add_message(SystemMessage(content="system")) - history.add_user_message("human 1") - history.add_ai_message("ai") - history.add_message(HumanMessage(content="human 2")) - assert str(history) == "System: system\nHuman: human 1\nAI: ai\nHuman: human 2" + history.add_message(HumanMessage(content="human 1")) + history.add_message(AIMessage(content="ai")) + assert str(history) == "System: system\nHuman: human 1\nAI: ai" def _get_get_session_history( diff --git a/libs/core/tests/unit_tests/utils/test_imports.py b/libs/core/tests/unit_tests/utils/test_imports.py index d37e3c870e7..086832da349 100644 --- a/libs/core/tests/unit_tests/utils/test_imports.py +++ b/libs/core/tests/unit_tests/utils/test_imports.py @@ -16,7 +16,6 @@ EXPECTED_ALL = [ "print_text", "raise_for_status_with_text", "xor_args", - "try_load_from_hub", "image", "build_extra_kwargs", "get_from_dict_or_env", diff --git a/libs/langchain/langchain/agents/openai_functions_agent/agent_token_buffer_memory.py b/libs/langchain/langchain/agents/openai_functions_agent/agent_token_buffer_memory.py index 2dfca17c542..0f3cd2e5728 100644 --- a/libs/langchain/langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +++ b/libs/langchain/langchain/agents/openai_functions_agent/agent_token_buffer_memory.py @@ -84,7 +84,7 @@ class AgentTokenBufferMemory(BaseChatMemory): outputs: Outputs from the agent. """ input_str, output_str = self._get_input_output(inputs, outputs) - self.chat_memory.add_user_message(input_str) + self.chat_memory.add_messages(input_str) # type: ignore[arg-type] format_to_messages = ( format_to_tool_messages if self.format_as_tools @@ -93,7 +93,7 @@ class AgentTokenBufferMemory(BaseChatMemory): steps = format_to_messages(outputs[self.intermediate_steps_key]) for msg in steps: self.chat_memory.add_message(msg) - self.chat_memory.add_ai_message(output_str) + self.chat_memory.add_messages(output_str) # type: ignore[arg-type] # Prune buffer if it exceeds max token limit buffer = self.chat_memory.messages curr_buffer_length = self.llm.get_num_tokens_from_messages(buffer) diff --git a/libs/langchain/langchain/agents/openai_functions_agent/base.py b/libs/langchain/langchain/agents/openai_functions_agent/base.py index 998ed92c5d4..f1d2ff3e232 100644 --- a/libs/langchain/langchain/agents/openai_functions_agent/base.py +++ b/libs/langchain/langchain/agents/openai_functions_agent/base.py @@ -123,13 +123,13 @@ class OpenAIFunctionsAgent(BaseSingleActionAgent): prompt = self.prompt.format_prompt(**full_inputs) messages = prompt.to_messages() if with_functions: - predicted_message = self.llm.predict_messages( + predicted_message = self.llm.invoke( messages, functions=self.functions, callbacks=callbacks, ) else: - predicted_message = self.llm.predict_messages( + predicted_message = self.llm.invoke( messages, callbacks=callbacks, ) @@ -161,7 +161,7 @@ class OpenAIFunctionsAgent(BaseSingleActionAgent): full_inputs = dict(**selected_inputs, agent_scratchpad=agent_scratchpad) prompt = self.prompt.format_prompt(**full_inputs) messages = prompt.to_messages() - predicted_message = await self.llm.apredict_messages( + predicted_message = await self.llm.ainvoke( messages, functions=self.functions, callbacks=callbacks, diff --git a/libs/langchain/langchain/agents/openai_functions_multi_agent/base.py b/libs/langchain/langchain/agents/openai_functions_multi_agent/base.py index 03032dd13d8..0af5d2f4f81 100644 --- a/libs/langchain/langchain/agents/openai_functions_multi_agent/base.py +++ b/libs/langchain/langchain/agents/openai_functions_multi_agent/base.py @@ -225,7 +225,7 @@ class OpenAIMultiFunctionsAgent(BaseMultiActionAgent): full_inputs = dict(**selected_inputs, agent_scratchpad=agent_scratchpad) prompt = self.prompt.format_prompt(**full_inputs) messages = prompt.to_messages() - predicted_message = self.llm.predict_messages( + predicted_message = self.llm.invoke( messages, functions=self.functions, callbacks=callbacks, @@ -256,7 +256,7 @@ class OpenAIMultiFunctionsAgent(BaseMultiActionAgent): full_inputs = dict(**selected_inputs, agent_scratchpad=agent_scratchpad) prompt = self.prompt.format_prompt(**full_inputs) messages = prompt.to_messages() - predicted_message = await self.llm.apredict_messages( + predicted_message = await self.llm.ainvoke( messages, functions=self.functions, callbacks=callbacks, diff --git a/libs/langchain/langchain/callbacks/__init__.py b/libs/langchain/langchain/callbacks/__init__.py index 72355d3fe42..562007523c0 100644 --- a/libs/langchain/langchain/callbacks/__init__.py +++ b/libs/langchain/langchain/callbacks/__init__.py @@ -16,7 +16,6 @@ from langchain_core.callbacks import ( ) from langchain_core.tracers.context import ( collect_runs, - tracing_enabled, tracing_v2_enabled, ) from langchain_core.tracers.langchain import LangChainTracer @@ -133,7 +132,6 @@ __all__ = [ "WhyLabsCallbackHandler", "collect_runs", "get_openai_callback", - "tracing_enabled", "tracing_v2_enabled", "wandb_tracing_enabled", ] diff --git a/libs/langchain/langchain/callbacks/manager.py b/libs/langchain/langchain/callbacks/manager.py index 97fa12fad0e..1b37da5253a 100644 --- a/libs/langchain/langchain/callbacks/manager.py +++ b/libs/langchain/langchain/callbacks/manager.py @@ -28,7 +28,6 @@ from langchain_core.callbacks.manager import ( ) from langchain_core.tracers.context import ( collect_runs, - tracing_enabled, tracing_v2_enabled, ) from langchain_core.utils.env import env_var_is_set @@ -83,7 +82,6 @@ __all__ = [ "get_openai_callback", "handle_event", "trace_as_chain_group", - "tracing_enabled", "tracing_v2_enabled", "wandb_tracing_enabled", ] diff --git a/libs/langchain/langchain/callbacks/tracers/__init__.py b/libs/langchain/langchain/callbacks/tracers/__init__.py index 49c9be80f3a..7720db3e383 100644 --- a/libs/langchain/langchain/callbacks/tracers/__init__.py +++ b/libs/langchain/langchain/callbacks/tracers/__init__.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING, Any from langchain_core.tracers.langchain import LangChainTracer -from langchain_core.tracers.langchain_v1 import LangChainTracerV1 from langchain_core.tracers.stdout import ( ConsoleCallbackHandler, FunctionCallbackHandler, @@ -32,7 +31,6 @@ __all__ = [ "ConsoleCallbackHandler", "FunctionCallbackHandler", "LangChainTracer", - "LangChainTracerV1", "LoggingCallbackHandler", "WandbTracer", ] diff --git a/libs/langchain/langchain/callbacks/tracers/langchain_v1.py b/libs/langchain/langchain/callbacks/tracers/langchain_v1.py deleted file mode 100644 index a12b47401f7..00000000000 --- a/libs/langchain/langchain/callbacks/tracers/langchain_v1.py +++ /dev/null @@ -1,3 +0,0 @@ -from langchain_core.tracers.langchain_v1 import LangChainTracerV1 - -__all__ = ["LangChainTracerV1"] diff --git a/libs/langchain/langchain/prompts/__init__.py b/libs/langchain/langchain/prompts/__init__.py index 5c677c7fee8..e2e775d76fb 100644 --- a/libs/langchain/langchain/prompts/__init__.py +++ b/libs/langchain/langchain/prompts/__init__.py @@ -8,8 +8,7 @@ from multiple components. Prompt classes and functions make constructing .. code-block:: - BasePromptTemplate --> PipelinePromptTemplate - StringPromptTemplate --> PromptTemplate + BasePromptTemplate --> StringPromptTemplate --> PromptTemplate FewShotPromptTemplate FewShotPromptWithTemplates BaseChatPromptTemplate --> AutoGPTPrompt @@ -46,7 +45,6 @@ from langchain_core.prompts import ( FewShotPromptWithTemplates, HumanMessagePromptTemplate, MessagesPlaceholder, - PipelinePromptTemplate, PromptTemplate, StringPromptTemplate, SystemMessagePromptTemplate, @@ -92,7 +90,6 @@ __all__ = [ "MaxMarginalRelevanceExampleSelector", "MessagesPlaceholder", "NGramOverlapExampleSelector", - "PipelinePromptTemplate", "Prompt", "PromptTemplate", "SemanticSimilarityExampleSelector", diff --git a/libs/langchain/langchain/prompts/loading.py b/libs/langchain/langchain/prompts/loading.py index ecc52f68925..8848a8465c7 100644 --- a/libs/langchain/langchain/prompts/loading.py +++ b/libs/langchain/langchain/prompts/loading.py @@ -8,7 +8,6 @@ from langchain_core.prompts.loading import ( load_prompt, load_prompt_from_config, ) -from langchain_core.utils.loading import try_load_from_hub __all__ = [ "_load_examples", @@ -19,5 +18,4 @@ __all__ = [ "_load_template", "load_prompt", "load_prompt_from_config", - "try_load_from_hub", ] diff --git a/libs/langchain/langchain/prompts/pipeline.py b/libs/langchain/langchain/prompts/pipeline.py deleted file mode 100644 index 88e2cc79ab2..00000000000 --- a/libs/langchain/langchain/prompts/pipeline.py +++ /dev/null @@ -1,3 +0,0 @@ -from langchain_core.prompts.pipeline import PipelinePromptTemplate, _get_inputs - -__all__ = ["PipelinePromptTemplate", "_get_inputs"] diff --git a/libs/langchain/langchain/schema/callbacks/manager.py b/libs/langchain/langchain/schema/callbacks/manager.py index 221abe68c77..ced88121670 100644 --- a/libs/langchain/langchain/schema/callbacks/manager.py +++ b/libs/langchain/langchain/schema/callbacks/manager.py @@ -22,7 +22,6 @@ from langchain_core.callbacks.manager import ( from langchain_core.tracers.context import ( collect_runs, register_configure_hook, - tracing_enabled, tracing_v2_enabled, ) from langchain_core.utils.env import env_var_is_set @@ -50,6 +49,5 @@ __all__ = [ "handle_event", "register_configure_hook", "trace_as_chain_group", - "tracing_enabled", "tracing_v2_enabled", ] diff --git a/libs/langchain/langchain/schema/callbacks/tracers/langchain_v1.py b/libs/langchain/langchain/schema/callbacks/tracers/langchain_v1.py deleted file mode 100644 index c0668cd2efe..00000000000 --- a/libs/langchain/langchain/schema/callbacks/tracers/langchain_v1.py +++ /dev/null @@ -1,3 +0,0 @@ -from langchain_core.tracers.langchain_v1 import LangChainTracerV1, get_headers - -__all__ = ["LangChainTracerV1", "get_headers"] diff --git a/libs/langchain/langchain/utilities/loading.py b/libs/langchain/langchain/utilities/loading.py deleted file mode 100644 index a2337b6df41..00000000000 --- a/libs/langchain/langchain/utilities/loading.py +++ /dev/null @@ -1,4 +0,0 @@ -from langchain_core.utils.loading import try_load_from_hub - -# For backwards compatibility -__all__ = ["try_load_from_hub"] diff --git a/libs/langchain/langchain/utils/loading.py b/libs/langchain/langchain/utils/loading.py deleted file mode 100644 index b048d383eeb..00000000000 --- a/libs/langchain/langchain/utils/loading.py +++ /dev/null @@ -1,3 +0,0 @@ -from langchain_core.utils.loading import try_load_from_hub - -__all__ = ["try_load_from_hub"] diff --git a/libs/langchain/tests/unit_tests/callbacks/test_imports.py b/libs/langchain/tests/unit_tests/callbacks/test_imports.py index a7bd7d366d6..8f06a95ccea 100644 --- a/libs/langchain/tests/unit_tests/callbacks/test_imports.py +++ b/libs/langchain/tests/unit_tests/callbacks/test_imports.py @@ -25,7 +25,6 @@ EXPECTED_ALL = [ "WandbCallbackHandler", "WhyLabsCallbackHandler", "get_openai_callback", - "tracing_enabled", "tracing_v2_enabled", "collect_runs", "wandb_tracing_enabled", diff --git a/libs/langchain/tests/unit_tests/callbacks/test_manager.py b/libs/langchain/tests/unit_tests/callbacks/test_manager.py index 8ee369e81fd..e515eb61a10 100644 --- a/libs/langchain/tests/unit_tests/callbacks/test_manager.py +++ b/libs/langchain/tests/unit_tests/callbacks/test_manager.py @@ -18,7 +18,6 @@ EXPECTED_ALL = [ "CallbackManagerForChainGroup", "AsyncCallbackManager", "AsyncCallbackManagerForChainGroup", - "tracing_enabled", "tracing_v2_enabled", "collect_runs", "atrace_as_chain_group", diff --git a/libs/langchain/tests/unit_tests/prompts/test_imports.py b/libs/langchain/tests/unit_tests/prompts/test_imports.py index e32722ac2bd..dd83e913756 100644 --- a/libs/langchain/tests/unit_tests/prompts/test_imports.py +++ b/libs/langchain/tests/unit_tests/prompts/test_imports.py @@ -13,7 +13,6 @@ EXPECTED_ALL = [ "MaxMarginalRelevanceExampleSelector", "MessagesPlaceholder", "NGramOverlapExampleSelector", - "PipelinePromptTemplate", "Prompt", "PromptTemplate", "SemanticSimilarityExampleSelector", diff --git a/libs/langchain/tests/unit_tests/prompts/test_loading.py b/libs/langchain/tests/unit_tests/prompts/test_loading.py index 8a14876a843..538a47c7f77 100644 --- a/libs/langchain/tests/unit_tests/prompts/test_loading.py +++ b/libs/langchain/tests/unit_tests/prompts/test_loading.py @@ -9,7 +9,6 @@ EXPECTED_ALL = [ "_load_template", "load_prompt", "load_prompt_from_config", - "try_load_from_hub", ] diff --git a/libs/langchain/tests/unit_tests/prompts/test_pipeline.py b/libs/langchain/tests/unit_tests/prompts/test_pipeline.py deleted file mode 100644 index f261db67378..00000000000 --- a/libs/langchain/tests/unit_tests/prompts/test_pipeline.py +++ /dev/null @@ -1,7 +0,0 @@ -from langchain.prompts.pipeline import __all__ - -EXPECTED_ALL = ["PipelinePromptTemplate", "_get_inputs"] - - -def test_all_imports() -> None: - assert set(__all__) == set(EXPECTED_ALL) diff --git a/libs/langchain_v1/langchain/agents/react_agent.py b/libs/langchain_v1/langchain/agents/react_agent.py index a41a68c691f..cd1cc469c7e 100644 --- a/libs/langchain_v1/langchain/agents/react_agent.py +++ b/libs/langchain_v1/langchain/agents/react_agent.py @@ -523,7 +523,7 @@ class _AgentBuilder(Generic[StateT, ContextT, StructuredResponseT]): def _resolve_model(self, state: StateT, runtime: Runtime[ContextT]) -> LanguageModelLike: """Resolve the model to use, handling both static and dynamic models.""" if self._is_dynamic_model: - dynamic_model = self.model(state, runtime) # type: ignore[operator, arg-type] + dynamic_model = self.model(state, runtime) # type: ignore[operator] return self._apply_native_output_binding(dynamic_model) # type: ignore[arg-type] return self._static_model # type: ignore[return-value] @@ -536,7 +536,7 @@ class _AgentBuilder(Generic[StateT, ContextT, StructuredResponseT]): ) return await dynamic_model(state, runtime) if self._is_dynamic_model: - dynamic_model = self.model(state, runtime) # type: ignore[arg-type, assignment, operator] + dynamic_model = self.model(state, runtime) # type: ignore[assignment, operator] return self._apply_native_output_binding(dynamic_model) # type: ignore[arg-type] return self._static_model # type: ignore[return-value] diff --git a/libs/partners/openai/tests/integration_tests/llms/test_base.py b/libs/partners/openai/tests/integration_tests/llms/test_base.py index 30a7ae77178..c087d0a296b 100644 --- a/libs/partners/openai/tests/integration_tests/llms/test_base.py +++ b/libs/partners/openai/tests/integration_tests/llms/test_base.py @@ -212,7 +212,7 @@ def test_openai_streaming_callback() -> None: max_tokens=10, streaming=True, temperature=0, - callback_manager=callback_manager, + callbacks=callback_manager, verbose=True, ) llm.invoke("Write me a sentence with 100 words.") @@ -237,7 +237,7 @@ async def test_openai_async_streaming_callback() -> None: max_tokens=10, streaming=True, temperature=0, - callback_manager=callback_manager, + callbacks=callback_manager, verbose=True, ) result = await llm.agenerate(["Write me a sentence with 100 words."]) diff --git a/libs/standard-tests/langchain_tests/integration_tests/chat_models.py b/libs/standard-tests/langchain_tests/integration_tests/chat_models.py index f66ee192f28..6a120ec3685 100644 --- a/libs/standard-tests/langchain_tests/integration_tests/chat_models.py +++ b/libs/standard-tests/langchain_tests/integration_tests/chat_models.py @@ -3,14 +3,12 @@ from __future__ import annotations import base64 -import inspect import json from typing import Annotated, Any, Literal from unittest.mock import MagicMock import httpx import pytest -from langchain_core._api import warn_deprecated from langchain_core.callbacks import BaseCallbackHandler from langchain_core.language_models import BaseChatModel, GenericFakeChatModel from langchain_core.messages import ( @@ -1397,21 +1395,6 @@ class ChatModelIntegrationTests(ChatModelTests): pytest.skip("Test requires tool calling.") tool_choice_value = None if not self.has_tool_choice else "any" - # Emit warning if tool_choice_value property is overridden - if inspect.getattr_static( - self, "tool_choice_value" - ) is not inspect.getattr_static(ChatModelIntegrationTests, "tool_choice_value"): - warn_deprecated( - "0.3.15", - message=( - "`tool_choice_value` will be removed in version 0.3.20. If a " - "model supports `tool_choice`, it should accept `tool_choice='any' " - "and `tool_choice=`. If the model does not " - "support `tool_choice`, override the `supports_tool_choice` " - "property to return `False`." - ), - removal="0.3.20", - ) model_with_tools = model.bind_tools( [magic_function], tool_choice=tool_choice_value ) diff --git a/libs/standard-tests/langchain_tests/unit_tests/tools.py b/libs/standard-tests/langchain_tests/unit_tests/tools.py index 076f48cfbb5..5f0cd36bf15 100644 --- a/libs/standard-tests/langchain_tests/unit_tests/tools.py +++ b/libs/standard-tests/langchain_tests/unit_tests/tools.py @@ -84,7 +84,7 @@ class ToolsUnitTests(ToolsTests): env_params, tools_params, expected_attrs = self.init_from_env_params if env_params: with mock.patch.dict(os.environ, env_params): - tool = self.tool_constructor(**tools_params) + tool = self.tool_constructor(**tools_params) # type: ignore[operator] assert tool is not None for k, expected in expected_attrs.items(): actual = getattr(tool, k)