Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-langchain-openai for
openSUSE:Factory checked in at 2026-07-09 22:20:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langchain-openai (Old)
and /work/SRC/openSUSE:Factory/.python-langchain-openai.new.1991 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-langchain-openai"
Thu Jul 9 22:20:28 2026 rev:2 rq:1364715 version:1.3.4
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-langchain-openai/python-langchain-openai.changes
2026-07-01 16:35:43.019138393 +0200
+++
/work/SRC/openSUSE:Factory/.python-langchain-openai.new.1991/python-langchain-openai.changes
2026-07-09 22:21:24.006254837 +0200
@@ -1,0 +2,10 @@
+Thu Jul 9 12:18:44 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.3.4:
+ * Suppress spurious pydantic serialization warnings when
+ dumping OpenAI responses (chat models and Azure)
+ * Use asyncio.get_running_loop() instead of the deprecated
+ get_event_loop() in the async client helpers
+- Raise langchain-core requirement to >= 1.4.8
+
+-------------------------------------------------------------------
Old:
----
langchain_openai-1.3.3.tar.gz
New:
----
langchain_openai-1.3.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-langchain-openai.spec ++++++
--- /var/tmp/diff_new_pack.aawvmg/_old 2026-07-09 22:21:24.886284897 +0200
+++ /var/tmp/diff_new_pack.aawvmg/_new 2026-07-09 22:21:24.890285035 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-langchain-openai
#
-# Copyright (c) 2026 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-langchain-openai
-Version: 1.3.3
+Version: 1.3.4
Release: 0
Summary: An integration package connecting OpenAI and LangChain
License: MIT
@@ -27,13 +27,13 @@
BuildRequires: %{python_module pip}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Requires: python-langchain-core >= 1.4.7
+Requires: python-langchain-core >= 1.4.8
Requires: python-openai >= 2.26.0
Requires: python-tiktoken >= 0.7.0
BuildArch: noarch
# SECTION test requirements
BuildRequires: %{python_module httpx}
-BuildRequires: %{python_module langchain-core >= 1.4.7}
+BuildRequires: %{python_module langchain-core >= 1.4.8}
BuildRequires: %{python_module openai >= 2.26.0}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module tiktoken >= 0.7.0}
++++++ langchain_openai-1.3.3.tar.gz -> langchain_openai-1.3.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_openai-1.3.3/PKG-INFO
new/langchain_openai-1.3.4/PKG-INFO
--- old/langchain_openai-1.3.3/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: langchain-openai
-Version: 1.3.3
+Version: 1.3.4
Summary: An integration package connecting OpenAI and LangChain
Project-URL: Homepage,
https://docs.langchain.com/oss/python/integrations/providers/openai
Project-URL: Documentation,
https://reference.langchain.com/python/integrations/langchain_openai/
@@ -23,7 +23,7 @@
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <4.0.0,>=3.10.0
-Requires-Dist: langchain-core<2.0.0,>=1.4.7
+Requires-Dist: langchain-core<2.0.0,>=1.4.9
Requires-Dist: openai<3.0.0,>=2.26.0
Requires-Dist: tiktoken<1.0.0,>=0.7.0
Description-Content-Type: text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_openai-1.3.3/langchain_openai/_version.py
new/langchain_openai-1.3.4/langchain_openai/_version.py
--- old/langchain_openai-1.3.3/langchain_openai/_version.py 2020-02-02
01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/langchain_openai/_version.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
"""Version information for `langchain-openai`."""
-__version__ = "1.3.3"
+__version__ = "1.3.4"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/langchain_openai/chat_models/_client_utils.py
new/langchain_openai-1.3.4/langchain_openai/chat_models/_client_utils.py
--- old/langchain_openai-1.3.3/langchain_openai/chat_models/_client_utils.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/langchain_openai/chat_models/_client_utils.py
2020-02-02 01:00:00.000000000 +0100
@@ -550,7 +550,7 @@
sync_api_key_value = cast(Callable, api_key)
async def async_api_key_wrapper() -> str:
- return await asyncio.get_event_loop().run_in_executor(
+ return await asyncio.get_running_loop().run_in_executor(
None, cast(Callable, api_key)
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/langchain_openai/chat_models/azure.py
new/langchain_openai-1.3.4/langchain_openai/chat_models/azure.py
--- old/langchain_openai-1.3.3/langchain_openai/chat_models/azure.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/langchain_openai/chat_models/azure.py
2020-02-02 01:00:00.000000000 +0100
@@ -771,7 +771,8 @@
chat_result = super()._create_chat_result(response, generation_info)
if not isinstance(response, dict):
- response = response.model_dump()
+ # warnings=False due to
https://github.com/openai/openai-python/issues/2872
+ response = response.model_dump(warnings=False)
for res in response["choices"]:
if res.get("finish_reason", None) == "content_filter":
msg = (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/langchain_openai/chat_models/base.py
new/langchain_openai-1.3.4/langchain_openai/chat_models/base.py
--- old/langchain_openai-1.3.3/langchain_openai/chat_models/base.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/langchain_openai/chat_models/base.py
2020-02-02 01:00:00.000000000 +0100
@@ -1761,7 +1761,8 @@
# `parsed` may hold arbitrary Pydantic models from structured
output.
# Exclude it from this dump and copy it from the typed response
below.
else response.model_dump(
- exclude={"choices": {"__all__": {"message": {"parsed"}}}}
+ exclude={"choices": {"__all__": {"message": {"parsed"}}}},
+ warnings=False,
)
)
# Sometimes the AI Model calling will get error, we should raise it
(this is
@@ -4669,7 +4670,10 @@
response_metadata = {
k: v
- for k, v in response.model_dump(exclude_none=True, mode="json").items()
+ # warnings=False due to
https://github.com/openai/openai-python/issues/2872
+ for k, v in response.model_dump(
+ exclude_none=True, mode="json", warnings=False
+ ).items()
if k
in (
"created_at",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_openai-1.3.3/pyproject.toml
new/langchain_openai-1.3.4/pyproject.toml
--- old/langchain_openai-1.3.3/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/langchain_openai-1.3.4/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -20,10 +20,10 @@
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
-version = "1.3.3"
+version = "1.3.4"
requires-python = ">=3.10.0,<4.0.0"
dependencies = [
- "langchain-core>=1.4.7,<2.0.0",
+ "langchain-core>=1.4.9,<2.0.0",
"openai>=2.26.0,<3.0.0",
"tiktoken>=0.7.0,<1.0.0",
]
@@ -56,7 +56,7 @@
"langchain>=1.0.0,<2.0.0",
"langchain-tests>=1.1.9,<2.0.0",
]
-lint = ["ruff>=0.13.1,<0.14.0"]
+lint = ["ruff>=0.13.1,<0.16.0"]
dev = []
test_integration = [
"httpx>=0.27.0,<1.0.0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/tests/integration_tests/chat_models/conftest.py
new/langchain_openai-1.3.4/tests/integration_tests/chat_models/conftest.py
--- old/langchain_openai-1.3.3/tests/integration_tests/chat_models/conftest.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/tests/integration_tests/chat_models/conftest.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
-"""Shared fixtures for chat-model integration tests.
+"""Shared fixtures and collection hooks for chat-model integration tests.
The `_ChatOpenAICodex` integration tests run under VCR cassette playback in
CI (`make test_vcr`), but its `_FileChatGPTOAuthTokenProvider` still tries
@@ -17,6 +17,7 @@
import os
from datetime import datetime, timedelta, timezone
+from pathlib import Path
from typing import Any
import pytest
@@ -62,15 +63,33 @@
return None
[email protected](autouse=True)
-def _skip_codex_live_ci(request: pytest.FixtureRequest) -> None:
- """Skip Codex tests in CI unless they are replaying VCR cassettes."""
- if "codex" not in request.module.__name__:
- return
- if _vcr_record_mode(request.config) == "none":
+def pytest_collection_modifyitems(
+ config: pytest.Config, items: list[pytest.Item]
+) -> None:
+ """Skip Codex tests in CI unless they are replaying VCR cassettes.
+
+ Applied at collection time so Codex tests are deselected before
+ pytest-recording opens a cassette. An autouse skip fixture would instead
+ fire during test setup, after the `vcr` fixture has already tried (and
+ failed) to open the cassette against CI's missing on-disk token.
+
+ `pytest_collection_modifyitems` hooks receive the whole session's items, so
+ matches are scoped to this conftest's own directory. Otherwise a same-named
+ module collected elsewhere in the session (e.g. the unit `test_codex`
+ module) would be skipped too.
+ """
+ if not os.getenv("CI") or _vcr_record_mode(config) == "none":
return
- if os.getenv("CI"):
- pytest.skip("Codex tests require VCR playback in CI.")
+ here = Path(__file__).parent
+ skip_codex = pytest.mark.skip(reason="Codex tests require VCR playback in
CI.")
+ for item in items:
+ item_path = getattr(item, "path", None)
+ if item_path is None or here not in Path(str(item_path)).parents:
+ continue
+ module = getattr(item, "module", None)
+ module_name = getattr(module, "__name__", "")
+ if "codex" in module_name:
+ item.add_marker(skip_codex)
@pytest.fixture(autouse=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/tests/integration_tests/chat_models/test_base.py
new/langchain_openai-1.3.4/tests/integration_tests/chat_models/test_base.py
--- old/langchain_openai-1.3.3/tests/integration_tests/chat_models/test_base.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/tests/integration_tests/chat_models/test_base.py
2020-02-02 01:00:00.000000000 +0100
@@ -111,8 +111,10 @@
assert isinstance(async_response, AIMessage)
assert calls["async"] == 1
- with pytest.raises(ValueError):
- # We do not create a sync callable from an async one
+ with pytest.raises(ValueError, match="Sync client is not available"):
+ # This intentionally records a failed ChatOpenAI run in scheduled
LangSmith
+ # traces: async API-key callables are valid for async methods, but sync
+ # invocation must fail.
_ = model.invoke("hello")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/tests/unit_tests/chat_models/test_azure.py
new/langchain_openai-1.3.4/tests/unit_tests/chat_models/test_azure.py
--- old/langchain_openai-1.3.3/tests/unit_tests/chat_models/test_azure.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/tests/unit_tests/chat_models/test_azure.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,11 +1,13 @@
"""Test Azure OpenAI Chat API wrapper."""
import os
+import warnings
from unittest import mock
+import openai
import pytest
from langchain_core.messages import HumanMessage
-from pydantic import SecretStr
+from pydantic import BaseModel, SecretStr
from typing_extensions import TypedDict
from langchain_openai import AzureChatOpenAI
@@ -282,3 +284,59 @@
versions = llm.metadata["lc_versions"]
assert "langchain-core" in versions
assert "langchain-openai" in versions
+
+
+def test_create_chat_result_avoids_parsed_model_dump_warning() -> None:
+ """Azure structured output must not emit a serializer warning.
+
+ `AzureChatOpenAI._create_chat_result` re-dumps the response to read
content-filter
+ metadata; with structured output the SDK's `parsed` field holds a model
that
+ doesn't match its declared type (openai/openai-python#2872).
+ """
+ from openai.lib._parsing._completions import parse_chat_completion
+ from openai.types.chat import ChatCompletion
+ from openai.types.chat.chat_completion import Choice
+ from openai.types.chat.chat_completion_message import ChatCompletionMessage
+
+ class ModelOutput(BaseModel):
+ output: str
+
+ raw_response = ChatCompletion(
+ id="chatcmpl-1",
+ object="chat.completion",
+ created=0,
+ model="gpt-4o-mini",
+ choices=[
+ Choice(
+ index=0,
+ finish_reason="stop",
+ message=ChatCompletionMessage(
+ role="assistant", content='{"output": "Paris"}'
+ ),
+ )
+ ],
+ )
+ parsed_response = parse_chat_completion(
+ response_format=ModelOutput,
+ input_tools=openai.omit,
+ chat_completion=raw_response,
+ )
+
+ llm = AzureChatOpenAI( # type: ignore[call-arg]
+ azure_deployment="35-turbo-dev",
+ openai_api_version="2023-05-15",
+ azure_endpoint="my-base-url",
+ api_key=SecretStr("test"),
+ )
+ with warnings.catch_warnings(record=True) as caught_warnings:
+ warnings.simplefilter("always")
+ result = llm._create_chat_result(parsed_response)
+
+ warning_messages = [str(warning.message) for warning in caught_warnings]
+ assert not any(
+ "PydanticSerializationUnexpectedValue" in message
+ for message in warning_messages
+ )
+ assert result.generations[0].message.additional_kwargs["parsed"] ==
ModelOutput(
+ output="Paris"
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langchain_openai-1.3.3/tests/unit_tests/chat_models/test_base.py
new/langchain_openai-1.3.4/tests/unit_tests/chat_models/test_base.py
--- old/langchain_openai-1.3.3/tests/unit_tests/chat_models/test_base.py
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/tests/unit_tests/chat_models/test_base.py
2020-02-02 01:00:00.000000000 +0100
@@ -36,6 +36,7 @@
from langchain_core.runnables.base import RunnableBinding, RunnableSequence
from langchain_core.tracers.base import BaseTracer
from langchain_core.tracers.schemas import Run
+from langchain_core.utils.pydantic import PYDANTIC_VERSION
from openai.types.responses import (
ResponseApplyPatchToolCall,
ResponseApplyPatchToolCallOutput,
@@ -1702,36 +1703,39 @@
def test_create_chat_result_avoids_parsed_model_dump_warning() -> None:
+ """Chat Completions structured output must not emit a serializer warning.
+
+ Built via the SDK's own `parse_chat_completion` (the path
+ `client.beta.chat.completions.parse(...)` uses) so the test exercises the
real
+ `ParsedChatCompletion` typing (openai/openai-python#2872).
+ """
+ from openai.lib._parsing._completions import parse_chat_completion
+ from openai.types.chat import ChatCompletion
+ from openai.types.chat.chat_completion import Choice
+ from openai.types.chat.chat_completion_message import ChatCompletionMessage
+
class ModelOutput(BaseModel):
output: str
- class MockParsedMessage(openai.BaseModel):
- role: Literal["assistant"] = "assistant"
- content: str = '{"output": "Paris"}'
- parsed: None = None
- refusal: str | None = None
-
- class MockChoice(openai.BaseModel):
- index: int = 0
- finish_reason: Literal["stop"] = "stop"
- message: MockParsedMessage
-
- class MockChatCompletion(openai.BaseModel):
- id: str = "chatcmpl-1"
- object: str = "chat.completion"
- created: int = 0
- model: str = OPENAI_TEST_MODEL
- choices: list[MockChoice]
- usage: dict[str, int] | None = None
-
- parsed_response = ModelOutput(output="Paris")
- response = MockChatCompletion.model_construct(
+ raw_response = ChatCompletion(
+ id="chatcmpl-1",
+ object="chat.completion",
+ created=0,
+ model=OPENAI_TEST_MODEL,
choices=[
- MockChoice.model_construct(
-
message=MockParsedMessage.model_construct(parsed=parsed_response)
+ Choice(
+ index=0,
+ finish_reason="stop",
+ message=ChatCompletionMessage(
+ role="assistant", content='{"output": "Paris"}'
+ ),
)
],
- usage={"prompt_tokens": 1, "completion_tokens": 1, "total_tokens": 2},
+ )
+ response = parse_chat_completion(
+ response_format=ModelOutput,
+ input_tools=openai.omit,
+ chat_completion=raw_response,
)
llm = ChatOpenAI(model=OPENAI_TEST_MODEL)
@@ -1740,8 +1744,82 @@
result = llm._create_chat_result(response)
warning_messages = [str(warning.message) for warning in caught_warnings]
- assert not any("field_name='parsed'" in message for message in
warning_messages)
- assert result.generations[0].message.additional_kwargs["parsed"] ==
parsed_response
+ assert not any(
+ "PydanticSerializationUnexpectedValue" in message
+ for message in warning_messages
+ )
+ assert result.generations[0].message.additional_kwargs["parsed"] ==
ModelOutput(
+ output="Paris"
+ )
+
+
[email protected](
+ (PYDANTIC_VERSION.major, PYDANTIC_VERSION.minor) < (2, 8),
+ reason=(
+ "Serializing the generic `ParsedResponse` raises a `MockValSer`
TypeError on "
+ "pydantic<2.8, independent of the warning under test."
+ ),
+)
+def test__construct_lc_result_from_responses_api_avoids_parsed_dump_warning()
-> None:
+ """Responses API structured output must not emit serializer warnings.
+
+ With `use_responses_api=True` and structured output, the SDK returns a
+ `ParsedResponse` whose output items don't match their declared field/union
types.
+ Dumping it for response metadata previously emitted a spurious
+ `PydanticSerializationUnexpectedValue` warning (openai/openai-python#2872).
+ """
+ from openai.lib._parsing._responses import parse_response
+
+ class DocumentScoreResult(BaseModel):
+ reasoning: str
+ relevance_score: int
+
+ # Build the object the way `client.responses.parse(text_format=...)` does,
so the
+ # test exercises the real `ParsedResponse` typing rather than a
hand-rolled mock.
+ raw_response = Response(
+ id="resp_123",
+ created_at=1234567890,
+ model=OPENAI_TEST_MODEL,
+ object="response",
+ parallel_tool_calls=True,
+ tools=[],
+ tool_choice="auto",
+ output=[
+ ResponseOutputMessage(
+ type="message",
+ id="msg_123",
+ status="completed",
+ role="assistant",
+ content=[
+ ResponseOutputText(
+ type="output_text",
+ text='{"reasoning": "relevant", "relevance_score": 1}',
+ annotations=[],
+ )
+ ],
+ )
+ ],
+ )
+ parsed_response = parse_response(
+ text_format=DocumentScoreResult,
+ input_tools=openai.omit,
+ response=raw_response,
+ )
+
+ with warnings.catch_warnings(record=True) as caught_warnings:
+ warnings.simplefilter("always")
+ result = _construct_lc_result_from_responses_api(
+ parsed_response, schema=DocumentScoreResult
+ )
+
+ warning_messages = [str(warning.message) for warning in caught_warnings]
+ assert not any(
+ "PydanticSerializationUnexpectedValue" in message
+ for message in warning_messages
+ )
+ assert result.generations[0].message.additional_kwargs[
+ "parsed"
+ ] == DocumentScoreResult(reasoning="relevant", relevance_score=1)
def test_structured_outputs_parser_valid_falsy_response() -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langchain_openai-1.3.3/uv.lock
new/langchain_openai-1.3.4/uv.lock
--- old/langchain_openai-1.3.3/uv.lock 2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.3.4/uv.lock 2020-02-02 01:00:00.000000000 +0100
@@ -601,7 +601,7 @@
[[package]]
name = "langchain"
-version = "1.3.10"
+version = "1.3.12"
source = { editable = "../../langchain_v1" }
dependencies = [
{ name = "langchain-core" },
@@ -665,7 +665,7 @@
[[package]]
name = "langchain-core"
-version = "1.4.8"
+version = "1.4.9"
source = { editable = "../../core" }
dependencies = [
{ name = "jsonpatch" },
@@ -727,7 +727,7 @@
[[package]]
name = "langchain-openai"
-version = "1.3.3"
+version = "1.3.4"
source = { editable = "." }
dependencies = [
{ name = "langchain-core" },
@@ -776,7 +776,7 @@
[package.metadata.requires-dev]
dev = []
-lint = [{ name = "ruff", specifier = ">=0.13.1,<0.14.0" }]
+lint = [{ name = "ruff", specifier = ">=0.13.1,<0.16.0" }]
test = [
{ name = "freezegun", specifier = ">=1.2.2,<2.0.0" },
{ name = "langchain", editable = "../../langchain_v1" },
@@ -880,15 +880,15 @@
[[package]]
name = "langgraph-checkpoint"
-version = "4.1.0"
+version = "4.1.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "langchain-core" },
{ name = "ormsgpack" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/02/b4/6005c5dd88ad484fe6235d4c43a0d2cee7e91b08ad85a180985c2662df87/langgraph_checkpoint-4.1.0.tar.gz",
hash =
"sha256:e5bb304e30fc1363ac8fcb5f7dee5ca2185d77fe475b0d01de2c5f91324c2c21", size
= 181942, upload-time = "2026-05-12T03:33:49.888Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/83/47/886af6f886f0bff2273164a45f008694e48a96ff3cd25ff0228f2aa9480e/langgraph_checkpoint-4.1.1.tar.gz",
hash =
"sha256:6c2bdb530c91f91d7d9c1bd100925d0fc4f498d418c17f3587d1526279482a25", size
= 184020, upload-time = "2026-05-22T16:57:38.503Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/93/74/d3be2b41955e20ccd624dba5f6fe9d38dcee385ba470a6e13ed86732fc86/langgraph_checkpoint-4.1.0-py3-none-any.whl",
hash =
"sha256:8bc2a0466a20c38b865ce6671b42093fd5c041133f32351cae4222e0eeaf7fb5", size
= 56047, upload-time = "2026-05-12T03:33:48.548Z" },
+ { url =
"https://files.pythonhosted.org/packages/bd/b4/71425e3e38be92611300b9cc5e46a5bf98ab23f5ea8a75b73d02a2f1413c/langgraph_checkpoint-4.1.1-py3-none-any.whl",
hash =
"sha256:25d29144b082827218e7bc3f1e9b0566a4bb007895cd6cc26f66a8428739f56e", size
= 56212, upload-time = "2026-05-22T16:57:37.203Z" },
]
[[package]]