Source code for rath.flow.agent_param
"""AgentParam: system :class:`~rath.session.session.Session` plus LLM prefs.
See :class:`~rath.llm.Provider`.
"""
from __future__ import annotations
from dataclasses import dataclass
from types import MappingProxyType
from typing import Any, Mapping
from rath.llm.provider import Provider
from rath.memory.abc import MemoryStore
from rath.session.session import Session
def _indent_child_module_repr(body: str, spaces: int = 2) -> str:
"""Indent a child ``repr`` like ``torch.nn.Module`` (first line unindented)."""
lines = body.split("\n")
if len(lines) <= 1:
return body
first, *rest = lines
pad = " " * spaces
return first + "\n" + "\n".join(pad + line for line in rest)
[docs]
@dataclass(slots=True)
class AgentParam:
"""System session plus LLM options for ``run_session_loop``."""
agent_session: Session
provider: Provider
memory: MemoryStore | None = None
@property
def data(self) -> Mapping[str, Any]:
"""Read-only mapping of underlying ``agent_session``, ``provider`` and ``memory``."""
return MappingProxyType(
{
"agent_session": self.agent_session,
"provider": self.provider,
"memory": self.memory,
}
)
def __repr__(self) -> str:
name = type(self).__name__
sess_body = repr(self.agent_session)
sess_body = _indent_child_module_repr(sess_body, 2)
lines = [
f"{name}(",
f" (agent_session): {sess_body}",
f" (provider): {self.provider!s}",
]
if self.memory is not None:
mem_body = _indent_child_module_repr(repr(self.memory), 2)
lines.append(f" (memory): {mem_body}")
lines.append(")")
return "\n".join(lines)
__str__ = __repr__
__all__ = ["AgentParam", "Provider"]