Coverage for src/fastoai/models/generated/assistant.py: 92%
38 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-06 09:34 +0800
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-06 09:34 +0800
1from datetime import datetime
2from typing import TYPE_CHECKING, Annotated
4from openai.types.beta.assistant import Assistant as _Assistant
5from openai.types.beta.assistant import ToolResources
6from openai.types.beta.assistant_response_format_option import (
7 AssistantResponseFormatOption,
8)
9from openai.types.beta.assistant_tool import AssistantTool
10from pydantic import field_serializer
11from sqlalchemy.ext.asyncio import AsyncAttrs
12from sqlmodel import Field, Relationship
14from .._metadata import WithMetadata
15from .._types import as_sa_type
16from .._utils import now, random_id_with_prefix
18if TYPE_CHECKING:
19 from .message import Message
20 from .run import Run
21 from .run_step import RunStep
23class Assistant(AsyncAttrs, WithMetadata, table=True):
24 id: Annotated[str, Field(primary_key=True, default_factory=random_id_with_prefix('asst_'))]
25 created_at: Annotated[datetime, Field(default_factory=now)]
26 description: str | None = None
27 instructions: str | None = None
28 model: str
29 name: str | None = None
30 tools: Annotated[list[AssistantTool], Field(default_factory=list, sa_type=as_sa_type(list[AssistantTool]))]
31 response_format: Annotated[AssistantResponseFormatOption | None, Field(sa_type=as_sa_type(AssistantResponseFormatOption), nullable=True)] = None
32 temperature: float | None = None
33 tool_resources: Annotated[ToolResources | None, Field(sa_type=as_sa_type(ToolResources), nullable=True)] = None
34 top_p: float | None = None
36 async def to_openai_model(self) -> _Assistant:
37 value = self.model_dump(by_alias=True)
38 value['object'] = 'assistant'
39 return _Assistant.model_validate(value)
41 @field_serializer('created_at')
42 def serialize_datetime(self, dt: datetime) -> int:
43 return int(dt.timestamp())
44 messages: list['Message'] = Relationship(back_populates='assistant')
45 runs: list['Run'] = Relationship(back_populates='assistant')
46 steps: list['RunStep'] = Relationship(back_populates='assistant')