|
@@ -12,19 +12,38 @@ from pydantic import model_validator
|
|
|
from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
|
|
|
from app.models.message import MessageCreate
|
|
|
from app.schemas.tool.authentication import Authentication
|
|
|
-from typing_extensions import Literal, Required, TypedDict, TypeAlias
|
|
|
|
|
|
+# from typing_extensions import Literal, Required, TypedDict, TypeAlias
|
|
|
|
|
|
-class ChatCompletionAudioParam(TypedDict, total=False):
|
|
|
- format: Required[Literal["wav", "mp3", "flac", "opus", "pcm16"]]
|
|
|
+
|
|
|
+class ChatCompletionAudioParam(BaseModel):
|
|
|
+ # format: Required[Literal["wav", "mp3", "flac", "opus", "pcm16"]]
|
|
|
+ format: str = Field(
|
|
|
+ sa_column=Column(Enum("wav", "mp3", "flac", "opus", "pcm16"), nullable=False)
|
|
|
+ )
|
|
|
"""Specifies the output audio format.
|
|
|
|
|
|
Must be one of `wav`, `mp3`, `flac`, `opus`, or `pcm16`.
|
|
|
"""
|
|
|
|
|
|
- voice: Required[
|
|
|
- Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]
|
|
|
- ]
|
|
|
+ # voice: Required[
|
|
|
+ # Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]
|
|
|
+ # ]
|
|
|
+ voice: str = Field(
|
|
|
+ sa_column=Column(
|
|
|
+ Enum(
|
|
|
+ "alloy",
|
|
|
+ "ash",
|
|
|
+ "ballad",
|
|
|
+ "coral",
|
|
|
+ "echo",
|
|
|
+ "sage",
|
|
|
+ "shimmer",
|
|
|
+ "verse",
|
|
|
+ ),
|
|
|
+ nullable=False,
|
|
|
+ )
|
|
|
+ )
|
|
|
"""The voice the model uses to respond.
|
|
|
|
|
|
Supported voices are `ash`, `ballad`, `coral`, `sage`, and `verse` (also
|
|
@@ -33,18 +52,9 @@ class ChatCompletionAudioParam(TypedDict, total=False):
|
|
|
"""
|
|
|
|
|
|
|
|
|
-ChatCompletionModality: TypeAlias = Literal["text", "audio"]
|
|
|
-
|
|
|
-
|
|
|
-class StatusEnum(Enum):
|
|
|
- cancelled = "cancelled"
|
|
|
- cancelling = "cancelling"
|
|
|
- completed = "completed"
|
|
|
- expired = "expired"
|
|
|
- failed = "failed"
|
|
|
- in_progress = "in_progress"
|
|
|
- queued = "queued"
|
|
|
- requires_action = "requires_action"
|
|
|
+class ChatCompletionModality(Enum):
|
|
|
+ text = "text"
|
|
|
+ audio = "audio"
|
|
|
|
|
|
|
|
|
class RunBase(BaseModel):
|
|
@@ -104,9 +114,11 @@ class RunBase(BaseModel):
|
|
|
usage: Optional[dict] = Field(default=None, sa_column=Column(JSON)) # 调用使用情况
|
|
|
temperature: Optional[float] = Field(default=None) # 温度
|
|
|
top_p: Optional[float] = Field(default=None) # top_p
|
|
|
- # parallel_tool_calls: bool = Field(default=False) # parallel_tool_calls
|
|
|
- # audio: Optional[ChatCompletionAudioParam] = Field(default=None, sa_column=Column(JSON)) # audio
|
|
|
- # modalities: Optional[List[ChatCompletionModality]] = Field(default=None)
|
|
|
+ parallel_tool_calls: bool = Field(default=False) # parallel_tool_calls
|
|
|
+ audio: Optional[ChatCompletionAudioParam] = Field(default=None) # audio
|
|
|
+ modalities: Optional[List[ChatCompletionModality]] = Field(
|
|
|
+ default=None, sa_column=Column(JSON)
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class Run(RunBase, PrimaryKeyMixin, TimeStampMixin, table=True):
|
|
@@ -143,9 +155,11 @@ class RunCreate(BaseModel):
|
|
|
tool_choice: Optional[str] = Field(default=None) # 工具选择
|
|
|
temperature: Optional[float] = Field(default=None) # 温度
|
|
|
top_p: Optional[float] = Field(default=None) # top_p
|
|
|
- # parallel_tool_calls: bool = Field(default=False) # parallel_tool_calls
|
|
|
- # audio: Optional[ChatCompletionAudioParam] = Field(default=None, sa_column=Column(JSON)) # audio
|
|
|
- # modalities: Optional[List[ChatCompletionModality]] = Field(default=None)
|
|
|
+ parallel_tool_calls: bool = Field(default=False) # parallel_tool_calls
|
|
|
+ audio: Optional[ChatCompletionAudioParam] = Field(default=None) # audio
|
|
|
+ modalities: Optional[List[ChatCompletionModality]] = Field(
|
|
|
+ default=None, sa_column=Column(JSON)
|
|
|
+ )
|
|
|
|
|
|
@model_validator(mode="before")
|
|
|
def model_validator(cls, data: Any):
|