Coverage for src/fastoai/models/generated/thread.py: 75%
28 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.thread import Thread as _Thread
5from openai.types.beta.thread import ToolResources
6from pydantic import field_serializer
7from sqlalchemy.ext.asyncio import AsyncAttrs
8from sqlmodel import Field, Relationship
10from .._metadata import WithMetadata
11from .._types import as_sa_type
12from .._utils import now, random_id_with_prefix
14if TYPE_CHECKING:
15 from .message import Message
16 from .run import Run
17 from .run_step import RunStep
19class Thread(AsyncAttrs, WithMetadata, table=True):
20 id: Annotated[str, Field(primary_key=True, default_factory=random_id_with_prefix('thread_'))]
21 created_at: Annotated[datetime, Field(default_factory=now)]
22 tool_resources: Annotated[ToolResources | None, Field(sa_type=as_sa_type(ToolResources), nullable=True)] = None
24 async def to_openai_model(self) -> _Thread:
25 value = self.model_dump(by_alias=True)
26 value['object'] = 'thread'
27 return _Thread.model_validate(value)
29 @field_serializer('created_at')
30 def serialize_datetime(self, dt: datetime) -> int:
31 return int(dt.timestamp())
32 messages: list['Message'] = Relationship(back_populates='thread')
33 runs: list['Run'] = Relationship(back_populates='thread')
34 steps: list['RunStep'] = Relationship(back_populates='thread')