From 21aaa48e6240677681e95767c6c487a4a03b9c18 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Thu, 15 Jan 2026 17:02:30 -0500 Subject: [PATCH] Fix pydantic issues impacting autodoc --- src/pipecat/services/openai/realtime/events.py | 8 +++----- .../services/openai_realtime_beta/events.py | 8 +++----- src/pipecat/transports/daily/utils.py | 15 ++++++++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/pipecat/services/openai/realtime/events.py b/src/pipecat/services/openai/realtime/events.py index c0ef5b890..78faff45d 100644 --- a/src/pipecat/services/openai/realtime/events.py +++ b/src/pipecat/services/openai/realtime/events.py @@ -1002,17 +1002,15 @@ class TokenDetails(BaseModel): image_tokens: Number of image tokens used (for input only). """ + model_config = ConfigDict(extra="allow") + __pydantic_extra__: dict[str, Any] + cached_tokens: Optional[int] = 0 text_tokens: Optional[int] = 0 audio_tokens: Optional[int] = 0 cached_tokens_details: Optional[CachedTokensDetails] = None image_tokens: Optional[int] = 0 - class Config: - """Pydantic configuration for TokenDetails.""" - - extra = "allow" - class Usage(BaseModel): """Token usage statistics for a response. diff --git a/src/pipecat/services/openai_realtime_beta/events.py b/src/pipecat/services/openai_realtime_beta/events.py index ce582e9bd..ea4e738c2 100644 --- a/src/pipecat/services/openai_realtime_beta/events.py +++ b/src/pipecat/services/openai_realtime_beta/events.py @@ -877,15 +877,13 @@ class TokenDetails(BaseModel): audio_tokens: Number of audio tokens used. Defaults to 0. """ + model_config = ConfigDict(extra="allow") + __pydantic_extra__: dict[str, Any] + cached_tokens: Optional[int] = 0 text_tokens: Optional[int] = 0 audio_tokens: Optional[int] = 0 - class Config: - """Pydantic configuration for TokenDetails.""" - - extra = "allow" - class Usage(BaseModel): """Token usage statistics for a response. diff --git a/src/pipecat/transports/daily/utils.py b/src/pipecat/transports/daily/utils.py index bc4c4fa9d..9ea02e203 100644 --- a/src/pipecat/transports/daily/utils.py +++ b/src/pipecat/transports/daily/utils.py @@ -10,11 +10,11 @@ Methods that wrap the Daily API to create rooms, check room URLs, and get meetin """ import time -from typing import Dict, List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional from urllib.parse import urlparse import aiohttp -from pydantic import BaseModel, Field, ValidationError +from pydantic import BaseModel, ConfigDict, Field, ValidationError class DailyRoomSipParams(BaseModel): @@ -77,7 +77,7 @@ class TranscriptionBucketConfig(BaseModel): allow_api_access: bool = False -class DailyRoomProperties(BaseModel, extra="allow"): +class DailyRoomProperties(BaseModel): """Properties for configuring a Daily room. Reference: https://docs.daily.co/reference/rest-api/rooms/create-room#properties @@ -100,6 +100,11 @@ class DailyRoomProperties(BaseModel, extra="allow"): start_video_off: Whether video is off by default. """ + model_config = ConfigDict(extra="allow") + + # Pydantic v2.12+ requires explicit annotation for extra fields + __pydantic_extra__: dict[str, Any] + exp: Optional[float] = None enable_chat: bool = False enable_prejoin_ui: bool = False @@ -113,7 +118,7 @@ class DailyRoomProperties(BaseModel, extra="allow"): recordings_bucket: Optional[RecordingsBucketConfig] = None transcription_bucket: Optional[TranscriptionBucketConfig] = None sip: Optional[DailyRoomSipParams] = None - sip_uri: Optional[dict] = None + sip_uri: Optional[Dict[str, Any]] = None start_video_off: bool = False @property @@ -203,7 +208,7 @@ class DailyMeetingTokenProperties(BaseModel): enable_recording: Optional[Literal["cloud", "local", "raw-tracks"]] = None enable_prejoin_ui: Optional[bool] = None start_cloud_recording: Optional[bool] = None - permissions: Optional[dict] = None + permissions: Optional[Dict[str, Any]] = None class DailyMeetingTokenParams(BaseModel):