Getway / app /models.py
aiqknow's picture
Upload 36 files
33f435b verified
from pydantic import BaseModel, Field, field_validator
from typing import Optional, List, Literal
import re
class ChatMessage(BaseModel):
role: str
content: str
class ChatCompletionRequest(BaseModel):
model: str
messages: List[ChatMessage]
stream: bool = False
temperature: Optional[float] = 1.0
top_p: Optional[float] = 1.0
new_chat: Optional[bool] = False
session_id: Optional[str] = None
@field_validator("session_id")
@classmethod
def validate_session_id(cls, v):
if v is None:
return None
v = v.strip().lower()
if not re.match(r'^[a-f0-9]{8,32}$', v):
raise ValueError("session_id must be a hexadecimal string between 8-32 characters")
return v
class PromptRequest(BaseModel):
prompt: str
system_prompt: Optional[str] = None
timeout: int = Field(default=300, ge=30, le=600)
stream: bool = False
new_chat: bool = Field(default=False, description="Force start a new chat")
provider: Literal["chatgpt", "gemini", "grok"] = Field(default="chatgpt", description="AI Provider to use")
@field_validator("prompt")
@classmethod
def validate_prompt_length(cls, v):
if not v.strip():
raise ValueError("Prompt cannot be empty")
if len(v) > 32000:
raise ValueError("Prompt exceeds maximum length")
return v.strip()
class Message(BaseModel):
role: str
content: str
class Usage(BaseModel):
prompt_tokens: int
completion_tokens: int
total_tokens: int
class Choice(BaseModel):
index: int
message: Message
finish_reason: str
class APIResponse(BaseModel):
id: str
object: str = "chat.completion"
created: int
model: str
choices: List[Choice]
usage: Usage
class SimplePromptRequest(BaseModel):
prompt: str
class SimpleAPIResponse(BaseModel):
status: str = "success"
text: str