Spaces:
Paused
Paused
| from typing import Any, Dict, List, Optional, Union | |
| from pydantic import BaseModel | |
| from config import MODEL_NAME | |
| class FunctionCall(BaseModel): | |
| name: str | |
| arguments: str | |
| class ToolCall(BaseModel): | |
| id: str | |
| type: str = "function" | |
| function: FunctionCall | |
| class ImageURL(BaseModel): | |
| url: str | |
| # OpenAI compatible: detail can be 'auto' | 'low' | 'high' | |
| detail: Optional[str] = None | |
| class AudioInput(BaseModel): | |
| # Allow either url or data | |
| url: Optional[str] = None | |
| data: Optional[str] = None # Base64 or data:URL | |
| format: Optional[str] = None # e.g., 'wav', 'mp3' | |
| mime_type: Optional[str] = None # e.g., 'audio/wav' | |
| class VideoInput(BaseModel): | |
| url: Optional[str] = None | |
| data: Optional[str] = None | |
| format: Optional[str] = None | |
| mime_type: Optional[str] = None | |
| class URLRef(BaseModel): | |
| url: str | |
| class MessageContentItem(BaseModel): | |
| type: str | |
| text: Optional[str] = None | |
| image_url: Optional[ImageURL] = None | |
| # Added support for input_image (OpenAI compatible) | |
| input_image: Optional[ImageURL] = None | |
| # Extended support for general file_url/media_url and direct url field, maintaining OpenAI style | |
| file_url: Optional[URLRef] = None | |
| media_url: Optional[URLRef] = None | |
| url: Optional[str] = None | |
| # Extended support for input_audio/input_video | |
| input_audio: Optional[AudioInput] = None | |
| input_video: Optional[VideoInput] = None | |
| class Message(BaseModel): | |
| role: str | |
| content: Union[str, List[MessageContentItem], None] = None | |
| name: Optional[str] = None | |
| tool_calls: Optional[List[ToolCall]] = None | |
| tool_call_id: Optional[str] = None | |
| # Compatible with third-party clients passing attachments at message level (non-standard but common) | |
| attachments: Optional[List[Any]] = None | |
| images: Optional[List[Any]] = None | |
| files: Optional[List[Any]] = None | |
| media: Optional[List[Any]] = None | |
| class ChatCompletionRequest(BaseModel): | |
| messages: List[Message] | |
| model: Optional[str] = MODEL_NAME | |
| stream: Optional[bool] = False | |
| temperature: Optional[float] = None | |
| max_output_tokens: Optional[int] = None | |
| stop: Optional[Union[str, List[str]]] = None | |
| top_p: Optional[float] = None | |
| reasoning_effort: Optional[Union[str, int]] = None | |
| tools: Optional[List[Dict[str, Any]]] = None | |
| tool_choice: Optional[Union[str, Dict[str, Any]]] = None | |
| seed: Optional[int] = None | |
| response_format: Optional[Union[str, Dict[str, Any]]] = None | |
| # Compatible with third-party clients' top-level attachments field (non-standard OpenAI, but common) | |
| attachments: Optional[List[Any]] = None | |
| # MCP per-request endpoint (optional), used for tool calling fallback to MCP service | |
| mcp_endpoint: Optional[str] = None | |
| parallel_tool_calls: Optional[bool] = True | |