This commit is contained in:
Chester Curme 2025-07-08 16:21:25 -04:00
parent ac23607a61
commit 93c1aeebb6

View File

@ -4,50 +4,50 @@ import warnings
from typing import Any, Literal, Union from typing import Any, Literal, Union
from pydantic import TypeAdapter, ValidationError from pydantic import TypeAdapter, ValidationError
from typing_extensions import Required, TypedDict from typing_extensions import NotRequired, TypedDict
# Text and annotations # Text and annotations
class UrlCitation(TypedDict, total=False): class UrlCitation(TypedDict, total=False):
"""Citation from a URL.""" """Citation from a URL."""
type: Required[Literal["url_citation"]] type: Literal["url_citation"]
url: Required[str] url: str
"""Source URL.""" """Source URL."""
title: str title: NotRequired[str]
"""Source title.""" """Source title."""
cited_text: str cited_text: NotRequired[str]
"""Text from the source that is being cited.""" """Text from the source that is being cited."""
start_index: int start_index: NotRequired[int]
"""Start index of the response text for which the annotation applies.""" """Start index of the response text for which the annotation applies."""
end_index: int end_index: NotRequired[int]
"""End index of the response text for which the annotation applies.""" """End index of the response text for which the annotation applies."""
class DocumentCitation(TypedDict, total=False): class DocumentCitation(TypedDict, total=False):
"""Annotation for data from a document.""" """Annotation for data from a document."""
type: Required[Literal["document_citation"]] type: Literal["document_citation"]
title: str title: NotRequired[str]
"""Source title.""" """Source title."""
cited_text: str cited_text: NotRequired[str]
"""Text from the source that is being cited.""" """Text from the source that is being cited."""
start_index: int start_index: NotRequired[int]
"""Start index of the response text for which the annotation applies.""" """Start index of the response text for which the annotation applies."""
end_index: int end_index: NotRequired[int]
"""End index of the response text for which the annotation applies.""" """End index of the response text for which the annotation applies."""
class NonStandardAnnotation(TypedDict): class NonStandardAnnotation(TypedDict, total=False):
"""Provider-specific annotation format.""" """Provider-specific annotation format."""
type: Literal["non_standard_annotation"] type: Literal["non_standard_annotation"]
@ -59,11 +59,13 @@ class NonStandardAnnotation(TypedDict):
class TextContentBlock(TypedDict, total=False): class TextContentBlock(TypedDict, total=False):
"""Content block for text output.""" """Content block for text output."""
type: Required[Literal["text"]] type: Literal["text"]
"""Type of the content block.""" """Type of the content block."""
text: Required[str] text: str
"""Block text.""" """Block text."""
annotations: list[Union[UrlCitation, DocumentCitation, NonStandardAnnotation]] annotations: NotRequired[
list[Union[UrlCitation, DocumentCitation, NonStandardAnnotation]]
]
"""Citations and other annotations.""" """Citations and other annotations."""
@ -75,9 +77,9 @@ class ToolCallContentBlock(TypedDict, total=False):
message's ``tool_calls`` attribute. message's ``tool_calls`` attribute.
""" """
type: Required[Literal["tool_call"]] type: Literal["tool_call"]
"""Type of the content block.""" """Type of the content block."""
id: Required[str] id: str
"""Tool call ID.""" """Tool call ID."""
@ -85,9 +87,9 @@ class ToolCallContentBlock(TypedDict, total=False):
class ReasoningContentBlock(TypedDict, total=False): class ReasoningContentBlock(TypedDict, total=False):
"""Content block for reasoning output.""" """Content block for reasoning output."""
type: Required[Literal["reasoning"]] type: Literal["reasoning"]
"""Type of the content block.""" """Type of the content block."""
reasoning: str reasoning: NotRequired[str]
"""Reasoning text.""" """Reasoning text."""
@ -95,51 +97,51 @@ class ReasoningContentBlock(TypedDict, total=False):
class BaseDataContentBlock(TypedDict, total=False): class BaseDataContentBlock(TypedDict, total=False):
"""Base class for data content blocks.""" """Base class for data content blocks."""
mime_type: str mime_type: NotRequired[str]
"""MIME type of the content block (if needed).""" """MIME type of the content block (if needed)."""
class URLContentBlock(BaseDataContentBlock): class URLContentBlock(BaseDataContentBlock):
"""Content block for data from a URL.""" """Content block for data from a URL."""
type: Required[Literal["image", "audio", "file"]] type: Literal["image", "audio", "file"]
"""Type of the content block.""" """Type of the content block."""
source_type: Required[Literal["url"]] source_type: Literal["url"]
"""Source type (url).""" """Source type (url)."""
url: Required[str] url: str
"""URL for data.""" """URL for data."""
class Base64ContentBlock(BaseDataContentBlock): class Base64ContentBlock(BaseDataContentBlock):
"""Content block for inline data from a base64 string.""" """Content block for inline data from a base64 string."""
type: Required[Literal["image", "audio", "file"]] type: Literal["image", "audio", "file"]
"""Type of the content block.""" """Type of the content block."""
source_type: Required[Literal["base64"]] source_type: Literal["base64"]
"""Source type (base64).""" """Source type (base64)."""
data: Required[str] data: str
"""Data as a base64 string.""" """Data as a base64 string."""
class PlainTextContentBlock(BaseDataContentBlock): class PlainTextContentBlock(BaseDataContentBlock):
"""Content block for plain text data (e.g., from a document).""" """Content block for plain text data (e.g., from a document)."""
type: Required[Literal["file"]] type: Literal["file"]
"""Type of the content block.""" """Type of the content block."""
source_type: Required[Literal["text"]] source_type: Literal["text"]
"""Source type (text).""" """Source type (text)."""
text: Required[str] text: str
"""Text data.""" """Text data."""
class IDContentBlock(BaseDataContentBlock): class IDContentBlock(TypedDict):
"""Content block for data specified by an identifier.""" """Content block for data specified by an identifier."""
type: Required[Literal["image", "audio", "file"]] type: Literal["image", "audio", "file"]
"""Type of the content block.""" """Type of the content block."""
source_type: Required[Literal["id"]] source_type: Literal["id"]
"""Source type (id).""" """Source type (id)."""
id: Required[str] id: str
"""Identifier for data source.""" """Identifier for data source."""
@ -154,7 +156,7 @@ _DataContentBlockAdapter: TypeAdapter[DataContentBlock] = TypeAdapter(DataConten
# Non-standard # Non-standard
class NonStandardContentBlock(TypedDict): class NonStandardContentBlock(TypedDict, total=False):
"""Content block provider-specific data. """Content block provider-specific data.
This block contains data for which there is not yet a standard type. This block contains data for which there is not yet a standard type.