cubepi.agent
Agentโ
class
Agent(self, *, provider: Provider, model: Model, system_prompt: str = '', tools: list[AgentTool] | None = None, thinking: ThinkingLevel = 'off', convert_to_llm: Callable[[list[Message]], list[Message]] | None = None, transform_context: Callable | None = None, transform_system_prompt: Callable | None = None, after_model_response: Callable | None = None, before_tool_call: Callable | None = None, after_tool_call: Callable | None = None, should_stop_after_turn: Callable | None = None, on_payload: OnPayloadCallback | None = None, on_response: OnResponseCallback | None = None, steering_mode: str = 'one-at-a-time', follow_up_mode: str = 'one-at-a-time', tool_execution: str = 'parallel', checkpointer: Any = None, thread_id: str | None = None, middleware: list[Middleware] | None = None, channel: HitlChannel | None = None)
Attributes
convert_to_llmtransform_contexttransform_system_promptafter_model_responsebefore_tool_callafter_tool_callshould_stop_after_turnon_payloadon_responsetool_executioncheckpointerthread_idstate:AgentStatechannel:HitlChannel | Nonein_flight_hitl_request:HitlRequest | None
Methods
subscribeโ
subscribe(listener: Callable) -> Callable[[], None]
steerโ
steer(message: Message) -> None
cancel_steerโ
cancel_steer(steer_id: str) -> bool
Remove a not-yet-drained steering message by its steer_id.
Returns True if a queued message was removed; False if it was already drained or never queued (best-effort cancel).
follow_upโ
follow_up(message: Message) -> None
abortโ
abort() -> None
wait_for_idleโ
wait_for_idle() -> None
resetโ
reset() -> None
promptโ
prompt(message: str | Message | list[Message]) -> None
resumeโ
resume() -> None
detachโ
detach() -> None
load_pending_hitl_requestโ
load_pending_hitl_request() -> HitlRequest | None
respondโ
respond(*, question_id: str | None = None, answer: Any) -> None
abort_pendingโ
abort_pending(reason: str = 'aborted by host') -> None
Abort a pending HITL request and CLOSE the conversation.
Per spec ยง5.2 "abort closes the conversation" โ no new model call. Two-phase: Phase 1 (no lock) interrupts any in-flight HITL await via the agent signal; Phase 2 (with lock) appends synthetic deny tool_results + a terminal stop_reason="aborted" assistant message and emits AgentAbortedEvent.
AgentStateโ
class
AgentState(self, system_prompt: str = '', model: Model = (lambda: Model(id='unknown', provider='unknown'))(), thinking: ThinkingLevel = 'off', is_streaming: bool = False, streaming_message: Message | None = None, error_message: str | None = None, _tools: list[AgentTool] = list(), _messages: list[Message] = list(), _pending_tool_calls: set[str] = set())
Attributes
system_prompt:strmodel:Modelthinking:ThinkingLevelis_streaming:boolstreaming_message:Message | Noneerror_message:str | Nonetools:list[AgentTool]messages:list[Message]pending_tool_calls:set[str]
run_agent_loopโ
function
run_agent_loop(*, prompts: list[Message], context: AgentContext, provider: Provider, model: Model, convert_to_llm: Callable, emit: Callable, transform_context: Callable | None = None, transform_system_prompt: Callable | None = None, after_model_response: Callable | None = None, before_tool_call: Callable | None = None, after_tool_call: Callable | None = None, should_stop_after_turn: Callable | None = None, get_steering_messages: Callable | None = None, get_follow_up_messages: Callable | None = None, stream_options: StreamOptions | None = None, tool_execution: str = 'parallel', system_prompt: str | None = None) -> list[Message]
run_agent_loop_continueโ
function
run_agent_loop_continue(*, context: AgentContext, provider: Provider, model: Model, convert_to_llm: Callable, emit: Callable, transform_context: Callable | None = None, transform_system_prompt: Callable | None = None, after_model_response: Callable | None = None, before_tool_call: Callable | None = None, after_tool_call: Callable | None = None, should_stop_after_turn: Callable | None = None, get_steering_messages: Callable | None = None, get_follow_up_messages: Callable | None = None, stream_options: StreamOptions | None = None, tool_execution: str = 'parallel', system_prompt: str | None = None) -> list[Message]
execute_tool_callsโ
function
execute_tool_calls(context: AgentContext, assistant_message: AssistantMessage, *, tool_execution: str = 'parallel', before_tool_call: Callable | None = None, after_tool_call: Callable | None = None, signal: asyncio.Event | None = None, emit: Callable) -> ToolCallBatch
AfterToolCallContextโ
class
AfterToolCallContext(self, assistant_message: AssistantMessage, tool_call: ToolCall, args: Any, result: AgentToolResult, is_error: bool, context: AgentContext)
Attributes
assistant_message:AssistantMessagetool_call:ToolCallargs:Anyresult:AgentToolResultis_error:boolcontext:AgentContext
AfterToolCallResultโ
class
Attributes
content:list[Content] | Nonedetails:Anyis_error:bool | Noneterminate:bool | None
AgentContextโ
class
AgentContext(self, system_prompt: str, messages: list[Message], tools: list[AgentTool] | None = None, extra: dict[str, Any] = dict())
Attributes
system_prompt:strmessages:list[Message]tools:list[AgentTool] | Noneextra:dict[str, Any]
AgentEndEventโ
class
Attributes
type:Literal['agent_end']messages:list[Message]
AgentEventโ
attribute
AgentEvent = AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEve...
AgentListenerโ
attribute
AgentListener = Callable[[AgentEvent, asyncio.Event | None], Awaitable[None] | None]
AgentStartEventโ
class
Attributes
type:Literal['agent_start']
AgentToolโ
class
AgentTool(self, name: str, description: str, parameters: type[TParams], execute: Callable[..., Awaitable[AgentToolResult]], label: str = '', execution_mode: Literal['sequential', 'parallel'] | None = None)
Attributes
name:strdescription:strparameters:type[TParams]execute:Callable[..., Awaitable[AgentToolResult]]label:strexecution_mode:Literal['sequential', 'parallel'] | None
Methods
to_definitionโ
to_definition() -> ToolDefinition
AgentToolResultโ
class
Attributes
content:list[Content]details:Anyis_error:bool | Noneterminate:bool | None
BeforeToolCallContextโ
class
BeforeToolCallContext(self, assistant_message: AssistantMessage, tool_call: ToolCall, args: Any, context: AgentContext)
Attributes
assistant_message:AssistantMessagetool_call:ToolCallargs:Anycontext:AgentContext
BeforeToolCallResultโ
class
Attributes
block:boolreason:str | Noneedited_args:dict | Nonedeny_reason:str | Nonehitl_trace:dict | None
MessageEndEventโ
class
Attributes
type:Literal['message_end']message:Message
MessageStartEventโ
class
Attributes
type:Literal['message_start']message:Message
MessageUpdateEventโ
class
Attributes
type:Literal['message_update']message:AssistantMessagestream_event:StreamEvent
ShouldStopAfterTurnContextโ
class
ShouldStopAfterTurnContext(self, message: AssistantMessage, tool_results: list[ToolResultMessage], context: AgentContext, new_messages: list[Message])
Attributes
message:AssistantMessagetool_results:list[ToolResultMessage]context:AgentContextnew_messages:list[Message]
ToolExecutionEndEventโ
class
Attributes
type:Literal['tool_execution_end']tool_call_id:strtool_name:strresult:Anyis_error:boolterminate:boolโ True iff the tool's AgentToolResult.terminate was True (or the after_tool_call hook set terminate=True). Recorders use this to mark the turn as terminated-by-tool without unwrappingresult.blocked_by_hook:boolโ True iff the tool call was blocked by abefore_tool_callhook returningblock=True. Distinguishes hook-blocks from other immediate errors (tool-not-found, arg-validation failure).block_reason:str | Noneโ Whenblocked_by_hookis True, the reason string fromBeforeToolCallResult.reason(orNoneif the hook supplied no reason).
ToolExecutionStartEventโ
class
Attributes
type:Literal['tool_execution_start']tool_call_id:strtool_name:strargs:Any
ToolExecutionUpdateEventโ
class
Attributes
type:Literal['tool_execution_update']tool_call_id:strtool_name:strargs:Anypartial_result:Any
TurnEndEventโ
class
Attributes
type:Literal['turn_end']message:AssistantMessagetool_results:list[ToolResultMessage]
TurnStartEventโ
class
Attributes
type:Literal['turn_start']
emit_eventโ
function
emit_event(emit_fn: Callable, event: object) -> None