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-08-14 22:06:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langchain-openai (Old)
 and      /work/SRC/openSUSE:Factory/.python-langchain-openai.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-langchain-openai"

Fri Aug 14 22:06:56 2026 rev:8 rq:1371166 version:1.5.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-langchain-openai/python-langchain-openai.changes
  2026-08-11 17:16:09.243550127 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-langchain-openai.new.1258/python-langchain-openai.changes
        2026-08-14 22:07:18.750729026 +0200
@@ -1,0 +2,18 @@
+Fri Aug 14 07:30:32 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.5.0:
+  * Support the openai 3.0 SDK: a new internal compatibility module
+    resolves the httpx library the installed SDK is built on (httpx2
+    on openai 3.x, httpx on 2.x), so the transport, connection-limit
+    and proxy objects handed to the client always come from the same
+    library as the client itself; the accepted openai range widens
+    to < 4.0.0 accordingly
+  * Report a clearer import error when the httpx used by the OpenAI
+    SDK is unavailable while configuring an embeddings proxy
+- Declare the certifi dependency (>= 2024.6.2) that upstream now
+  requires explicitly; it was already imported to build the default
+  SSL context
+- Follow upstream and raise the langchain-core requirement floor to
+  1.5.4
+
+-------------------------------------------------------------------

Old:
----
  langchain_openai-1.4.3.tar.gz

New:
----
  langchain_openai-1.5.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-langchain-openai.spec ++++++
--- /var/tmp/diff_new_pack.cXI5O3/_old  2026-08-14 22:07:19.493756079 +0200
+++ /var/tmp/diff_new_pack.cXI5O3/_new  2026-08-14 22:07:19.494756116 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-langchain-openai
-Version:        1.4.3
+Version:        1.5.0
 Release:        0
 Summary:        An integration package connecting OpenAI and LangChain
 License:        MIT
@@ -27,13 +27,15 @@
 BuildRequires:  %{python_module pip}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-langchain-core >= 1.5.3
+Requires:       python-certifi >= 2024.6.2
+Requires:       python-langchain-core >= 1.5.4
 Requires:       python-openai >= 2.45.0
 Requires:       python-tiktoken >= 0.7.0
 BuildArch:      noarch
 # SECTION test requirements
+BuildRequires:  %{python_module certifi >= 2024.6.2}
 BuildRequires:  %{python_module httpx}
-BuildRequires:  %{python_module langchain-core >= 1.5.3}
+BuildRequires:  %{python_module langchain-core >= 1.5.4}
 BuildRequires:  %{python_module openai >= 2.45.0}
 BuildRequires:  %{python_module pytest-asyncio}
 BuildRequires:  %{python_module tiktoken >= 0.7.0}

++++++ langchain_openai-1.4.3.tar.gz -> langchain_openai-1.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langchain_openai-1.4.3/Makefile 
new/langchain_openai-1.5.0/Makefile
--- old/langchain_openai-1.4.3/Makefile 2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/Makefile 2020-02-02 01:00:00.000000000 +0100
@@ -10,6 +10,10 @@
 TEST_FILE ?= tests/unit_tests/
 PYTEST_EXTRA ?=
 
+# A single canonical live request, reused to smoke both supported openai
+# majors in `integration_test` (see below).
+SDK_SMOKE_TEST = 
tests/integration_tests/chat_models/test_responses_standard.py::TestOpenAIResponses::test_invoke
+
 integration_test integration_tests: TEST_FILE=tests/integration_tests/
 
 # unit tests are run with the --disable-socket flag to prevent network calls
@@ -24,7 +28,13 @@
        fi
        TIKTOKEN_CACHE_DIR=tiktoken_cache uv run --group test pytest 
$(PYTEST_EXTRA) --disable-socket --allow-unix-socket $(TEST_FILE)
 
+# Runs the full integration suite against the locked SDK, then smokes a single
+# live request on each supported openai major so the httpx (2.x) and httpx2
+# (3.x) transport paths are always covered, regardless of which openai version
+# uv.lock currently resolves.
 integration_test integration_tests:
+       uv run --with 'openai>=2.45.0,<3.0.0' --group test --group 
test_integration pytest -v --tb=short $(SDK_SMOKE_TEST)
+       uv run --with 'openai>=3.0.0,<4.0.0' --group test --group 
test_integration pytest -v --tb=short $(SDK_SMOKE_TEST)
        uv run --group test --group test_integration pytest -v --tb=short -n 
auto --benchmark-disable $(TEST_FILE)
 
 # Run VCR cassette-backed integration tests in playback-only mode (no API keys 
needed).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langchain_openai-1.4.3/PKG-INFO 
new/langchain_openai-1.5.0/PKG-INFO
--- old/langchain_openai-1.4.3/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.4
+Metadata-Version: 2.5
 Name: langchain-openai
-Version: 1.4.3
+Version: 1.5.0
 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,8 +23,9 @@
 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.5.3
-Requires-Dist: openai<3.0.0,>=2.45.0
+Requires-Dist: certifi>=2024.6.2
+Requires-Dist: langchain-core<2.0.0,>=1.5.4
+Requires-Dist: openai<4.0.0,>=2.45.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.4.3/langchain_openai/_compat.py 
new/langchain_openai-1.5.0/langchain_openai/_compat.py
--- old/langchain_openai-1.4.3/langchain_openai/_compat.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/langchain_openai/_compat.py      2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,45 @@
+"""Resolve the `httpx` library matching the installed `openai` SDK.
+
+`openai>=3` is backed by `httpx2` (an API-identical drop-in for `httpx`),
+`openai<3` by `httpx`. Transport/config objects injected into the SDK client
+are built from the same library, so this module re-exports whichever one the
+installed SDK version defaults to.
+
+Import `httpx` from here **only** for objects handed to the OpenAI SDK client
+(e.g. a custom transport, `Limits`, `Proxy`, or `http_client=`). Standalone 
HTTP
+code should import `httpx` directly.
+
+Note: the SDK's `DefaultHttpxClient`/`DefaultAsyncHttpxClient` classes are 
*not*
+re-exported here — they are subclassable in both SDK versions (backed by
+`httpx2` on `openai>=3`), so subclass `openai.DefaultHttpxClient` directly. The
+`DefaultHttpx2Client` names are factory functions, not classes, and cannot be
+subclassed.
+"""
+
+from __future__ import annotations
+
+import re
+from typing import TYPE_CHECKING
+
+import openai
+
+
+def _sdk_uses_httpx2() -> bool:
+    """Whether the installed `openai` SDK defaults to `httpx2` (openai>=3)."""
+    # First integer run, so tag-derived strings like `v3.0.0` still parse;
+    # unparseable falls back to classic httpx (always present).
+    match = re.match(r"\D*(\d+)", str(getattr(openai, "__version__", "")))
+    return match is not None and int(match.group(1)) >= 3
+
+
+if TYPE_CHECKING:
+    # Type-check against `httpx`, whose API `httpx2` mirrors. This keeps mypy
+    # working in the lint environment (which installs `httpx`, not `httpx2`)
+    # while the runtime selection below picks the correct module.
+    import httpx
+elif _sdk_uses_httpx2():
+    import httpx2 as httpx  # type: ignore[import-not-found]
+else:
+    import httpx
+
+__all__ = ["httpx"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langchain_openai-1.4.3/langchain_openai/_version.py 
new/langchain_openai-1.5.0/langchain_openai/_version.py
--- old/langchain_openai-1.4.3/langchain_openai/_version.py     2020-02-02 
01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/langchain_openai/_version.py     2020-02-02 
01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
 """Version information for `langchain-openai`."""
 
-__version__ = "1.4.3"
+__version__ = "1.5.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langchain_openai-1.4.3/langchain_openai/chat_models/_client_utils.py 
new/langchain_openai-1.5.0/langchain_openai/chat_models/_client_utils.py
--- old/langchain_openai-1.4.3/langchain_openai/chat_models/_client_utils.py    
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/langchain_openai/chat_models/_client_utils.py    
2020-02-02 01:00:00.000000000 +0100
@@ -22,10 +22,11 @@
 from functools import lru_cache
 from typing import Any, TypeVar, cast
 
-import httpx
 import openai
 from pydantic import SecretStr
 
+from langchain_openai._compat import httpx
+
 logger = logging.getLogger(__name__)
 
 SocketOption = tuple[int, int, int]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langchain_openai-1.4.3/langchain_openai/embeddings/base.py 
new/langchain_openai-1.5.0/langchain_openai/embeddings/base.py
--- old/langchain_openai-1.4.3/langchain_openai/embeddings/base.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/langchain_openai/embeddings/base.py      
2020-02-02 01:00:00.000000000 +0100
@@ -421,11 +421,12 @@
             else:
                 if self.openai_proxy and not self.http_client:
                     try:
-                        import httpx
+                        from langchain_openai._compat import httpx
                     except ImportError as e:
                         msg = (
-                            "Could not import httpx python package. "
-                            "Please install it with `pip install httpx`."
+                            "Could not import the httpx package used by the "
+                            "OpenAI SDK. It is normally installed alongside "
+                            "`openai`; reinstall with `pip install openai`."
                         )
                         raise ImportError(msg) from e
                     self.http_client = httpx.Client(proxy=self.openai_proxy)
@@ -437,11 +438,12 @@
         if not self.async_client:
             if self.openai_proxy and not self.http_async_client:
                 try:
-                    import httpx
+                    from langchain_openai._compat import httpx
                 except ImportError as e:
                     msg = (
-                        "Could not import httpx python package. "
-                        "Please install it with `pip install httpx`."
+                        "Could not import the httpx package used by the "
+                        "OpenAI SDK. It is normally installed alongside "
+                        "`openai`; reinstall with `pip install openai`."
                     )
                     raise ImportError(msg) from e
                 self.http_async_client = 
httpx.AsyncClient(proxy=self.openai_proxy)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langchain_openai-1.4.3/pyproject.toml 
new/langchain_openai-1.5.0/pyproject.toml
--- old/langchain_openai-1.4.3/pyproject.toml   2020-02-02 01:00:00.000000000 
+0100
+++ new/langchain_openai-1.5.0/pyproject.toml   2020-02-02 01:00:00.000000000 
+0100
@@ -20,11 +20,12 @@
     "Topic :: Scientific/Engineering :: Artificial Intelligence",
 ]
 
-version = "1.4.3"
+version = "1.5.0"
 requires-python = ">=3.10.0,<4.0.0"
 dependencies = [
-    "langchain-core>=1.5.3,<2.0.0",
-    "openai>=2.45.0,<3.0.0",
+    "langchain-core>=1.5.4,<2.0.0",
+    "certifi>=2024.6.2",
+    "openai>=2.45.0,<4.0.0",
     "tiktoken>=0.7.0,<1.0.0",
 ]
 
@@ -50,7 +51,7 @@
     "pytest-retry>=1.7.0,<1.8.0",
     "pytest-socket>=0.6.0,<1.0.0",
     "pytest-xdist>=3.6.1,<4.0.0",
-    "vcrpy>=8.0.0,<9.0.0",
+    "vcrpy>=8.2.0,<9.0.0",
     "numpy>=1.26.4; python_version<'3.13'",
     "numpy>=2.1.0; python_version>='3.13'",
     "langchain>=1.0.0,<2.0.0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langchain_openai-1.4.3/tests/unit_tests/chat_models/test_client_utils.py 
new/langchain_openai-1.5.0/tests/unit_tests/chat_models/test_client_utils.py
--- 
old/langchain_openai-1.4.3/tests/unit_tests/chat_models/test_client_utils.py    
    2020-02-02 01:00:00.000000000 +0100
+++ 
new/langchain_openai-1.5.0/tests/unit_tests/chat_models/test_client_utils.py    
    2020-02-02 01:00:00.000000000 +0100
@@ -456,7 +456,7 @@
         verify=True,
         socket_options=(),
     )
-    assert isinstance(client, httpx.AsyncClient)
+    assert isinstance(client, _client_utils.httpx.AsyncClient)
 
 
 def test_build_proxied_async_httpx_client_wraps_transport() -> None:
@@ -470,7 +470,7 @@
         verify=True,
         socket_options=((SOL_SOCKET, SO_KEEPALIVE, 1),),
     )
-    assert isinstance(client, httpx.AsyncClient)
+    assert isinstance(client, _client_utils.httpx.AsyncClient)
 
 
 def test_build_proxied_sync_httpx_client_opt_out_returns_plain_client() -> 
None:
@@ -479,7 +479,7 @@
         verify=True,
         socket_options=(),
     )
-    assert isinstance(client, httpx.Client)
+    assert isinstance(client, _client_utils.httpx.Client)
 
 
 def test_build_proxied_sync_httpx_client_wraps_transport() -> None:
@@ -488,7 +488,7 @@
         verify=True,
         socket_options=((SOL_SOCKET, SO_KEEPALIVE, 1),),
     )
-    assert isinstance(client, httpx.Client)
+    assert isinstance(client, _client_utils.httpx.Client)
 
 
 def test_warn_if_proxy_env_shadowed_emits_once(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langchain_openai-1.4.3/tests/unit_tests/test_compat.py 
new/langchain_openai-1.5.0/tests/unit_tests/test_compat.py
--- old/langchain_openai-1.4.3/tests/unit_tests/test_compat.py  1970-01-01 
01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/tests/unit_tests/test_compat.py  2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,95 @@
+"""Tests for the `httpx` / `httpx2` compatibility shim (`_compat`)."""
+
+import inspect
+
+import openai
+import pytest
+
+from langchain_openai import _compat
+from langchain_openai.chat_models import _client_utils
+
+
+def test_module_httpx_matches_helper() -> None:
+    """The module-level `httpx` binding agrees with the version check."""
+    expected = "httpx2" if _compat._sdk_uses_httpx2() else "httpx"
+    assert _compat.httpx.__name__ == expected
+
+
+def test_only_httpx_is_exported() -> None:
+    """The default client classes are intentionally not re-exported."""
+    assert _compat.__all__ == ["httpx"]
+
+
+def test_default_clients_are_subclassable_classes() -> None:
+    """`DefaultHttpxClient`/`DefaultAsyncHttpxClient` must be classes, not 
factories.
+
+    Regression guard: on openai>=3, `DefaultHttpx2Client` is a *factory
+    function* (returns an `httpx2.Client`) and cannot be subclassed, while the
+    legacy `DefaultHttpxClient` name remains a subclassable class. The wrappers
+    below depend on subclassing the latter.
+    """
+    assert inspect.isclass(openai.DefaultHttpxClient)
+    assert inspect.isclass(openai.DefaultAsyncHttpxClient)
+
+
+def test_wrappers_subclass_openai_default_clients() -> None:
+    """The client wrappers extend the SDK's version-appropriate base 
classes."""
+    assert issubclass(_client_utils._SyncHttpxClientWrapper, 
openai.DefaultHttpxClient)
+    assert issubclass(
+        _client_utils._AsyncHttpxClientWrapper, openai.DefaultAsyncHttpxClient
+    )
+
+
+def test_client_utils_transport_objects_use_shim_httpx() -> None:
+    """Transport/config objects come from the same module the SDK client uses.
+
+    Handing the SDK an `httpx` object when it expects `httpx2` (or vice
+    versa) happens to work today because the two libraries are drop-in
+    equivalents. Matching them anyway keeps type annotations and `isinstance`
+    checks honest.
+    """
+    assert _client_utils.httpx is _compat.httpx
+    assert isinstance(_client_utils._DEFAULT_CONNECTION_LIMITS, 
_compat.httpx.Limits)
+
+
[email protected](
+    ("version", "expected"),
+    [
+        ("2.45.0", False),
+        ("2.54.0", False),
+        ("3.0.0", True),
+        ("3.1.2", True),
+        ("4.0.0", True),
+        # Tag-derived / pre-release strings a plain `int()` parse choked on.
+        ("v3.0.0", True),
+        ("3.0.0rc1", True),
+        ("3.0.0.dev1", True),
+    ],
+)
+def test_sdk_uses_httpx2_reads_major_version(
+    monkeypatch: pytest.MonkeyPatch, version: str, expected: bool
+) -> None:
+    """Selection keys on the openai major version (httpx2 default landed in 
3.0)."""
+    monkeypatch.setattr(openai, "__version__", version)
+    assert _compat._sdk_uses_httpx2() is expected
+
+
+def test_httpx2_factory_presence_does_not_flip_selection(
+    monkeypatch: pytest.MonkeyPatch,
+) -> None:
+    """Late openai 2.x exposes a `DefaultHttpx2Client` factory but stays 
classic.
+
+    Regression guard for the case where a 2.x SDK backports the httpx2 factory:
+    the major version (2) must win, so the shim stays on classic `httpx`.
+    """
+    monkeypatch.setattr(openai, "__version__", "2.54.0")
+    monkeypatch.setattr(openai, "DefaultHttpx2Client", object(), raising=False)
+    assert _compat._sdk_uses_httpx2() is False
+
+
+def test_sdk_uses_httpx2_unparseable_version_falls_back_to_classic(
+    monkeypatch: pytest.MonkeyPatch,
+) -> None:
+    """An unparseable version must not raise at import; fall back to 
classic."""
+    monkeypatch.setattr(openai, "__version__", "not-a-version")
+    assert _compat._sdk_uses_httpx2() is False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langchain_openai-1.4.3/uv.lock 
new/langchain_openai-1.5.0/uv.lock
--- old/langchain_openai-1.4.3/uv.lock  2020-02-02 01:00:00.000000000 +0100
+++ new/langchain_openai-1.5.0/uv.lock  2020-02-02 01:00:00.000000000 +0100
@@ -6,8 +6,10 @@
     "python_full_version >= '3.13' and python_full_version < '3.15' and 
platform_python_implementation == 'PyPy'",
     "python_full_version >= '3.15' and platform_python_implementation != 
'PyPy'",
     "python_full_version >= '3.13' and python_full_version < '3.15' and 
platform_python_implementation != 'PyPy'",
-    "python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation == 'PyPy'",
-    "python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation != 'PyPy'",
+    "python_full_version == '3.12.*' and platform_python_implementation == 
'PyPy' and sys_platform == 'emscripten'",
+    "(python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation == 'PyPy' and sys_platform != 'emscripten') or 
(python_full_version == '3.11.*' and platform_python_implementation == 'PyPy' 
and sys_platform == 'emscripten')",
+    "python_full_version == '3.12.*' and platform_python_implementation != 
'PyPy' and sys_platform == 'emscripten'",
+    "(python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation != 'PyPy' and sys_platform != 'emscripten') or 
(python_full_version == '3.11.*' and platform_python_implementation != 'PyPy' 
and sys_platform == 'emscripten')",
     "python_full_version < '3.11' and platform_python_implementation == 
'PyPy'",
     "python_full_version < '3.11' and platform_python_implementation != 
'PyPy'",
 ]
@@ -449,6 +451,19 @@
 ]
 
 [[package]]
+name = "httpcore2"
+version = "2.10.0"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "h11", marker = "python_full_version != '3.12.*' or sys_platform 
!= 'emscripten'" },
+    { name = "truststore", marker = "python_full_version != '3.12.*' or 
sys_platform != 'emscripten'" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/a9/83/a896fc59940fc5a6e2aff3a4be1d92fa890112936803b331cae75a993c34/httpcore2-2.10.0.tar.gz";,
 hash = 
"sha256:13c0cc3d1919d4f28457f60cd2c2abe04113a8af184ccf1142811beba936f9dc", size 
= 67427, upload-time = "2026-08-09T09:11:32.123Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/e5/4f/d149104195a35e2853a2fc203a8e3477747e58c80e17dda686dace174383/httpcore2-2.10.0-py3-none-any.whl";,
 hash = 
"sha256:7df06cfb34070cae4f7c89be69dc1095eca138e9704ceffb98d25c1912ab6f01", size 
= 83000, upload-time = "2026-08-09T09:11:29.555Z" },
+]
+
+[[package]]
 name = "httpx"
 version = "0.28.1"
 source = { registry = "https://pypi.org/simple"; }
@@ -464,12 +479,38 @@
 ]
 
 [[package]]
+name = "httpx2"
+version = "2.10.0"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "anyio", marker = "sys_platform != 'emscripten'" },
+    { name = "httpcore2", marker = "sys_platform != 'emscripten'" },
+    { name = "httpx2-jsfetch", marker = "python_full_version >= '3.12' and 
sys_platform == 'emscripten'" },
+    { name = "idna" },
+    { name = "truststore", marker = "sys_platform != 'emscripten'" },
+    { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/bd/3d/f9a8c07a3884f3e5b26205e8436a18b3af61c5d53192c3bea235574dbbec/httpx2-2.10.0.tar.gz";,
 hash = 
"sha256:8741d7329fe2c7885fc9ceb61c8217acfb87a85f75723714b89ebf7ad7196338", size 
= 98749, upload-time = "2026-08-09T09:11:33.24Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/b9/6d/a637d52449d98a6892d9a4dc0262587afdb6a66f201871842dce5a97b1c1/httpx2-2.10.0-py3-none-any.whl";,
 hash = 
"sha256:5e3194a432701e1cc6f69a8b1b2fa199ef907013fede8d9a09a2c5b7b8141a18", size 
= 94355, upload-time = "2026-08-09T09:11:30.882Z" },
+]
+
+[[package]]
+name = "httpx2-jsfetch"
+version = "1.0"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/cd/c4/0e5636363151a2a1795e0a77617168b9ca438e1748ec05fc9b5687f93d64/httpx2_jsfetch-1.0.tar.gz";,
 hash = 
"sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60", size 
= 6872, upload-time = "2026-08-07T00:13:07.492Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl";,
 hash = 
"sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size 
= 6382, upload-time = "2026-08-07T00:13:06.567Z" },
+]
+
+[[package]]
 name = "idna"
-version = "3.15"
+version = "3.18"
 source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz";,
 hash = 
"sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size 
= 199245, upload-time = "2026-05-12T22:45:57.011Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz";,
 hash = 
"sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size 
= 196711, upload-time = "2026-06-02T14:34:07.794Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl";,
 hash = 
"sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size 
= 72340, upload-time = "2026-05-12T22:45:55.733Z" },
+    { url = 
"https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl";,
 hash = 
"sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size 
= 65455, upload-time = "2026-06-02T14:34:06.319Z" },
 ]
 
 [[package]]
@@ -601,7 +642,7 @@
 
 [[package]]
 name = "langchain"
-version = "1.3.14"
+version = "1.3.15"
 source = { editable = "../../langchain_v1" }
 dependencies = [
     { name = "langchain-core" },
@@ -630,7 +671,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"]
@@ -666,9 +707,10 @@
 
 [[package]]
 name = "langchain-core"
-version = "1.5.3"
+version = "1.5.4"
 source = { editable = "../../core" }
 dependencies = [
+    { name = "httpx" },
     { name = "jsonpatch" },
     { name = "langchain-protocol" },
     { name = "langsmith" },
@@ -682,6 +724,7 @@
 
 [package.metadata]
 requires-dist = [
+    { name = "httpx", specifier = ">=0.23.0,<1.0.0" },
     { name = "jsonpatch", specifier = ">=1.33.0,<2.0.0" },
     { name = "langchain-protocol", specifier = ">=0.0.17" },
     { name = "langsmith", specifier = ">=0.3.45,<1.0.0" },
@@ -728,9 +771,10 @@
 
 [[package]]
 name = "langchain-openai"
-version = "1.4.3"
+version = "1.5.0"
 source = { editable = "." }
 dependencies = [
+    { name = "certifi" },
     { name = "langchain-core" },
     { name = "openai" },
     { name = "tiktoken" },
@@ -770,8 +814,9 @@
 
 [package.metadata]
 requires-dist = [
+    { name = "certifi", specifier = ">=2024.6.2" },
     { name = "langchain-core", editable = "../../core" },
-    { name = "openai", specifier = ">=2.45.0,<3.0.0" },
+    { name = "openai", specifier = ">=2.45.0,<4.0.0" },
     { name = "tiktoken", specifier = ">=0.7.0,<1.0.0" },
 ]
 
@@ -793,7 +838,7 @@
     { name = "pytest-watcher", specifier = ">=0.3.4,<1.0.0" },
     { name = "pytest-xdist", specifier = ">=3.6.1,<4.0.0" },
     { name = "syrupy", specifier = ">=5.0.0,<6.0.0" },
-    { name = "vcrpy", specifier = ">=8.0.0,<9.0.0" },
+    { name = "vcrpy", specifier = ">=8.2.0,<9.0.0" },
 ]
 test-integration = [
     { name = "httpx", specifier = ">=0.27.0,<1.0.0" },
@@ -864,7 +909,7 @@
 
 [[package]]
 name = "langgraph"
-version = "1.2.5"
+version = "1.2.11"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "langchain-core" },
@@ -874,9 +919,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]]
@@ -1191,8 +1236,10 @@
     "python_full_version >= '3.13' and python_full_version < '3.15' and 
platform_python_implementation == 'PyPy'",
     "python_full_version >= '3.15' and platform_python_implementation != 
'PyPy'",
     "python_full_version >= '3.13' and python_full_version < '3.15' and 
platform_python_implementation != 'PyPy'",
-    "python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation == 'PyPy'",
-    "python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation != 'PyPy'",
+    "python_full_version == '3.12.*' and platform_python_implementation == 
'PyPy' and sys_platform == 'emscripten'",
+    "(python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation == 'PyPy' and sys_platform != 'emscripten') or 
(python_full_version == '3.11.*' and platform_python_implementation == 'PyPy' 
and sys_platform == 'emscripten')",
+    "python_full_version == '3.12.*' and platform_python_implementation != 
'PyPy' and sys_platform == 'emscripten'",
+    "(python_full_version >= '3.11' and python_full_version < '3.13' and 
platform_python_implementation != 'PyPy' and sys_platform != 'emscripten') or 
(python_full_version == '3.11.*' and platform_python_implementation != 'PyPy' 
and sys_platform == 'emscripten')",
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz";,
 hash = 
"sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size 
= 20582187, upload-time = "2025-10-15T16:18:11.77Z" }
 wheels = [
@@ -1273,21 +1320,21 @@
 
 [[package]]
 name = "openai"
-version = "2.45.0"
+version = "3.0.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "anyio" },
     { name = "distro" },
-    { name = "httpx" },
+    { name = "httpx2" },
     { name = "jiter" },
     { name = "pydantic" },
     { name = "sniffio" },
     { name = "tqdm" },
     { name = "typing-extensions" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/78/60/d4219875289b11d2c2f7da93c36283da224a2e55865ed865ab64e0ce9217/openai-2.45.0.tar.gz";,
 hash = 
"sha256:10d34ca9c5643bce775852fddbfc172505cb1d4de1ccd101696c3ecff358765d", size 
= 1109653, upload-time = "2026-07-09T18:02:44.091Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/54/8c/2f500e8be09d1ae98c530467962535198b02cd4550cd418bbbaedc8b2910/openai-3.0.0.tar.gz";,
 hash = 
"sha256:ffd00ef1678d70957e1f1ed98d5bfcf1d661f41ea4482f22e7d0144a66435a49", size 
= 1123740, upload-time = "2026-08-12T01:55:50.849Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/f1/b0/2291689e3ec4723fbf5bbf3b54afcd7b160f9ddc98ca7aedfd0132af5677/openai-2.45.0-py3-none-any.whl";,
 hash = 
"sha256:5df105f5f8c9b711fcb9d06d2d3888cebc82506db216484c14a4e53cdf651777", size 
= 1629470, upload-time = "2026-07-09T18:02:42.21Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7b/0d/9850e7eddb5e66da4439ed503e78e09ad1fd0195e6df51e4236c75763581/openai-3.0.0-py3-none-any.whl";,
 hash = 
"sha256:8d32ac3a6647a66910d6cb8a64f0fa5a6c823604b6e82db83d9d055c6709bd51", size 
= 1665775, upload-time = "2026-08-12T01:55:48.678Z" },
 ]
 
 [[package]]
@@ -2270,6 +2317,15 @@
 ]
 
 [[package]]
+name = "truststore"
+version = "0.10.4"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz";,
 hash = 
"sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size 
= 26169, upload-time = "2025-08-12T18:49:02.73Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl";,
 hash = 
"sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size 
= 18660, upload-time = "2025-08-12T18:49:01.46Z" },
+]
+
+[[package]]
 name = "types-requests"
 version = "2.31.0.6"
 source = { registry = "https://pypi.org/simple"; }

Reply via email to