Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-langchain-anthropic for
openSUSE:Factory checked in at 2026-08-12 16:12:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langchain-anthropic (Old)
and /work/SRC/openSUSE:Factory/.python-langchain-anthropic.new.17972 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-langchain-anthropic"
Wed Aug 12 16:12:18 2026 rev:6 rq:1370781 version:1.5.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-langchain-anthropic/python-langchain-anthropic.changes
2026-08-09 21:41:50.483562202 +0200
+++
/work/SRC/openSUSE:Factory/.python-langchain-anthropic.new.17972/python-langchain-anthropic.changes
2026-08-12 16:13:27.960901189 +0200
@@ -1,0 +2,11 @@
+Wed Aug 12 05:23:10 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.5.5:
+ * Report reasoning tokens via output_token_details in usage metadata
+ * Raise a clearer error when Anthropic credentials are missing
+ * Fix source path handling for file renames in the Anthropic tools
+ middleware
+ * Refresh bundled model profile data
+- Require langchain-core >= 1.5.4
+
+-------------------------------------------------------------------
Old:
----
langchain_anthropic-1.5.4.tar.gz
New:
----
langchain_anthropic-1.5.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-langchain-anthropic.spec ++++++
--- /var/tmp/diff_new_pack.Y9IKqf/_old 2026-08-12 16:13:28.944942755 +0200
+++ /var/tmp/diff_new_pack.Y9IKqf/_new 2026-08-12 16:13:28.944942755 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-langchain-anthropic
-Version: 1.5.4
+Version: 1.5.5
Release: 0
Summary: Integration package connecting Claude (Anthropic) APIs and
LangChain
License: MIT
@@ -29,7 +29,7 @@
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-anthropic >= 0.120.0
-Requires: python-langchain-core >= 1.5.2
+Requires: python-langchain-core >= 1.5.4
Requires: python-pydantic >= 2.7.4
BuildArch: noarch
# SECTION test requirements
@@ -37,7 +37,7 @@
BuildRequires: %{python_module blockbuster}
BuildRequires: %{python_module defusedxml}
BuildRequires: %{python_module freezegun}
-BuildRequires: %{python_module langchain-core >= 1.5.2}
+BuildRequires: %{python_module langchain-core >= 1.5.4}
BuildRequires: %{python_module pydantic >= 2.7.4}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module pytest-mock}
++++++ langchain_anthropic-1.5.4.tar.gz -> langchain_anthropic-1.5.5.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_anthropic-1.5.4/PKG-INFO
new/langchain_anthropic-1.5.5/PKG-INFO
--- old/langchain_anthropic-1.5.4/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
+++ new/langchain_anthropic-1.5.5/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.4
+Metadata-Version: 2.5
Name: langchain-anthropic
-Version: 1.5.4
+Version: 1.5.5
Summary: Integration package connecting Claude (Anthropic) APIs and LangChain
Project-URL: Homepage,
https://docs.langchain.com/oss/python/integrations/providers/anthropic
Project-URL: Documentation,
https://reference.langchain.com/python/integrations/langchain_anthropic/
@@ -24,7 +24,7 @@
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <4.0.0,>=3.10.0
Requires-Dist: anthropic<1.0.0,>=0.120.0
-Requires-Dist: langchain-core<2.0.0,>=1.5.2
+Requires-Dist: langchain-core<2.0.0,>=1.5.4
Requires-Dist: pydantic<3.0.0,>=2.7.4
Description-Content-Type: text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/langchain_anthropic/_version.py
new/langchain_anthropic-1.5.5/langchain_anthropic/_version.py
--- old/langchain_anthropic-1.5.4/langchain_anthropic/_version.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_anthropic-1.5.5/langchain_anthropic/_version.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
"""Version information for `langchain-anthropic`."""
-__version__ = "1.5.4"
+__version__ = "1.5.5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/langchain_anthropic/chat_models.py
new/langchain_anthropic-1.5.5/langchain_anthropic/chat_models.py
--- old/langchain_anthropic-1.5.4/langchain_anthropic/chat_models.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_anthropic-1.5.5/langchain_anthropic/chat_models.py
2020-02-02 01:00:00.000000000 +0100
@@ -36,7 +36,11 @@
is_data_content_block,
)
from langchain_core.messages import content as types
-from langchain_core.messages.ai import InputTokenDetails, UsageMetadata
+from langchain_core.messages.ai import (
+ InputTokenDetails,
+ OutputTokenDetails,
+ UsageMetadata,
+)
from langchain_core.messages.tool import tool_call_chunk as
create_tool_call_chunk
from langchain_core.output_parsers import (
JsonOutputKeyToolsParser,
@@ -889,6 +893,20 @@
"""BadRequestError raised when input exceeds Anthropic's context limit."""
+def _raise_if_authentication_error(e: TypeError) -> None:
+ """Re-raise anthropic SDK's missing-credentials `TypeError` with
guidance."""
+ if "Could not resolve authentication method" in str(e):
+ msg = (
+ "Anthropic authentication failed: no API key or authorization "
+ "credentials were provided. Set the ANTHROPIC_API_KEY environment "
+ "variable, pass api_key=... to ChatAnthropic, or provide "
+ 'credentials via default_headers={"Authorization": ...}. If you '
+ "are routing through the LangSmith gateway, set LANGSMITH_GATEWAY "
+ "and LANGSMITH_GATEWAY_API_KEY."
+ )
+ raise TypeError(msg) from e
+
+
def _handle_anthropic_bad_request(e: anthropic.BadRequestError) -> None:
"""Handle Anthropic BadRequestError."""
if "prompt is too long" in e.message:
@@ -1593,14 +1611,22 @@
return {k: v for k, v in payload.items() if v is not None}
def _create(self, payload: dict) -> Any:
- if "betas" in payload:
- return self._client.beta.messages.create(**payload)
- return self._client.messages.create(**payload)
+ try:
+ if "betas" in payload:
+ return self._client.beta.messages.create(**payload)
+ return self._client.messages.create(**payload)
+ except TypeError as e:
+ _raise_if_authentication_error(e)
+ raise
async def _acreate(self, payload: dict) -> Any:
- if "betas" in payload:
- return await self._async_client.beta.messages.create(**payload)
- return await self._async_client.messages.create(**payload)
+ try:
+ if "betas" in payload:
+ return await self._async_client.beta.messages.create(**payload)
+ return await self._async_client.messages.create(**payload)
+ except TypeError as e:
+ _raise_if_authentication_error(e)
+ raise
def _stream(
self,
@@ -2696,7 +2722,18 @@
)
output_tokens = getattr(anthropic_usage, "output_tokens", 0) or 0
- return UsageMetadata(
+ # Reasoning (thinking) tokens are a decomposition of `output_tokens` (not
+ # additive), reported by Anthropic via
`output_tokens_details.thinking_tokens`.
+ # Older models omit `output_tokens_details` entirely, so guard with
`getattr`.
+ output_token_details: dict = {
+ "reasoning": getattr(
+ getattr(anthropic_usage, "output_tokens_details", None),
+ "thinking_tokens",
+ None,
+ ),
+ }
+
+ usage_metadata = UsageMetadata(
input_tokens=input_tokens,
output_tokens=output_tokens,
total_tokens=input_tokens + output_tokens,
@@ -2704,3 +2741,13 @@
**{k: v for k, v in input_token_details.items() if v is not None},
),
)
+
+ filtered_output_token_details = {
+ k: v for k, v in output_token_details.items() if v is not None
+ }
+ if filtered_output_token_details:
+ usage_metadata["output_token_details"] = OutputTokenDetails(
+ **filtered_output_token_details,
+ )
+
+ return usage_metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/langchain_anthropic/data/_profiles.py
new/langchain_anthropic-1.5.5/langchain_anthropic/data/_profiles.py
--- old/langchain_anthropic-1.5.4/langchain_anthropic/data/_profiles.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_anthropic-1.5.5/langchain_anthropic/data/_profiles.py
2020-02-02 01:00:00.000000000 +0100
@@ -95,57 +95,11 @@
"tool_call_streaming": True,
},
"claude-opus-4-1": {
- "name": "Claude Opus 4.1 (latest)",
- "status": "deprecated",
- "release_date": "2025-08-05",
- "last_updated": "2025-08-05",
- "open_weights": False,
- "max_input_tokens": 200000,
- "max_output_tokens": 32000,
- "text_inputs": True,
- "image_inputs": True,
- "audio_inputs": False,
- "pdf_inputs": True,
- "video_inputs": False,
- "text_outputs": True,
- "image_outputs": False,
- "audio_outputs": False,
- "video_outputs": False,
- "reasoning_output": True,
- "tool_calling": True,
- "structured_output": True,
- "attachment": True,
- "temperature": True,
"image_url_inputs": True,
- "pdf_tool_message": True,
- "image_tool_message": True,
- "tool_call_streaming": True,
- },
- "claude-opus-4-1-20250805": {
- "name": "Claude Opus 4.1",
- "status": "deprecated",
- "release_date": "2025-08-05",
- "last_updated": "2025-08-05",
- "open_weights": False,
- "max_input_tokens": 200000,
- "max_output_tokens": 32000,
- "text_inputs": True,
- "image_inputs": True,
- "audio_inputs": False,
"pdf_inputs": True,
- "video_inputs": False,
- "text_outputs": True,
- "image_outputs": False,
- "audio_outputs": False,
- "video_outputs": False,
- "reasoning_output": True,
- "tool_calling": True,
- "structured_output": False,
- "attachment": True,
- "temperature": True,
- "image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
+ "structured_output": True,
"tool_call_streaming": True,
},
"claude-opus-4-5": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/langchain_anthropic/middleware/anthropic_tools.py
new/langchain_anthropic-1.5.5/langchain_anthropic/middleware/anthropic_tools.py
---
old/langchain_anthropic-1.5.4/langchain_anthropic/middleware/anthropic_tools.py
2020-02-02 01:00:00.000000000 +0100
+++
new/langchain_anthropic-1.5.5/langchain_anthropic/middleware/anthropic_tools.py
2020-02-02 01:00:00.000000000 +0100
@@ -240,7 +240,9 @@
Command for state update or string result.
"""
# Build args dict for handler methods
- args: dict[str, Any] = {"path": path}
+ # `old_path` is populated for `_handle_rename`, which reads the
source
+ # path under that key instead of `path`.
+ args: dict[str, Any] = {"path": path, "old_path": path}
if file_text is not None:
args["file_text"] = file_text
if old_str is not None:
@@ -742,7 +744,9 @@
Command for message update or string result.
"""
# Build args dict for handler methods
- args: dict[str, Any] = {"path": path}
+ # `old_path` is populated for `_handle_rename`, which reads the
source
+ # path under that key instead of `path`.
+ args: dict[str, Any] = {"path": path, "old_path": path}
if file_text is not None:
args["file_text"] = file_text
if old_str is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_anthropic-1.5.4/pyproject.toml
new/langchain_anthropic-1.5.5/pyproject.toml
--- old/langchain_anthropic-1.5.4/pyproject.toml 2020-02-02
01:00:00.000000000 +0100
+++ new/langchain_anthropic-1.5.5/pyproject.toml 2020-02-02
01:00:00.000000000 +0100
@@ -20,11 +20,11 @@
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
-version = "1.5.4"
+version = "1.5.5"
requires-python = ">=3.10.0,<4.0.0"
dependencies = [
"anthropic>=0.120.0,<1.0.0",
- "langchain-core>=1.5.2,<2.0.0",
+ "langchain-core>=1.5.4,<2.0.0",
"pydantic>=2.7.4,<3.0.0",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/tests/unit_tests/middleware/test_anthropic_tools.py
new/langchain_anthropic-1.5.5/tests/unit_tests/middleware/test_anthropic_tools.py
---
old/langchain_anthropic-1.5.4/tests/unit_tests/middleware/test_anthropic_tools.py
2020-02-02 01:00:00.000000000 +0100
+++
new/langchain_anthropic-1.5.5/tests/unit_tests/middleware/test_anthropic_tools.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,13 +1,17 @@
"""Unit tests for Anthropic text editor and memory tool middleware."""
+import tempfile
+from pathlib import Path
from unittest.mock import MagicMock
import pytest
from langchain_core.messages import SystemMessage, ToolMessage
+from langgraph.prebuilt import ToolRuntime
from langgraph.types import Command
from langchain_anthropic.middleware.anthropic_tools import (
AnthropicToolsState,
+ FilesystemClaudeTextEditorMiddleware,
StateClaudeMemoryMiddleware,
StateClaudeTextEditorMiddleware,
_validate_path,
@@ -309,6 +313,85 @@
assert files.get("/memories/new.txt") is not None
assert files["/memories/new.txt"]["content"] == ["line1"]
+ def test_rename_via_tool_dispatch(self) -> None:
+ """End-to-end: renaming through the actual `file_tool` dispatch.
+
+ Regression test for the dispatch building `args` with the source path
+ under `"path"` while `_handle_rename` read `args["old_path"]`, which
+ raised `KeyError` on every rename command.
+ """
+ middleware = StateClaudeTextEditorMiddleware()
+ state: AnthropicToolsState = {
+ "messages": [],
+ "text_editor_files": {
+ "/notes/old.txt": {
+ "content": ["hello"],
+ "created_at": "2025-01-01T00:00:00",
+ "modified_at": "2025-01-01T00:00:00",
+ }
+ },
+ }
+ (file_tool,) = middleware.tools
+
+ result = file_tool.invoke(
+ {
+ "command": "rename",
+ "path": "/notes/old.txt",
+ "new_path": "/notes/new.txt",
+ "runtime": ToolRuntime(
+ context=None,
+ state=state,
+ config={},
+ stream_writer=lambda _: None,
+ tool_call_id="tc-1",
+ store=None,
+ ),
+ }
+ )
+
+ assert isinstance(result, Command)
+ assert result.update is not None
+ files = result.update["text_editor_files"]
+ assert files["/notes/old.txt"] is None
+ assert files["/notes/new.txt"]["content"] == ["hello"]
+ message = result.update["messages"][0]
+ assert isinstance(message, ToolMessage)
+ assert "renamed" in message.content
+
+
+class TestFilesystemRenameViaToolDispatch:
+ """End-to-end tests for filesystem-backed rename through `file_tool`."""
+
+ def test_rename_via_tool_dispatch(self) -> None:
+ """Regression test mirroring
`TestFileOperations.test_rename_via_tool_dispatch`
+ for the filesystem-backed middleware, which has its own dispatch
closure
+ and `_handle_rename` implementation.
+ """
+ with tempfile.TemporaryDirectory() as root:
+ (Path(root) / "old.txt").write_text("hello")
+ middleware = FilesystemClaudeTextEditorMiddleware(root_path=root)
+ (file_tool,) = middleware.tools
+
+ result = file_tool.invoke(
+ {
+ "command": "rename",
+ "path": "/old.txt",
+ "new_path": "/new.txt",
+ "runtime": ToolRuntime(
+ context=None,
+ state={},
+ config={},
+ stream_writer=lambda _: None,
+ tool_call_id="tc-2",
+ store=None,
+ ),
+ }
+ )
+
+ assert isinstance(result, Command)
+ assert not (Path(root) / "old.txt").exists()
+ assert (Path(root) / "new.txt").read_text() == "hello"
+
class TestSystemMessageHandling:
"""Test system message handling in wrap_model_call."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_anthropic-1.5.4/tests/unit_tests/test_chat_models.py
new/langchain_anthropic-1.5.5/tests/unit_tests/test_chat_models.py
--- old/langchain_anthropic-1.5.4/tests/unit_tests/test_chat_models.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_anthropic-1.5.5/tests/unit_tests/test_chat_models.py
2020-02-02 01:00:00.000000000 +0100
@@ -150,10 +150,6 @@
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929",
anthropic_api_key="test")
assert llm.max_tokens == 64000
- # Test claude-opus-4-1 models
- llm = ChatAnthropic(model="claude-opus-4-1-20250805",
anthropic_api_key="test")
- assert llm.max_tokens == 32000
-
# Test claude-haiku-4-5 models
llm = ChatAnthropic(model="claude-haiku-4-5-20251001",
anthropic_api_key="test")
assert llm.max_tokens == 64000
@@ -2081,6 +2077,42 @@
assert result["total_tokens"] == 0
+def test_usage_metadata_reasoning_tokens() -> None:
+ """Reasoning tokens should be surfaced via
`output_token_details.reasoning`.
+
+ Anthropic reports these through `output_tokens_details.thinking_tokens` as
a
+ decomposition of `output_tokens` (not additive).
+ """
+
+ class OutputTokensDetails(BaseModel):
+ thinking_tokens: int = 20
+
+ class UsageWithReasoning(BaseModel):
+ input_tokens: int = 100
+ output_tokens: int = 50
+ output_tokens_details: OutputTokensDetails | None =
OutputTokensDetails()
+
+ # Case 1: reasoning tokens present
+ result = _create_usage_metadata(UsageWithReasoning())
+ assert result["input_tokens"] == 100
+ assert result["output_tokens"] == 50
+ assert result["total_tokens"] == 150
+ assert result.get("output_token_details") == {"reasoning": 20}
+
+ # Case 2: output_tokens_details explicitly None
+ result =
_create_usage_metadata(UsageWithReasoning(output_tokens_details=None))
+ assert result["output_tokens"] == 50
+ assert "output_token_details" not in result
+
+ # Case 3: output_tokens_details field absent (older models)
+ class UsageNoDetails(BaseModel):
+ input_tokens: int = 100
+ output_tokens: int = 50
+
+ result = _create_usage_metadata(UsageNoDetails())
+ assert "output_token_details" not in result
+
+
def test_usage_metadata_cache_creation_ttl() -> None:
"""Test _create_usage_metadata with granular cache_creation TTL fields."""
@@ -4567,3 +4599,65 @@
llm = ChatAnthropic(model=MODEL_NAME)
assert llm.anthropic_api_url == "https://api.anthropic.com"
assert llm.anthropic_api_key.get_secret_value() == "provider-key"
+
+
+_MISSING_CREDENTIALS_TYPE_ERROR = TypeError(
+ "Could not resolve authentication method. Expected one of api_key, "
+ "auth_token, or credentials to be set. Or for one of the `X-Api-Key` or "
+ "`Authorization` headers to be explicitly omitted"
+)
+
+
+def _clear_auth_env(monkeypatch: pytest.MonkeyPatch) -> None:
+ monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False)
+ monkeypatch.delenv("LANGSMITH_GATEWAY", raising=False)
+ monkeypatch.delenv("LANGSMITH_GATEWAY_API_KEY", raising=False)
+ monkeypatch.delenv("ANTHROPIC_API_URL", raising=False)
+ monkeypatch.delenv("ANTHROPIC_BASE_URL", raising=False)
+
+
+def test_missing_credentials_error_sync(monkeypatch: pytest.MonkeyPatch) ->
None:
+ """Missing credentials raise a `TypeError` with LangChain guidance."""
+ _clear_auth_env(monkeypatch)
+ llm = ChatAnthropic(model=MODEL_NAME)
+
+ with ( # noqa: PT012
+ patch.object(llm._client.messages, "create") as mock_create,
+ pytest.raises(TypeError, match="ANTHROPIC_API_KEY") as exc_info,
+ ):
+ mock_create.side_effect = _MISSING_CREDENTIALS_TYPE_ERROR
+ llm.invoke([HumanMessage(content="test")])
+
+ assert exc_info.value.__cause__ is _MISSING_CREDENTIALS_TYPE_ERROR
+
+
+async def test_missing_credentials_error_async(
+ monkeypatch: pytest.MonkeyPatch,
+) -> None:
+ """Missing credentials raise a `TypeError` with LangChain guidance
(async)."""
+ _clear_auth_env(monkeypatch)
+ llm = ChatAnthropic(model=MODEL_NAME)
+
+ with ( # noqa: PT012
+ patch.object(llm._async_client.messages, "create") as mock_create,
+ pytest.raises(TypeError, match="ANTHROPIC_API_KEY") as exc_info,
+ ):
+ mock_create.side_effect = _MISSING_CREDENTIALS_TYPE_ERROR
+ await llm.ainvoke([HumanMessage(content="test")])
+
+ assert exc_info.value.__cause__ is _MISSING_CREDENTIALS_TYPE_ERROR
+
+
+def test_unrelated_type_error_propagates_unchanged() -> None:
+ """A `TypeError` not about authentication is re-raised as-is."""
+ llm = ChatAnthropic(model=MODEL_NAME)
+ unrelated_error = TypeError("some unrelated client error")
+
+ with ( # noqa: PT012
+ patch.object(llm._client.messages, "create") as mock_create,
+ pytest.raises(TypeError) as exc_info,
+ ):
+ mock_create.side_effect = unrelated_error
+ llm.invoke([HumanMessage(content="test")])
+
+ assert exc_info.value is unrelated_error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_anthropic-1.5.4/uv.lock
new/langchain_anthropic-1.5.5/uv.lock
--- old/langchain_anthropic-1.5.4/uv.lock 2020-02-02 01:00:00.000000000
+0100
+++ new/langchain_anthropic-1.5.5/uv.lock 2020-02-02 01:00:00.000000000
+0100
@@ -343,7 +343,7 @@
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url =
"https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz",
hash =
"sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size
= 29749, upload-time = "2025-05-10T17:42:51.123Z" }
wheels = [
@@ -552,7 +552,7 @@
[[package]]
name = "langchain"
-version = "1.3.14"
+version = "1.3.15"
source = { editable = "../../langchain_v1" }
dependencies = [
{ name = "langchain-core" },
@@ -581,7 +581,7 @@
{ name = "langchain-perplexity", marker = "extra == 'perplexity'" },
{ name = "langchain-together", marker = "extra == 'together'" },
{ name = "langchain-xai", marker = "extra == 'xai'" },
- { name = "langgraph", specifier = ">=1.2.5,<1.3.0" },
+ { name = "langgraph", specifier = ">=1.2.11,<1.3.0" },
{ name = "pydantic", specifier = ">=2.7.4,<3.0.0" },
]
provides-extras = ["community", "anthropic", "openai", "azure-ai",
"google-vertexai", "google-genai", "fireworks", "ollama", "together",
"mistralai", "huggingface", "groq", "aws", "baseten", "deepseek", "xai",
"perplexity", "meta"]
@@ -617,7 +617,7 @@
[[package]]
name = "langchain-anthropic"
-version = "1.5.4"
+version = "1.5.5"
source = { editable = "." }
dependencies = [
{ name = "anthropic" },
@@ -690,7 +690,7 @@
[[package]]
name = "langchain-core"
-version = "1.5.3"
+version = "1.5.4"
source = { editable = "../../core" }
dependencies = [
{ name = "jsonpatch" },
@@ -808,7 +808,7 @@
[[package]]
name = "langgraph"
-version = "1.2.5"
+version = "1.2.11"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "langchain-core" },
@@ -818,9 +818,9 @@
{ name = "pydantic" },
{ name = "xxhash" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/77/9d/7c9ebd17b95569122e2d2e641f535cf086c870d66bb8e59be33cdba856b3/langgraph-1.2.5.tar.gz",
hash =
"sha256:09a3bdec6fdb3228623fc78b6f69a1400d383f66348d0b04d0efb692022cc6ef", size
= 712532, upload-time = "2026-06-12T20:30:58.498Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/56/0d/c8e7ee98896659e1b6555db0ab115a9ca899844744645d5d894032bab1d7/langgraph-1.2.11.tar.gz",
hash =
"sha256:9ecfe11e50d338b34b15cf4d8a442642de103e8ae6971320efba84e4542eb363", size
= 725753, upload-time = "2026-08-11T14:00:36.945Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/a2/03/187281cf61845c5a9c397ae6cd9cd73bb54b39435e5575a7b83c853e5b76/langgraph-1.2.5-py3-none-any.whl",
hash =
"sha256:9286bb5def82fc865959c14378fe473518dc097d586225f622f029637a2a4bb9", size
= 246150, upload-time = "2026-06-12T20:30:57.018Z" },
+ { url =
"https://files.pythonhosted.org/packages/0a/7f/c5c30e4be99ff821029c7ac872a480676bb179c9f3df85ea3f38d13f86d4/langgraph-1.2.11-py3-none-any.whl",
hash =
"sha256:8bab70de7b2d00b5300fb289bcf38d8b241400f3184c1e95e8ce706fb0e8686b", size
= 248854, upload-time = "2026-08-11T14:00:35.494Z" },
]
[[package]]