"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from .anthropicbase64imagesource import (
    AnthropicBase64ImageSource,
    AnthropicBase64ImageSourceTypedDict,
)
from .anthropiccachecontroldirective import (
    AnthropicCacheControlDirective,
    AnthropicCacheControlDirectiveTypedDict,
)
from .anthropicurlimagesource import (
    AnthropicURLImageSource,
    AnthropicURLImageSourceTypedDict,
)
from openrouter.types import BaseModel
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict


AnthropicImageBlockParamSourceTypedDict = TypeAliasType(
    "AnthropicImageBlockParamSourceTypedDict",
    Union[AnthropicURLImageSourceTypedDict, AnthropicBase64ImageSourceTypedDict],
)


AnthropicImageBlockParamSource = Annotated[
    Union[
        Annotated[AnthropicBase64ImageSource, Tag("base64")],
        Annotated[AnthropicURLImageSource, Tag("url")],
    ],
    Discriminator(lambda m: get_discriminator(m, "type", "type")),
]


AnthropicImageBlockParamType = Literal["image",]


class AnthropicImageBlockParamTypedDict(TypedDict):
    source: AnthropicImageBlockParamSourceTypedDict
    type: AnthropicImageBlockParamType
    cache_control: NotRequired[AnthropicCacheControlDirectiveTypedDict]
    r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""


class AnthropicImageBlockParam(BaseModel):
    source: AnthropicImageBlockParamSource

    type: AnthropicImageBlockParamType

    cache_control: Optional[AnthropicCacheControlDirective] = None
    r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
