62 lines
3.3 KiB
Python
62 lines
3.3 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import ConfigDict, Field
|
|
|
|
from letta.helpers.datetime_helpers import get_utc_time
|
|
from letta.schemas.enums import PrimitiveType, RunStatus
|
|
from letta.schemas.job import LettaRequestConfig
|
|
from letta.schemas.letta_base import LettaBase
|
|
from letta.schemas.letta_stop_reason import StopReasonType
|
|
|
|
|
|
class RunBase(LettaBase):
|
|
__id_prefix__ = PrimitiveType.RUN.value
|
|
|
|
|
|
class Run(RunBase):
|
|
"""Representation of a run - a conversation or processing session for an agent. Runs track when agents process messages and maintain the relationship between agents, steps, and messages."""
|
|
|
|
id: str = RunBase.generate_id_field()
|
|
|
|
# Core run fields
|
|
status: RunStatus = Field(default=RunStatus.created, description="The current status of the run.")
|
|
created_at: datetime = Field(default_factory=get_utc_time, description="The timestamp when the run was created.")
|
|
completed_at: Optional[datetime] = Field(None, description="The timestamp when the run was completed.")
|
|
|
|
# Agent relationship
|
|
agent_id: str = Field(..., description="The unique identifier of the agent associated with the run.")
|
|
|
|
# Conversation relationship
|
|
conversation_id: Optional[str] = Field(None, description="The unique identifier of the conversation associated with the run.")
|
|
|
|
# Template fields
|
|
base_template_id: Optional[str] = Field(None, description="The base template ID that the run belongs to.")
|
|
|
|
# Run configuration
|
|
background: Optional[bool] = Field(None, description="Whether the run was created in background mode.")
|
|
metadata: Optional[dict] = Field(None, validation_alias="metadata_", description="Additional metadata for the run.")
|
|
request_config: Optional[LettaRequestConfig] = Field(None, description="The request configuration for the run.")
|
|
stop_reason: Optional[StopReasonType] = Field(None, description="The reason why the run was stopped.")
|
|
|
|
# Callback configuration
|
|
callback_url: Optional[str] = Field(None, description="If set, POST to this URL when the run completes.")
|
|
callback_sent_at: Optional[datetime] = Field(None, description="Timestamp when the callback was last attempted.")
|
|
callback_status_code: Optional[int] = Field(None, description="HTTP status code returned by the callback endpoint.")
|
|
callback_error: Optional[str] = Field(None, description="Optional error message from attempting to POST the callback endpoint.")
|
|
|
|
# Timing metrics (in nanoseconds for precision)
|
|
ttft_ns: Optional[int] = Field(None, description="Time to first token for a run in nanoseconds")
|
|
total_duration_ns: Optional[int] = Field(None, description="Total run duration in nanoseconds")
|
|
|
|
|
|
class RunUpdate(RunBase):
|
|
"""Update model for Run."""
|
|
|
|
status: Optional[RunStatus] = Field(None, description="The status of the run.")
|
|
completed_at: Optional[datetime] = Field(None, description="The timestamp when the run was completed.")
|
|
stop_reason: Optional[StopReasonType] = Field(None, description="The reason why the run was stopped.")
|
|
metadata: Optional[dict] = Field(None, validation_alias="metadata_", description="Additional metadata for the run.")
|
|
total_duration_ns: Optional[int] = Field(None, description="Total run duration in nanoseconds")
|
|
model_config = ConfigDict(extra="ignore") # Ignores extra fields
|