Documentation
¶
Overview ¶
Package loop provides a provider-agnostic conversation loop for LLM-powered agents. It handles message exchange, tool call dispatch, and streaming — with no HTTP, persistence, or UI concerns.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Callbacks ¶
type Callbacks struct {
OnToken func(token string)
OnThinking func(token string)
OnToolUse func(name string, args map[string]any)
OnDone func(durationMs int64)
}
Callbacks receives streaming events from the conversation loop. All fields are optional — nil callbacks are skipped.
type LLMClient ¶ added in v0.2.0
LLMClient abstracts communication with an LLM backend. Implementations translate to/from provider-specific APIs (e.g. Ollama, OpenAI, Anthropic).
type Request ¶ added in v0.3.0
type Request struct {
Model string
Messages []Message
Tools []tool.ToolDef
Stream bool
Think *bool
Options map[string]any
MaxIterations int // Maximum tool-call loop iterations. Defaults to 20 if 0.
}
Request is a provider-agnostic request to an LLM.
type Response ¶ added in v0.3.0
Response is a provider-agnostic streamed response chunk from an LLM.
type Result ¶
Result is the final output of a conversation loop run.
func Run ¶
func Run(ctx context.Context, client LLMClient, req *Request, tools map[string]tool.ToolDef, toolCtx *tool.ToolContext, cb Callbacks) (*Result, error)
Run executes a conversation loop: sends messages to the LLM, streams the response, executes tool calls, and repeats until no more tool calls are made.
tools and toolCtx may be nil for simple chat without tool support.