q121/01
0
1from typing import List, Dict, Optional, Union, Literal
2from pydantic import BaseModel, Field
3
4class Message(BaseModel):
5 role: str
6 content: str
7
8class ChatCompletionRequest(BaseModel):
9 model: str
10 messages: List[Message]
11 temperature: float = 0.7
12 top_p: Optional[float] = 1.0
13 n: int = 1
14 stream: bool = False
15 stop: Optional[Union[str, List[str]]] = None
16 max_tokens: Optional[int] = None
17 presence_penalty: Optional[float] = 0.0
18 frequency_penalty: Optional[float] = 0.0
19
20class Choice(BaseModel):
21 index: int
22 message: Message
23 finish_reason: Optional[str] = None
24
25class Usage(BaseModel):
26 prompt_tokens: int = 0
27 completion_tokens: int = 0
28 total_tokens: int = 0
29
30class ChatCompletionResponse(BaseModel):
31 id: str
32 object: Literal["chat.completion"]
33 created: int
34 model: str
35 choices: List[Choice]
36 usage: Usage = Field(default_factory=Usage)
37
38class ErrorResponse(BaseModel):
39 message: str
40 type: str
41 param: Optional[str] = None
42 code: Optional[str] = None
43
44class ModelList(BaseModel):
45 object: str = "list"
46 data: List[Dict]