59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
"""Типы для работы с GigaChat API."""
|
|
from typing import List, Literal, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class GigaChatMessage(BaseModel):
|
|
"""Сообщение для GigaChat API."""
|
|
|
|
role: Literal["system", "user", "assistant"]
|
|
content: str
|
|
|
|
|
|
class GigaChatRequest(BaseModel):
|
|
"""Запрос к GigaChat API."""
|
|
|
|
model: str = Field(default="GigaChat-2", description="Модель GigaChat")
|
|
messages: List[GigaChatMessage] = Field(..., description="История сообщений")
|
|
temperature: float = Field(default=0.7, ge=0.0, le=2.0)
|
|
max_tokens: int = Field(default=2000, ge=1, le=8192)
|
|
top_p: float = Field(default=0.9, ge=0.0, le=1.0)
|
|
stream: bool = Field(default=False)
|
|
|
|
|
|
class GigaChatChoice(BaseModel):
|
|
"""Вариант ответа от GigaChat."""
|
|
|
|
message: GigaChatMessage
|
|
index: int
|
|
finish_reason: Optional[str] = None
|
|
|
|
|
|
class GigaChatUsage(BaseModel):
|
|
"""Использование токенов."""
|
|
|
|
prompt_tokens: int
|
|
completion_tokens: int
|
|
total_tokens: int
|
|
|
|
|
|
class GigaChatResponse(BaseModel):
|
|
"""Ответ от GigaChat API."""
|
|
|
|
id: Optional[str] = None
|
|
object: Optional[str] = None
|
|
created: Optional[int] = None
|
|
model: str
|
|
choices: List[GigaChatChoice]
|
|
usage: GigaChatUsage
|
|
|
|
|
|
class GigaChatTokenResponse(BaseModel):
|
|
"""Ответ на запрос токена."""
|
|
|
|
access_token: str
|
|
expires_at: int
|
|
token_type: str = "Bearer"
|
|
|