peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
2.83 kB
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