|
- from __future__ import annotations
-
- import json
- import time
- from typing import Dict, List, Literal, Optional, Union
-
- from fastapi import UploadFile
- from openai.types.chat import (
- ChatCompletionMessageParam,
- ChatCompletionToolChoiceOptionParam,
- ChatCompletionToolParam,
- completion_create_params,
- )
-
- from ..pydantic_v2 import AnyUrl, BaseModel, Field
- from ..utils import MsgType
-
- class OpenAIBaseOutput(BaseModel):
- id: Optional[str] = None
- content: Optional[str] = None
- model: Optional[str] = None
- object: Literal[
- "chat.completion", "chat.completion.chunk"
- ] = "chat.completion.chunk"
- role: Literal["assistant"] = "assistant"
- finish_reason: Optional[str] = None
- created: int = Field(default_factory=lambda: int(time.time()))
- tool_calls: List[Dict] = []
-
- status: Optional[int] = None
- message_type: int = MsgType.TEXT
- message_id: Optional[str] = None
- is_ref: bool = False
-
- class Config:
- extra = "allow"
-
- def model_dump(self) -> dict:
- result = {
- "id": self.id,
- "object": self.object,
- "model": self.model,
- "created": self.created,
- "status": self.status,
- "message_type": self.message_type,
- "message_id": self.message_id,
- "is_ref": self.is_ref,
- **(self.model_extra or {}),
- }
-
- if self.object == "chat.completion.chunk":
- result["choices"] = [
- {
- "delta": {
- "content": self.content,
- "tool_calls": self.tool_calls,
- },
- "role": self.role,
- }
- ]
- elif self.object == "chat.completion":
- result["choices"] = [
- {
- "message": {
- "role": self.role,
- "content": self.content,
- "finish_reason": self.finish_reason,
- "tool_calls": self.tool_calls,
- }
- }
- ]
- return result
-
- def model_dump_json(self):
- return json.dumps(self.model_dump(), ensure_ascii=False)
-
-
- class OpenAIChatOutput(OpenAIBaseOutput):
- ...
|