Source code for agentc_core.activity.models.log

import pydantic
import typing
import uuid

from ..models.content import Content
from agentc_core.version import VersionDescriptor


[docs] class Log(pydantic.BaseModel): """A :py:class:`Log` instance represents a single log record that is bound to a part of the application **versioned** according to :py:attr:`catalog_version`. .. attention:: :py:class:`Log` instances are **immutable** and should not be instantiated directly. Only :py:class:`Content` instances should be created directly, and then passed to a :py:class:`Span` instance via the :py:meth:`agentc.span.Span.log` method. """
[docs] class Span(pydantic.BaseModel): model_config = pydantic.ConfigDict(use_enum_values=True, frozen=True) session: str = pydantic.Field( description="The 'session' (a runtime identifier) that this span is associated with.", default_factory=lambda: uuid.uuid4().hex, ) name: list[str] = pydantic.Field( description="The name of the span. This is a list of names that represent the span hierarchy.", examples=[["my_application", "my_agent", "my_task"], ["my_application", "my_agent"]], )
model_config = pydantic.ConfigDict(use_enum_values=True, frozen=True) identifier: str = pydantic.Field( description="A unique identifier for this record. This field is typically a UUID.", default_factory=lambda: uuid.uuid4().hex, ) span: "Log.Span" = pydantic.Field( description="The span (i.e., a list of names and a session ID) that this record is associated with." ) timestamp: pydantic.AwareDatetime = pydantic.Field( description="Timestamp of the generated record. This field must have a timezone attached as well.", examples=["2024-08-26T12:02:59.500Z", "2024-08-26T12:02:59.500+00:00"], ) content: Content = pydantic.Field( description="The content of the record. This should be as close to the producer as possible.", discriminator="kind", ) annotations: typing.Optional[typing.Dict] = pydantic.Field( description="Additional annotations that can be added to the message.", default=None ) catalog_version: VersionDescriptor = pydantic.Field( description="A unique identifier that defines a catalog version / snapshot / commit." )