Source code for steamship.agents.logging

from pydantic.fields import Field
from pydantic.main import BaseModel


[docs] class AgentLogging: """These keys are for use in the `extra` field of agent logging operations. #noqa: RST203 For now, they are manually applied at the time of logging. In the future, the AgentContext may provide a logger which fills some automatically. For example: logging.info("I should use tool MakeAPicture", extra={ AgentLogging.AGENT_NAME: self.name, AgentLogging.IS_AGENT_MESSAGE: True, AgentLogging.MESSAGE_TYPE: AgentLogging.THOUGHT }) # noqa: RST203 This provides: * Structured additions to Fluent/Elastic that help with internal debugging. * Helpful output in development mode * [Eventual] User-visible logs * [Eventual] Visualiations about tool execution and ReAct reasoning """ AGENT_NAME = "agent_name" TOOL_NAME = "tool_name" LLM_NAME = "llm_name" IS_MESSAGE = "is_message" MESSAGE_TYPE = "agent_message_type" THOUGHT = "thought" OBSERVATION = "observation" ACTION = "action" MESSAGE = "message" PROMPT = "prompt" MESSAGE_AUTHOR = "message_author" USER = "user" AGENT = "agent" TOOL = "tool" SYSTEM = "system" LLM = "llm"
LOGGING_FORMAT = { "level": "%(levelname)s", "host": "%(hostname)s", "where": "%(module)s.%(filename)s.%(funcName)s:%(lineno)s", "type": "%(levelname)s", "stack_trace": "%(exc_text)s", "message_type": "%(message_type)s", "component_name": "%(component_name)s", AgentLogging.IS_MESSAGE: f"%({AgentLogging.IS_MESSAGE})s", # b doesn't work. Unsure how to make a bool AgentLogging.AGENT_NAME: f"%({AgentLogging.AGENT_NAME})s", AgentLogging.MESSAGE_AUTHOR: f"%({AgentLogging.MESSAGE_AUTHOR})s", AgentLogging.MESSAGE_TYPE: f"%({AgentLogging.MESSAGE_TYPE})s", AgentLogging.TOOL_NAME: f"%({AgentLogging.TOOL_NAME})s", }
[docs] class StreamingOpts(BaseModel): """Controls what status messages for a given AgentService invocation should be included in the resultant stream.""" include_agent_messages: bool = Field(default=True) """Whether or not to include agent-generated messages in the ChatHistory stream. Agent messages are any logging messages with: `AgentLogging.MESSAGE_AUTHOR == AgentLogging.AGENT`. These typically are status messages logged in either the `AgentService` or the `Agent` code. NOTE: Agent status messages include "request complete" signal messages for streaming use cases. Disabling these messages will impact streaming generator function. """ include_llm_messages: bool = Field(default=True) """Whether or not to include LLM-generated messages in the ChatHistory stream. LLM messages are any logging messages with: `AgentLogging.MESSAGE_AUTHOR == AgentLogging.LLM`. These typically are status messages logged in LLM code (ex: `ChatOpenAI`). """ include_tool_messages: bool = Field(default=True) """Whether or not to include Tool-generated messages in the ChatHistory stream. LLM messages are any logging messages with: `AgentLogging.MESSAGE_AUTHOR == AgentLogging.TOOL`. These typically are status messages logged in Tool code (ex: `GeneratorTool`). """ @property def stream_intermediate_events(self): return ( self.include_llm_messages or self.include_agent_messages or self.include_tool_messages )