package flow // Options configures a Flow. type Options struct { // TriggerTopic is the broker topic that triggers this flow. TriggerTopic string // Prompt is a Go template string. {{.Data}} is the event payload. Prompt string // SystemPrompt is the system instruction for the LLM. SystemPrompt string // Provider is the AI provider name (e.g. "anthropic", "openai"). Provider string // APIKey for the AI provider. APIKey string // Model overrides the provider's default model. Model string // BaseURL overrides the provider's default base URL. BaseURL string // HistoryLimit is the max messages per flow execution. HistoryLimit int // OnResult is called after each execution with the result. OnResult func(Result) // Agent, if set, names a registered agent the flow hands each event // to (over RPC). The flow triggers; the agent reasons. When empty, // the flow runs a single augmented-LLM step itself. Agent string } // Option applies a configuration to Options. type Option func(*Options) // Trigger sets the broker topic that triggers this flow. func Trigger(topic string) Option { return func(o *Options) { o.TriggerTopic = topic } } // Prompt sets the prompt template. Use {{.Data}} for the event payload. func Prompt(p string) Option { return func(o *Options) { o.Prompt = p } } // SystemPrompt sets the system instruction for the LLM. func SystemPrompt(p string) Option { return func(o *Options) { o.SystemPrompt = p } } // Provider sets the AI provider name. func Provider(name string) Option { return func(o *Options) { o.Provider = name } } // APIKey sets the API key for the AI provider. func APIKey(key string) Option { return func(o *Options) { o.APIKey = key } } // Model sets the model name. func Model(name string) Option { return func(o *Options) { o.Model = name } } // BaseURL sets the provider base URL. func BaseURL(url string) Option { return func(o *Options) { o.BaseURL = url } } // HistoryLimit sets the max messages per execution. func HistoryLimit(n int) Option { return func(o *Options) { o.HistoryLimit = n } } // OnResult sets a callback for each execution result. func OnResult(fn func(Result)) Option { return func(o *Options) { o.OnResult = fn } } // Agent makes the flow hand each event to a named registered agent over // RPC instead of running its own LLM step. The flow triggers; the agent // reasons (with its plan, delegate, memory, and guardrails). func Agent(name string) Option { return func(o *Options) { o.Agent = name } }