Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/anthropic/_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import os
import inspect
from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
from weakref import WeakKeyDictionary
from datetime import date, datetime
from typing_extensions import (
List,
Expand Down Expand Up @@ -584,9 +585,7 @@ def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]
return value


@runtime_checkable
class CachedDiscriminatorType(Protocol):
__discriminator__: DiscriminatorDetails
_DISCRIMINATOR_CACHE: "WeakKeyDictionary[type, DiscriminatorDetails]" = WeakKeyDictionary()


class DiscriminatorDetails:
Expand Down Expand Up @@ -631,8 +630,9 @@ def __init__(


def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any, ...]) -> DiscriminatorDetails | None:
if isinstance(union, CachedDiscriminatorType):
return union.__discriminator__
cached_discriminator = _DISCRIMINATOR_CACHE.get(union)
if cached_discriminator is not None:
return cached_discriminator

discriminator_field_name: str | None = None

Expand Down Expand Up @@ -685,7 +685,7 @@ def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any,
discriminator_field=discriminator_field_name,
discriminator_alias=discriminator_alias,
)
cast(CachedDiscriminatorType, union).__discriminator__ = details
_DISCRIMINATOR_CACHE[union] = details
return details


Expand Down
1 change: 0 additions & 1 deletion src/anthropic/types/beta/messages/batch_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class BatchCreateParams(TypedDict, total=False):
"""Optional header to specify the beta version(s) you want to use."""



class Request(TypedDict, total=False):
custom_id: Required[str]
"""Developer-provided ID created for each request in a Message Batch.
Expand Down
1 change: 0 additions & 1 deletion src/anthropic/types/messages/batch_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ class BatchCreateParams(TypedDict, total=False):
"""



class Request(TypedDict, total=False):
custom_id: Required[str]
"""Developer-provided ID created for each request in a Message Batch.
Expand Down
8 changes: 4 additions & 4 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from anthropic._utils import PropertyInfo
from anthropic._compat import PYDANTIC_V1, parse_obj, model_dump, model_json
from anthropic._models import BaseModel, construct_type
from anthropic._models import _DISCRIMINATOR_CACHE, BaseModel, construct_type


class BasicModel(BaseModel):
Expand Down Expand Up @@ -809,7 +809,7 @@ class B(BaseModel):

UnionType = cast(Any, Union[A, B])

assert not hasattr(UnionType, "__discriminator__")
assert _DISCRIMINATOR_CACHE.get(UnionType) is None

m = construct_type(
value={"type": "b", "data": "foo"}, type_=cast(Any, Annotated[UnionType, PropertyInfo(discriminator="type")])
Expand All @@ -818,7 +818,7 @@ class B(BaseModel):
assert m.type == "b"
assert m.data == "foo" # type: ignore[comparison-overlap]

discriminator = UnionType.__discriminator__
discriminator = _DISCRIMINATOR_CACHE.get(UnionType)
assert discriminator is not None

m = construct_type(
Expand All @@ -830,7 +830,7 @@ class B(BaseModel):

# if the discriminator details object stays the same between invocations then
# we hit the cache
assert UnionType.__discriminator__ is discriminator
assert _DISCRIMINATOR_CACHE.get(UnionType) is discriminator


@pytest.mark.skipif(PYDANTIC_V1, reason="TypeAliasType is not supported in Pydantic v1")
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.