Source code for acodex.types.events
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Literal, TypeAlias
from acodex.types.items import ThreadItem
[docs]
@dataclass(frozen=True, slots=True)
class ThreadStartedEvent:
"""Emitted when a new thread is started as the first event."""
thread_id: str
"""Identifier of the new thread. This can be used to resume the thread later."""
type: Literal["thread.started"] = field(default="thread.started", init=False)
"""Discriminator with value ``"thread.started"``."""
[docs]
@dataclass(frozen=True, slots=True)
class TurnStartedEvent:
"""Emitted when a turn is started by sending a new prompt to the model.
A turn encompasses all events that happen while the agent is processing the prompt.
"""
type: Literal["turn.started"] = field(default="turn.started", init=False)
"""Discriminator with value ``"turn.started"``."""
[docs]
@dataclass(frozen=True, slots=True)
class Usage:
"""Describes token usage for a completed turn."""
input_tokens: int
"""Number of input tokens used during the turn."""
cached_input_tokens: int
"""Number of cached input tokens used during the turn."""
output_tokens: int
"""Number of output tokens used during the turn."""
[docs]
@dataclass(frozen=True, slots=True)
class TurnCompletedEvent:
"""Emitted when a turn is completed.
This is typically emitted right after the assistant response.
"""
usage: Usage
"""Token usage for the completed turn."""
type: Literal["turn.completed"] = field(default="turn.completed", init=False)
"""Discriminator with value ``"turn.completed"``."""
[docs]
@dataclass(frozen=True, slots=True)
class ThreadError:
"""Fatal error payload for a failed turn."""
message: str
"""Error message describing the failure."""
[docs]
@dataclass(frozen=True, slots=True)
class TurnFailedEvent:
"""Indicates that a turn failed with an error."""
error: ThreadError
"""Fatal error payload for the failed turn."""
type: Literal["turn.failed"] = field(default="turn.failed", init=False)
"""Discriminator with value ``"turn.failed"``."""
[docs]
@dataclass(frozen=True, slots=True)
class ItemStartedEvent:
"""Emitted when a new item is added to the thread.
Typically, the item is initially in progress.
"""
item: ThreadItem
"""Thread item payload that was started."""
type: Literal["item.started"] = field(default="item.started", init=False)
"""Discriminator with value ``"item.started"``."""
[docs]
@dataclass(frozen=True, slots=True)
class ItemUpdatedEvent:
"""Emitted when an item is updated."""
item: ThreadItem
"""Updated thread item payload."""
type: Literal["item.updated"] = field(default="item.updated", init=False)
"""Discriminator with value ``"item.updated"``."""
[docs]
@dataclass(frozen=True, slots=True)
class ItemCompletedEvent:
"""Signals that an item has reached a terminal state.
The terminal state may be success or failure depending on the item payload.
"""
item: ThreadItem
"""Thread item payload in a terminal state."""
type: Literal["item.completed"] = field(default="item.completed", init=False)
"""Discriminator with value ``"item.completed"``."""
[docs]
@dataclass(frozen=True, slots=True)
class ThreadErrorEvent:
"""Represents an unrecoverable error emitted directly by the event stream."""
message: str
"""Error message emitted by the stream."""
type: Literal["error"] = field(default="error", init=False)
"""Discriminator with value ``"error"``."""
ThreadEvent: TypeAlias = (
ThreadStartedEvent
| TurnStartedEvent
| TurnCompletedEvent
| TurnFailedEvent
| ItemStartedEvent
| ItemUpdatedEvent
| ItemCompletedEvent
| ThreadErrorEvent
)