| |
| |
|
|
| from typing import Dict, List, Optional, Any, Union, Literal |
| from pydantic import BaseModel |
|
|
|
|
| class ImageUrl(BaseModel): |
| """Image URL model for vision content""" |
| url: str |
|
|
|
|
| class ContentPart(BaseModel): |
| """Content part model for OpenAI's new content format""" |
|
|
| type: str |
| text: Optional[str] = None |
| image_url: Optional[ImageUrl] = None |
|
|
|
|
| class Message(BaseModel): |
| """Chat message model""" |
|
|
| role: str |
| content: Optional[Union[str, List[ContentPart]]] = None |
| reasoning_content: Optional[str] = None |
| tool_calls: Optional[List[Dict[str, Any]]] = None |
|
|
|
|
| class OpenAIRequest(BaseModel): |
| """OpenAI-compatible request model""" |
|
|
| model: str |
| messages: List[Message] |
| stream: Optional[bool] = False |
| temperature: Optional[float] = None |
| max_tokens: Optional[int] = None |
| tools: Optional[List[Dict[str, Any]]] = None |
| tool_choice: Optional[Any] = None |
|
|
|
|
| class ModelItem(BaseModel): |
| """Model information item""" |
|
|
| id: str |
| name: str |
| owned_by: str |
|
|
|
|
| class UpstreamRequest(BaseModel): |
| """Upstream service request model""" |
|
|
| stream: bool |
| model: str |
| messages: List[Message] |
| params: Dict[str, Any] = {} |
| features: Dict[str, Any] = {} |
| background_tasks: Optional[Dict[str, bool]] = None |
| chat_id: Optional[str] = None |
| id: Optional[str] = None |
| mcp_servers: Optional[List[str]] = None |
| model_item: Optional[Dict[str, Any]] = {} |
| tools: Optional[List[Dict[str, Any]]] = None |
| variables: Optional[Dict[str, str]] = None |
| model_config = {"protected_namespaces": ()} |
|
|
|
|
| class Delta(BaseModel): |
| """Stream delta model""" |
|
|
| role: Optional[str] = None |
| content: Optional[str] = "" or None |
| reasoning_content: Optional[str] = None |
| tool_calls: Optional[List[Dict[str, Any]]] = None |
|
|
|
|
| class Choice(BaseModel): |
| """Response choice model""" |
|
|
| index: int |
| message: Optional[Message] = None |
| delta: Optional[Delta] = None |
| finish_reason: Optional[str] = None |
|
|
|
|
| class Usage(BaseModel): |
| """Token usage statistics""" |
|
|
| prompt_tokens: int = 0 |
| completion_tokens: int = 0 |
| total_tokens: int = 0 |
|
|
|
|
| class OpenAIResponse(BaseModel): |
| """OpenAI-compatible response model""" |
|
|
| id: str |
| object: str |
| created: int |
| model: str |
| choices: List[Choice] |
| usage: Optional[Usage] = None |
|
|
|
|
| class UpstreamError(BaseModel): |
| """Upstream error model""" |
|
|
| detail: str |
| code: int |
|
|
|
|
| class UpstreamDataInner(BaseModel): |
| """Inner upstream data model""" |
|
|
| error: Optional[UpstreamError] = None |
|
|
|
|
| class UpstreamDataData(BaseModel): |
| """Upstream data content model""" |
|
|
| delta_content: str = "" |
| edit_content: str = "" |
| phase: str = "" |
| done: bool = False |
| usage: Optional[Usage] = None |
| error: Optional[UpstreamError] = None |
| inner: Optional[UpstreamDataInner] = None |
|
|
|
|
| class UpstreamData(BaseModel): |
| """Upstream data model""" |
|
|
| type: str |
| data: UpstreamDataData |
| error: Optional[UpstreamError] = None |
|
|
|
|
| class Model(BaseModel): |
| """Model information for listing""" |
|
|
| id: str |
| object: str = "model" |
| created: int |
| owned_by: str |
|
|
|
|
| class ModelsResponse(BaseModel): |
| """Models list response model""" |
|
|
| object: str = "list" |
| data: List[Model] |
|
|