Documentation
¶
Index ¶
- func MarshalAgentEvent(event AgentEvent) ([]byte, error)
- func SetDefaultStreamFn(streamFn StreamFn)
- func ToolExecutionModel(ctx context.Context) *ai.Model
- func WithToolExecutionModel(ctx context.Context, model *ai.Model) context.Context
- type AfterToolCallContext
- type AfterToolCallFunc
- type AfterToolCallResult
- type Agent
- func (agent *Agent) Abort()
- func (agent *Agent) AppendMessage(message AgentMessage)
- func (agent *Agent) ClearAllQueues()
- func (agent *Agent) ClearFollowUpQueue()
- func (agent *Agent) ClearSteeringQueue()
- func (agent *Agent) Continue(ctx context.Context) error
- func (agent *Agent) FollowUp(message AgentMessage)
- func (agent *Agent) FollowUpMode() QueueMode
- func (agent *Agent) HasQueuedMessages() bool
- func (agent *Agent) IsIdle() bool
- func (agent *Agent) Prompt(ctx context.Context, input any, images ...*ai.ImageContent) error
- func (agent *Agent) ReplaceLastMessage(replacement AgentMessage) bool
- func (agent *Agent) Reset()
- func (agent *Agent) SetFollowUpMode(mode QueueMode)
- func (agent *Agent) SetMessages(messages AgentMessages)
- func (agent *Agent) SetModel(model *ai.Model)
- func (agent *Agent) SetProviderHooks(payload ai.PayloadHook, headers ai.HeadersHook, response ai.ResponseHook)
- func (agent *Agent) SetRequestResolvers(apiKey GetAPIKeyFunc, auth GetRequestAuthFunc, headers GetModelHeadersFunc)
- func (agent *Agent) SetSteeringMode(mode QueueMode)
- func (agent *Agent) SetStreamFn(stream StreamFn)
- func (agent *Agent) SetStreamSessionID(sessionID string)
- func (agent *Agent) SetSystemPrompt(prompt string)
- func (agent *Agent) SetThinkingLevel(level ThinkingLevel)
- func (agent *Agent) SetToolCallHooks(before BeforeToolCallFunc, after AfterToolCallFunc)
- func (agent *Agent) SetTools(tools []AgentTool)
- func (agent *Agent) SetTransformContext(transform TransformContextFunc)
- func (agent *Agent) SetTransport(transport ai.Transport)
- func (agent *Agent) Signal() context.Context
- func (agent *Agent) State() AgentState
- func (agent *Agent) Steer(message AgentMessage)
- func (agent *Agent) SteeringMode() QueueMode
- func (agent *Agent) StreamFn() StreamFn
- func (agent *Agent) Subscribe(listener EventSink) func()
- func (agent *Agent) WaitForIdle(ctx context.Context) error
- type AgentContext
- type AgentEndEvent
- type AgentEvent
- type AgentEventType
- type AgentLoopConfig
- type AgentLoopTurnUpdate
- type AgentMessage
- type AgentMessages
- type AgentOption
- func WithAPIKeyResolver(resolve GetAPIKeyFunc) AgentOption
- func WithAfterToolCall(hook AfterToolCallFunc) AgentOption
- func WithBeforeToolCall(hook BeforeToolCallFunc) AgentOption
- func WithClock(now func() int64) AgentOption
- func WithConvertToLLM(convert ConvertToLLMFunc) AgentOption
- func WithFollowUpMode(mode QueueMode) AgentOption
- func WithGetFollowUpMessages(getter GetQueuedMessagesFunc) AgentOption
- func WithGetSteeringMessages(getter GetQueuedMessagesFunc) AgentOption
- func WithInitialState(state AgentState) AgentOption
- func WithModelHeadersResolver(resolve GetModelHeadersFunc) AgentOption
- func WithPrepareNextTurn(hook PrepareNextTurnWithoutContextFunc) AgentOption
- func WithPrepareNextTurnContext(hook PrepareNextTurnFunc) AgentOption
- func WithRequestAuthResolver(resolve GetRequestAuthFunc) AgentOption
- func WithShouldStopAfterTurn(hook ShouldStopAfterTurnFunc) AgentOption
- func WithSimpleStreamOptions(streamOptions ai.SimpleStreamOptions) AgentOption
- func WithSteeringMode(mode QueueMode) AgentOption
- func WithToolExecution(mode ToolExecutionMode) AgentOption
- func WithTransformContext(transform TransformContextFunc) AgentOption
- type AgentStartEvent
- type AgentState
- type AgentTool
- type AgentToolFunc
- type AgentToolResult
- type AgentToolSpec
- type AgentToolUpdateCallback
- type BeforeToolCallContext
- type BeforeToolCallFunc
- type BeforeToolCallResult
- type ConvertToLLMFunc
- type EventSink
- type GetAPIKeyFunc
- type GetModelHeadersFunc
- type GetQueuedMessagesFunc
- type GetRequestAuthFunc
- type MessageEndEvent
- type MessageStartEvent
- type MessageUpdateEvent
- type ParallelExecutionPreparer
- type PrepareArgumentsFunc
- type PrepareNextTurnContext
- type PrepareNextTurnFunc
- type PrepareNextTurnWithoutContextFunc
- type QueueMode
- type RequestAuth
- type ShouldStopAfterTurnContext
- type ShouldStopAfterTurnFunc
- type StreamFn
- type ThinkingLevel
- type ToolExecuteFunc
- type ToolExecutionEndEvent
- type ToolExecutionMode
- type ToolExecutionStartEvent
- type ToolExecutionUpdateEvent
- type TransformContextFunc
- type TurnEndEvent
- type TurnStartEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func MarshalAgentEvent ¶
func MarshalAgentEvent(event AgentEvent) ([]byte, error)
func SetDefaultStreamFn ¶ added in v0.1.2
func SetDefaultStreamFn(streamFn StreamFn)
SetDefaultStreamFn configures the fallback used when Agent or the low-level loop is called without a stream function. Passing nil clears the fallback.
func ToolExecutionModel ¶
ToolExecutionModel returns the request model attached by the loop. Tools use it for behavior that depends on model capabilities, matching upstream's per-invocation tool context rather than startup-time configuration.
Types ¶
type AfterToolCallContext ¶
type AfterToolCallContext struct {
AssistantMessage *ai.AssistantMessage
ToolCall *ai.ToolCall
Args any
Result AgentToolResult
IsError bool
Context *AgentContext
}
type AfterToolCallFunc ¶
type AfterToolCallFunc func(context.Context, AfterToolCallContext) (*AfterToolCallResult, error)
AfterToolCallFunc may be invoked concurrently for parallel tool calls.
type AfterToolCallResult ¶
type Agent ¶
type Agent struct {
// contains filtered or unexported fields
}
Agent is the stateful wrapper around RunLoop and RunLoopContinue.
func NewAgent ¶
func NewAgent(stream StreamFn, option ...AgentOption) *Agent
func (*Agent) AppendMessage ¶
func (agent *Agent) AppendMessage(message AgentMessage)
func (*Agent) ClearAllQueues ¶
func (agent *Agent) ClearAllQueues()
func (*Agent) ClearFollowUpQueue ¶
func (agent *Agent) ClearFollowUpQueue()
func (*Agent) ClearSteeringQueue ¶
func (agent *Agent) ClearSteeringQueue()
func (*Agent) FollowUp ¶
func (agent *Agent) FollowUp(message AgentMessage)
func (*Agent) FollowUpMode ¶
func (*Agent) HasQueuedMessages ¶
func (*Agent) Prompt ¶
Prompt starts a run from a string, one AgentMessage, or AgentMessages. String prompts accept optional images and are normalized to upstream content blocks.
func (*Agent) ReplaceLastMessage ¶
func (agent *Agent) ReplaceLastMessage(replacement AgentMessage) bool
func (*Agent) SetFollowUpMode ¶
func (*Agent) SetMessages ¶
func (agent *Agent) SetMessages(messages AgentMessages)
func (*Agent) SetProviderHooks ¶
func (agent *Agent) SetProviderHooks(payload ai.PayloadHook, headers ai.HeadersHook, response ai.ResponseHook)
func (*Agent) SetRequestResolvers ¶
func (agent *Agent) SetRequestResolvers(apiKey GetAPIKeyFunc, auth GetRequestAuthFunc, headers GetModelHeadersFunc)
func (*Agent) SetSteeringMode ¶
func (*Agent) SetStreamFn ¶
func (*Agent) SetStreamSessionID ¶
SetStreamSessionID sets the per-request session id providers use for affinity and prompt-cache keys (upstream Agent's constructor sessionId).
func (*Agent) SetSystemPrompt ¶
func (*Agent) SetThinkingLevel ¶
func (agent *Agent) SetThinkingLevel(level ThinkingLevel)
func (*Agent) SetToolCallHooks ¶
func (agent *Agent) SetToolCallHooks(before BeforeToolCallFunc, after AfterToolCallFunc)
func (*Agent) SetTransformContext ¶
func (agent *Agent) SetTransformContext(transform TransformContextFunc)
func (*Agent) SetTransport ¶
func (*Agent) Signal ¶
Signal returns the active run context, matching upstream's abort signal exposure to extensions. It is nil while the agent is idle.
func (*Agent) State ¶
func (agent *Agent) State() AgentState
func (*Agent) Steer ¶
func (agent *Agent) Steer(message AgentMessage)
func (*Agent) SteeringMode ¶
type AgentContext ¶
type AgentContext struct {
SystemPrompt string
Messages AgentMessages
Tools []AgentTool
}
type AgentEndEvent ¶
type AgentEndEvent struct {
Messages AgentMessages
}
func (AgentEndEvent) MarshalJSON ¶
func (event AgentEndEvent) MarshalJSON() ([]byte, error)
func (AgentEndEvent) Type ¶
func (AgentEndEvent) Type() AgentEventType
type AgentEvent ¶
type AgentEvent interface {
Type() AgentEventType
// contains filtered or unexported methods
}
type AgentEventType ¶
type AgentEventType string
const ( EventAgentStart AgentEventType = "agent_start" EventAgentEnd AgentEventType = "agent_end" EventTurnStart AgentEventType = "turn_start" EventTurnEnd AgentEventType = "turn_end" EventMessageStart AgentEventType = "message_start" EventMessageUpdate AgentEventType = "message_update" EventMessageEnd AgentEventType = "message_end" EventToolExecutionStart AgentEventType = "tool_execution_start" EventToolExecutionUpdate AgentEventType = "tool_execution_update" EventToolExecutionEnd AgentEventType = "tool_execution_end" )
type AgentLoopConfig ¶
type AgentLoopConfig struct {
ai.SimpleStreamOptions
Model *ai.Model
ConvertToLLM ConvertToLLMFunc
TransformContext TransformContextFunc
GetAPIKey GetAPIKeyFunc
GetRequestAuth GetRequestAuthFunc
GetModelHeaders GetModelHeadersFunc
ShouldStopAfterTurn ShouldStopAfterTurnFunc
PrepareNextTurn PrepareNextTurnFunc
GetSteeringMessages GetQueuedMessagesFunc
GetFollowUpMessages GetQueuedMessagesFunc
ToolExecution ToolExecutionMode
BeforeToolCall BeforeToolCallFunc
AfterToolCall AfterToolCallFunc
Now func() int64
}
type AgentLoopTurnUpdate ¶
type AgentLoopTurnUpdate struct {
Context *AgentContext
Model *ai.Model
ThinkingLevel *ThinkingLevel
}
type AgentMessage ¶
type AgentMessage = any
AgentMessage is an LLM message or an application-defined message. Standard messages are ai.Message values; any JSON-marshalable value may be carried so applications retain upstream's custom-message extension point.
type AgentMessages ¶
type AgentMessages []AgentMessage
func RunLoop ¶
func RunLoop( ctx context.Context, prompts AgentMessages, loopContext AgentContext, config AgentLoopConfig, sink EventSink, streamFn StreamFn, ) (AgentMessages, error)
RunLoop starts a loop with prompt messages and returns only messages created by this invocation. The caller-owned context is copied before it is changed.
func RunLoopContinue ¶
func RunLoopContinue( ctx context.Context, loopContext *AgentContext, config AgentLoopConfig, sink EventSink, streamFn StreamFn, ) (AgentMessages, error)
RunLoopContinue resumes a non-assistant transcript without adding a prompt.
type AgentOption ¶
type AgentOption func(*agentOptions)
func WithAPIKeyResolver ¶
func WithAPIKeyResolver(resolve GetAPIKeyFunc) AgentOption
func WithAfterToolCall ¶
func WithAfterToolCall(hook AfterToolCallFunc) AgentOption
func WithBeforeToolCall ¶
func WithBeforeToolCall(hook BeforeToolCallFunc) AgentOption
func WithClock ¶
func WithClock(now func() int64) AgentOption
WithClock supplies JavaScript Date.now-compatible milliseconds. It is useful for deterministic fixture runs and applications with an injected clock.
func WithConvertToLLM ¶
func WithConvertToLLM(convert ConvertToLLMFunc) AgentOption
func WithFollowUpMode ¶
func WithFollowUpMode(mode QueueMode) AgentOption
func WithGetFollowUpMessages ¶
func WithGetFollowUpMessages(getter GetQueuedMessagesFunc) AgentOption
func WithGetSteeringMessages ¶
func WithGetSteeringMessages(getter GetQueuedMessagesFunc) AgentOption
func WithInitialState ¶
func WithInitialState(state AgentState) AgentOption
func WithModelHeadersResolver ¶
func WithModelHeadersResolver(resolve GetModelHeadersFunc) AgentOption
func WithPrepareNextTurn ¶
func WithPrepareNextTurn(hook PrepareNextTurnWithoutContextFunc) AgentOption
func WithPrepareNextTurnContext ¶
func WithPrepareNextTurnContext(hook PrepareNextTurnFunc) AgentOption
func WithRequestAuthResolver ¶
func WithRequestAuthResolver(resolve GetRequestAuthFunc) AgentOption
func WithShouldStopAfterTurn ¶
func WithShouldStopAfterTurn(hook ShouldStopAfterTurnFunc) AgentOption
func WithSimpleStreamOptions ¶
func WithSimpleStreamOptions(streamOptions ai.SimpleStreamOptions) AgentOption
func WithSteeringMode ¶
func WithSteeringMode(mode QueueMode) AgentOption
func WithToolExecution ¶
func WithToolExecution(mode ToolExecutionMode) AgentOption
func WithTransformContext ¶
func WithTransformContext(transform TransformContextFunc) AgentOption
type AgentStartEvent ¶
type AgentStartEvent struct{}
func (AgentStartEvent) MarshalJSON ¶
func (AgentStartEvent) MarshalJSON() ([]byte, error)
func (AgentStartEvent) Type ¶
func (AgentStartEvent) Type() AgentEventType
type AgentState ¶
type AgentState struct {
SystemPrompt string
Model *ai.Model
ThinkingLevel ThinkingLevel
Tools []AgentTool
Messages AgentMessages
IsStreaming bool
StreamingMessage AgentMessage
PendingToolCalls map[string]struct{}
ErrorMessage *string
}
type AgentTool ¶
type AgentTool interface {
Spec() AgentToolSpec
Execute(context.Context, string, any, AgentToolUpdateCallback) (AgentToolResult, error)
}
AgentTool is the execution seam shared by built-in, extension, and MCP tools. Spec returns immutable call metadata for a single loop decision.
type AgentToolFunc ¶
type AgentToolFunc struct {
AgentToolSpec
Run ToolExecuteFunc
}
AgentToolFunc adapts a function to AgentTool without introducing a second implementation-specific interface.
func (AgentToolFunc) Execute ¶
func (tool AgentToolFunc) Execute( ctx context.Context, toolCallID string, params any, onUpdate AgentToolUpdateCallback, ) (AgentToolResult, error)
func (AgentToolFunc) Spec ¶
func (tool AgentToolFunc) Spec() AgentToolSpec
type AgentToolResult ¶
type AgentToolResult struct {
Content ai.ToolResultContent
Details any
Usage *ai.Usage
AddedToolNames *[]string
Terminate *bool
}
func (AgentToolResult) MarshalJSON ¶
func (result AgentToolResult) MarshalJSON() ([]byte, error)
type AgentToolSpec ¶
type AgentToolSpec struct {
Name string
Label string
Description string
Parameters ai.JSONSchema
PrepareArguments PrepareArgumentsFunc
ExecutionMode ToolExecutionMode
}
type AgentToolUpdateCallback ¶
type AgentToolUpdateCallback func(AgentToolResult)
AgentToolUpdateCallback snapshots accepted updates and returns before event listeners settle. It is scoped to Execute; calls after Execute returns, or racing with its return, may be ignored.
type BeforeToolCallContext ¶
type BeforeToolCallContext struct {
AssistantMessage *ai.AssistantMessage
ToolCall *ai.ToolCall
Args any
Context *AgentContext
}
type BeforeToolCallFunc ¶
type BeforeToolCallFunc func(context.Context, BeforeToolCallContext) (*BeforeToolCallResult, error)
type BeforeToolCallResult ¶
type ConvertToLLMFunc ¶
type ConvertToLLMFunc func(context.Context, AgentMessages) (ai.MessageList, error)
type EventSink ¶
type EventSink func(ctx context.Context, event AgentEvent) error
EventSink handles one event. Parallel tool calls and successive tool updates may invoke the same sink concurrently, matching upstream's overlapping event promises, so implementations that mutate shared state must synchronize it.
type GetAPIKeyFunc ¶
type GetModelHeadersFunc ¶
type GetQueuedMessagesFunc ¶
type GetQueuedMessagesFunc func(context.Context) (AgentMessages, error)
type GetRequestAuthFunc ¶
type GetRequestAuthFunc func(context.Context, ai.ProviderID) (*RequestAuth, error)
type MessageEndEvent ¶
type MessageEndEvent struct {
Message AgentMessage
}
func (MessageEndEvent) MarshalJSON ¶
func (event MessageEndEvent) MarshalJSON() ([]byte, error)
func (MessageEndEvent) Type ¶
func (MessageEndEvent) Type() AgentEventType
type MessageStartEvent ¶
type MessageStartEvent struct {
Message AgentMessage
}
func (MessageStartEvent) MarshalJSON ¶
func (event MessageStartEvent) MarshalJSON() ([]byte, error)
func (MessageStartEvent) Type ¶
func (MessageStartEvent) Type() AgentEventType
type MessageUpdateEvent ¶
type MessageUpdateEvent struct {
// Upstream constructs this literal with assistantMessageEvent before message.
AssistantMessageEvent ai.AssistantMessageEvent
Message AgentMessage
}
func (MessageUpdateEvent) MarshalJSON ¶
func (event MessageUpdateEvent) MarshalJSON() ([]byte, error)
func (MessageUpdateEvent) Type ¶
func (MessageUpdateEvent) Type() AgentEventType
type ParallelExecutionPreparer ¶
type ParallelExecutionPreparer interface {
PrepareParallelExecution(context.Context, any) (context.Context, func(), error)
}
ParallelExecutionPreparer reserves invocation-ordered resources before a parallel batch is launched. The loop calls it in tool-call source order.
type PrepareArgumentsFunc ¶
type PrepareNextTurnContext ¶
type PrepareNextTurnContext = ShouldStopAfterTurnContext
type PrepareNextTurnFunc ¶
type PrepareNextTurnFunc func(context.Context, PrepareNextTurnContext) (*AgentLoopTurnUpdate, error)
type PrepareNextTurnWithoutContextFunc ¶
type PrepareNextTurnWithoutContextFunc func(context.Context) (*AgentLoopTurnUpdate, error)
type RequestAuth ¶
type RequestAuth struct {
APIKey *string
Headers ai.ProviderHeaders
Env ai.ProviderEnv
BaseURL *string
}
type ShouldStopAfterTurnContext ¶
type ShouldStopAfterTurnContext struct {
Message *ai.AssistantMessage
ToolResults []*ai.ToolResultMessage
Context *AgentContext
NewMessages AgentMessages
}
type ShouldStopAfterTurnFunc ¶
type ShouldStopAfterTurnFunc func(context.Context, ShouldStopAfterTurnContext) (bool, error)
type ThinkingLevel ¶
type ThinkingLevel = ai.ModelThinkingLevel
const ( ThinkingOff ThinkingLevel = ai.ModelThinkingOff ThinkingMinimal ThinkingLevel = ai.ModelThinkingMinimal ThinkingLow ThinkingLevel = ai.ModelThinkingLow ThinkingMedium ThinkingLevel = ai.ModelThinkingMedium ThinkingHigh ThinkingLevel = ai.ModelThinkingHigh ThinkingXHigh ThinkingLevel = ai.ModelThinkingXHigh ThinkingMax ThinkingLevel = ai.ModelThinkingMax )
type ToolExecuteFunc ¶
type ToolExecuteFunc func( ctx context.Context, toolCallID string, params any, onUpdate AgentToolUpdateCallback, ) (AgentToolResult, error)
type ToolExecutionEndEvent ¶
type ToolExecutionEndEvent struct {
ToolCallID string
ToolName string
Result AgentToolResult
IsError bool
}
func (ToolExecutionEndEvent) MarshalJSON ¶
func (event ToolExecutionEndEvent) MarshalJSON() ([]byte, error)
func (ToolExecutionEndEvent) Type ¶
func (ToolExecutionEndEvent) Type() AgentEventType
type ToolExecutionMode ¶
type ToolExecutionMode string
const ( ToolExecutionSequential ToolExecutionMode = "sequential" ToolExecutionParallel ToolExecutionMode = "parallel" )
type ToolExecutionStartEvent ¶
type ToolExecutionStartEvent struct {
ToolCallID string
ToolName string
Args map[string]any
// contains filtered or unexported fields
}
func NewToolExecutionStartEvent ¶
func NewToolExecutionStartEvent(toolCall *ai.ToolCall) ToolExecutionStartEvent
func (ToolExecutionStartEvent) MarshalJSON ¶
func (event ToolExecutionStartEvent) MarshalJSON() ([]byte, error)
func (ToolExecutionStartEvent) Type ¶
func (ToolExecutionStartEvent) Type() AgentEventType
type ToolExecutionUpdateEvent ¶
type ToolExecutionUpdateEvent struct {
ToolCallID string
ToolName string
Args map[string]any
PartialResult AgentToolResult
// contains filtered or unexported fields
}
func NewToolExecutionUpdateEvent ¶
func NewToolExecutionUpdateEvent(toolCall *ai.ToolCall, partial AgentToolResult) ToolExecutionUpdateEvent
func (ToolExecutionUpdateEvent) MarshalJSON ¶
func (event ToolExecutionUpdateEvent) MarshalJSON() ([]byte, error)
func (ToolExecutionUpdateEvent) Type ¶
func (ToolExecutionUpdateEvent) Type() AgentEventType
type TransformContextFunc ¶
type TransformContextFunc func(context.Context, AgentMessages) (AgentMessages, error)
type TurnEndEvent ¶
type TurnEndEvent struct {
Message AgentMessage
ToolResults []*ai.ToolResultMessage
}
func (TurnEndEvent) MarshalJSON ¶
func (event TurnEndEvent) MarshalJSON() ([]byte, error)
func (TurnEndEvent) Type ¶
func (TurnEndEvent) Type() AgentEventType
type TurnStartEvent ¶
type TurnStartEvent struct{}
func (TurnStartEvent) MarshalJSON ¶
func (TurnStartEvent) MarshalJSON() ([]byte, error)
func (TurnStartEvent) Type ¶
func (TurnStartEvent) Type() AgentEventType