QChatGPT/pkg/provider/entities.py

53 lines
1.2 KiB
Python
Raw Normal View History

from __future__ import annotations
import typing
import enum
import pydantic
import mirai
2024-01-27 21:50:40 +08:00
class FunctionCall(pydantic.BaseModel):
name: str
2024-01-27 21:50:40 +08:00
arguments: str
2024-01-27 21:50:40 +08:00
class ToolCall(pydantic.BaseModel):
id: str
2024-01-27 21:50:40 +08:00
type: str
2024-01-27 21:50:40 +08:00
function: FunctionCall
class Message(pydantic.BaseModel):
2024-03-03 16:34:59 +08:00
"""消息"""
role: str # user, system, assistant, tool, command, plugin
2024-03-22 16:41:46 +08:00
"""消息的角色"""
2024-01-27 21:50:40 +08:00
name: typing.Optional[str] = None
2024-03-22 16:41:46 +08:00
"""名称,仅函数调用返回时设置"""
content: typing.Optional[str] | typing.Optional[mirai.MessageChain] = None
2024-03-22 16:41:46 +08:00
"""内容"""
function_call: typing.Optional[FunctionCall] = None
2024-03-22 16:41:46 +08:00
"""函数调用不再受支持请使用tool_calls"""
2024-01-27 21:50:40 +08:00
tool_calls: typing.Optional[list[ToolCall]] = None
2024-03-22 16:41:46 +08:00
"""工具调用"""
2024-01-27 21:50:40 +08:00
tool_call_id: typing.Optional[str] = None
def readable_str(self) -> str:
if self.content is not None:
return str(self.content)
elif self.function_call is not None:
return f'{self.function_call.name}({self.function_call.arguments})'
elif self.tool_calls is not None:
return f'调用工具: {self.tool_calls[0].id}'
else:
return '未知消息'