llm.py 886 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from typing import List, Optional, Literal
  2. from pydantic import BaseModel, Field
  3. Role = Literal["system", "user", "assistant"]
  4. class ChatMessage(BaseModel):
  5. role: Role
  6. content: str
  7. class ChatRequest(BaseModel):
  8. messages: List[ChatMessage] = Field(min_length=1)
  9. model: Optional[str] = None
  10. temperature: Optional[float] = Field(default=None, ge=0, le=2)
  11. max_tokens: Optional[int] = Field(default=None, gt=0)
  12. class Usage(BaseModel):
  13. prompt_tokens: int
  14. completion_tokens: int
  15. total_tokens: int
  16. class ChatResponse(BaseModel):
  17. content: str
  18. model: Optional[str] = None
  19. usage: Optional[Usage] = None
  20. class TextToSpeechResponse(BaseModel):
  21. audio_url: str
  22. class TextToSpeechRequest(BaseModel):
  23. pitch: float = 1
  24. rate: float = 1
  25. filename: str
  26. text: str
  27. model: Optional[str] = None
  28. format: Optional[str] = None