2
2
Adapted from FastChat's OpenAI protocol: https://github.com/lm-sys/FastChat/blob/main/fastchat/protocol/openai_api_protocol.py
3
3
"""
4
4
5
- from typing import Literal , Optional , List , Dict , Any , Union
6
- from pydantic import BaseModel , Field
7
- import shortuuid
8
5
import time
6
+ from typing import Any , Dict , List , Literal , Optional , Union
7
+
8
+ import shortuuid
9
+ from pydantic import BaseModel , Field
9
10
10
11
11
12
class ChatMessage (BaseModel ):
12
13
role : str
13
14
content : str
14
15
name : str | None = None
15
16
17
+
16
18
class ChatCompletionRequest (BaseModel ):
17
19
model : str
18
20
messages : list [ChatMessage ]
@@ -35,16 +37,19 @@ class ChatCompletionRequest(BaseModel):
35
37
# logit_bias
36
38
# user: Optional[str] = None
37
39
40
+
38
41
class UsageInfo (BaseModel ):
39
42
prompt_tokens : int = 0
40
43
completion_tokens : int | None = 0
41
44
total_tokens : int = 0
42
45
46
+
43
47
class ChatCompletionResponseChoice (BaseModel ):
44
48
index : int
45
49
message : ChatMessage
46
50
finish_reason : Literal ["stop" , "length" ] | None = None
47
51
52
+
48
53
class ChatCompletionResponse (BaseModel ):
49
54
id : str = Field (default_factory = lambda : f"chatcmpl-{ shortuuid .random ()} " )
50
55
object : str = "chat.completion"
@@ -53,21 +58,25 @@ class ChatCompletionResponse(BaseModel):
53
58
# TODO: Implement support for the following fields
54
59
usage : UsageInfo | None = None
55
60
61
+
56
62
class DeltaMessage (BaseModel ):
57
63
role : str | None = None
58
64
content : str | None = None
59
65
66
+
60
67
class ChatCompletionResponseStreamChoice (BaseModel ):
61
68
index : int
62
69
delta : DeltaMessage
63
70
finish_reason : Literal ["stop" , "length" ] | None = None
64
71
72
+
65
73
class ChatCompletionStreamResponse (BaseModel ):
66
74
id : str = Field (default_factory = lambda : f"chatcmpl-{ shortuuid .random ()} " )
67
75
object : str = "chat.completion.chunk"
68
76
created : int = Field (default_factory = lambda : int (time .time ()))
69
77
choices : list [ChatCompletionResponseStreamChoice ]
70
78
79
+
71
80
class CompletionRequest (BaseModel ):
72
81
model : str
73
82
prompt : str | list [str ]
@@ -91,35 +100,41 @@ class CompletionRequest(BaseModel):
91
100
# logit_bias
92
101
# user: Optional[str] = None
93
102
103
+
94
104
class CompletionResponseChoice (BaseModel ):
95
105
index : int
96
106
text : str
97
107
logprobs : int | None = None
98
108
finish_reason : Literal ["stop" , "length" ] | None = None
99
109
110
+
100
111
class CompletionResponse (BaseModel ):
101
112
id : str = Field (default_factory = lambda : f"cmpl-{ shortuuid .random ()} " )
102
113
object : str = "text_completion"
103
114
created : int = Field (default_factory = lambda : int (time .time ()))
104
115
choices : list [CompletionResponseChoice ]
105
116
usage : UsageInfo
106
117
118
+
107
119
class CompletionResponseStreamChoice (BaseModel ):
108
120
index : int
109
121
text : str
110
122
finish_reason : Optional [Literal ["stop" , "length" ]] = None
111
123
124
+
112
125
class CompletionStreamResponse (BaseModel ):
113
126
id : str = Field (default_factory = lambda : f"cmpl-{ shortuuid .random ()} " )
114
127
object : str = "text_completion"
115
128
created : int = Field (default_factory = lambda : int (time .time ()))
116
129
choices : List [CompletionResponseStreamChoice ]
117
130
131
+
118
132
class EmbeddingsRequest (BaseModel ):
119
133
model : Optional [str ] = None
120
134
input : Union [str , List [Any ]]
121
135
user : Optional [str ] = None
122
136
137
+
123
138
class EmbeddingsResponse (BaseModel ):
124
139
object : str = "list"
125
140
data : List [Dict [str , Any ]]
0 commit comments