From 351d15352b31bb09ecc78ad356a0979728ce08ba Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Mon, 19 Oct 2026 14:11:05 -0700 Subject: [PATCH] chore(deps): require pydantic>=2.12.0 so TypedDict extra_items keys survive validation --- packaging/litellm-core/pyproject.toml | 3 +-- pyproject.toml | 3 +-- tests/unit/test_package_metadata.py | 16 ++++++++++++++++ uv.lock | 3 +-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packaging/litellm-core/pyproject.toml b/packaging/litellm-core/pyproject.toml index 2add6868bd9..30d879d78b4 100644 --- a/packaging/litellm-core/pyproject.toml +++ b/packaging/litellm-core/pyproject.toml @@ -26,8 +26,7 @@ dependencies = [ "aiohttp>=3.14.2,<4.0", "anyio>=4.14.0,<5.0", "async-timeout>=4.0.3,<6.0; python_version < '3.11'", - "pydantic>=2.11.0,<3.0.0; python_version < '3.14'", - "pydantic>=2.12.0,<3.0.0; python_version >= '3.14'", + "pydantic>=2.12.0,<3.0.0", "pydantic-settings>=2.14.1,<3.0", "jsonschema>=4.0.0,<5.0", "typing-extensions>=4.13.0,<5.0", diff --git a/pyproject.toml b/pyproject.toml index 6c71140e6b8..d140ef23a38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,8 +31,7 @@ dependencies = [ "aiohttp>=3.14.2,<4.0", "anyio>=4.14.0,<5.0", "async-timeout>=4.0.3,<6.0; python_version < '3.11'", - "pydantic>=2.11.0,<3.0.0; python_version < '3.14'", - "pydantic>=2.12.0,<3.0.0; python_version >= '3.14'", + "pydantic>=2.12.0,<3.0.0", "pydantic-settings>=2.14.1,<3.0", "jsonschema>=4.0.0,<5.0", "boto3>=1.43.1,<2.0", diff --git a/tests/unit/test_package_metadata.py b/tests/unit/test_package_metadata.py index dc6e3dca64e..a94e17608b6 100644 --- a/tests/unit/test_package_metadata.py +++ b/tests/unit/test_package_metadata.py @@ -21,6 +21,8 @@ AIOHTTP_POOL_POISONING_RELEASES: Final = ("3.14.0", "3.14.1") AIOHTTP_POOL_POISONING_SOURCE: Final = "aio-libs/aiohttp#12953, fixed in aiohttp 3.14.2" ANYIO_STRANDED_LOCK_WAITER_FIX: Final = Version("4.14.0") ANYIO_STRANDED_LOCK_WAITER_SOURCE: Final = "agronholm/anyio#1145, fixed in anyio 4.14.0 released 2026-06-15" +PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SUPPORT: Final = Version("2.12.0") +PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SOURCE: Final = "TypeAdapter drops PEP 728 extra_items keys on pydantic 2.11.7, keeps them on 2.12.0 (probed 2026-10-19)" CLI_RUNTIME_DEPENDENCIES: Final = frozenset({"rich", "pyyaml", "requests"}) PROXY_SERVER_ONLY_DEPENDENCIES: Final = frozenset( { @@ -109,3 +111,17 @@ def test_declared_anyio_floor_is_at_or_above_stranded_lock_waiter_fix() -> None: specifier.operator == ">=" and Version(specifier.version) >= ANYIO_STRANDED_LOCK_WAITER_FIX for specifier in declared[0].specifier ), ANYIO_STRANDED_LOCK_WAITER_SOURCE + + +def test_declared_pydantic_floor_keeps_typed_dict_extra_items() -> None: + declared: Final = tuple( + Requirement(requirement) + for requirement in PYPROJECT["project"]["dependencies"] + if canonicalize_name(Requirement(requirement).name) == "pydantic" + ) + assert len(declared) == 1, PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SOURCE + assert declared[0].marker is None, PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SOURCE + assert any( + specifier.operator == ">=" and Version(specifier.version) >= PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SUPPORT + for specifier in declared[0].specifier + ), PYDANTIC_TYPED_DICT_EXTRA_ITEMS_SOURCE diff --git a/uv.lock b/uv.lock index 69d9f777687..f034299f5cf 100644 --- a/uv.lock +++ b/uv.lock @@ -4832,8 +4832,7 @@ requires-dist = [ { name = "prometheus-client", marker = "extra == 'proxy-runtime'", specifier = ">=0.20.0,<1.0" }, { name = "psycopg", marker = "extra == 'extra-proxy'", specifier = ">=3.2,<4.0" }, { name = "psycopg-binary", marker = "extra == 'extra-proxy'", specifier = ">=3.2,<4.0" }, - { name = "pydantic", marker = "python_full_version < '3.14'", specifier = ">=2.11.0,<3.0.0" }, - { name = "pydantic", marker = "python_full_version >= '3.14'", specifier = ">=2.12.0,<3.0.0" }, + { name = "pydantic", specifier = ">=2.12.0,<3.0.0" }, { name = "pydantic", marker = "extra == 'mcp'", specifier = ">=2.12.0,<3" }, { name = "pydantic", marker = "extra == 'proxy'", specifier = ">=2.12.0,<3" }, { name = "pydantic-settings", specifier = ">=2.14.1,<3.0" },