54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
from construct import (
|
|
Int8ul,
|
|
Int32ul,
|
|
Int64ul,
|
|
Flag,
|
|
PascalString,
|
|
PrefixedArray,
|
|
Struct as CStruct,
|
|
Enum,
|
|
Switch,
|
|
this,
|
|
)
|
|
|
|
MessageInChat = CStruct(
|
|
"role" / PascalString(Int32ul, "utf8"),
|
|
"content" / PascalString(Int32ul, "utf8"),
|
|
)
|
|
|
|
ChatCompletionRequest = CStruct(
|
|
"messages" / PrefixedArray(Int32ul, MessageInChat),
|
|
)
|
|
|
|
ChatCompletionCancellationRequest = CStruct()
|
|
|
|
RequestKind = Enum(Int8ul, chat=0, cancel=1)
|
|
|
|
Request = CStruct(
|
|
"request_id" / Int64ul,
|
|
"kind" / RequestKind,
|
|
"payload" / Switch(this.kind, {
|
|
"chat": ChatCompletionRequest,
|
|
"cancel": ChatCompletionCancellationRequest,
|
|
}),
|
|
)
|
|
|
|
ResponseChatCompletion = CStruct(
|
|
"piece" / PascalString(Int32ul, "utf8"),
|
|
)
|
|
|
|
ResponseChatCompletionCancellation = CStruct()
|
|
ResponseChatCompletionEnd = CStruct()
|
|
|
|
ResponseKind = Enum(Int8ul, chat=0, cancel=1, end=2)
|
|
|
|
Response = CStruct(
|
|
"request_id" / Int64ul,
|
|
"kind" / ResponseKind,
|
|
"payload" / Switch(this.kind, {
|
|
"chat": ResponseChatCompletion,
|
|
"cancel": ResponseChatCompletionCancellation,
|
|
"end": ResponseChatCompletionEnd
|
|
}),
|
|
)
|