| from typing import List, Optional, Union | |
| from pydantic import BaseModel, ConfigDict, RootModel | |
| class ImageContent(BaseModel): | |
| """Model for image content in messages.""" | |
| type: str | |
| image_url: dict | |
| class TextContent(BaseModel): | |
| """Model for text content in messages.""" | |
| type: str | |
| text: str | |
| class MessageContent(RootModel): | |
| """Model for message content that can be either text or image.""" | |
| root: Union[TextContent, ImageContent] | |
| class OpenAIChatMessage(BaseModel): | |
| """Model for chat messages in OpenAI format.""" | |
| role: str | |
| content: Union[str, List[MessageContent]] | |
| model_config = ConfigDict(extra="allow") | |
| class OpenAIChatCompletionForm(BaseModel): | |
| """Model for chat completion request parameters.""" | |
| stream: bool = True | |
| model: str | |
| messages: List[OpenAIChatMessage] | |
| model_config = ConfigDict(extra="allow") | |
| class FilterForm(BaseModel): | |
| """Model for filter request parameters.""" | |
| body: dict | |
| user: Optional[dict] = None | |
| model_config = ConfigDict(extra="allow") |