class Riffer::Agent
Constants
- INTERRUPT_MAX_STEPS
-
@rbs self.@config: Riffer::Agent::Config?
Attributes
Public so tests can pre-queue responses on Riffer::Providers::Mock.
Public Class Methods
Source
# File lib/riffer/agent.rb, line 15 def self.config @config ||= Riffer::Agent::Config.new end
Source
# File lib/riffer/agent.rb, line 124 def self.from_h( hash, context: nil, session: nil, tool_resolver: Riffer::Agent::Serializer::DEFAULT_TOOL_RESOLVER, tool_runtime: nil ) Riffer::Agent::Serializer.from_h( hash, context: context, session: session, tool_resolver: tool_resolver, tool_runtime: tool_runtime, ) end
Source
# File lib/riffer/agent.rb, line 142 def self.from_json( json, context: nil, session: nil, tool_resolver: Riffer::Agent::Serializer::DEFAULT_TOOL_RESOLVER, tool_runtime: nil ) Riffer::Agent::Serializer.from_json( json, context: context, session: session, tool_resolver: tool_resolver, tool_runtime: tool_runtime, ) end
Source
# File lib/riffer/agent.rb, line 112 def self.generate(prompt = nil, files: nil, context: nil, tags: {}) new(context: context).generate(prompt, files: files, tags: tags) end
Source
# File lib/riffer/agent.rb, line 160 def self.guardrail(phase, with:, **options) config.add_guardrail(phase, klass: with, options: options) end
Source
# File lib/riffer/agent.rb, line 166 def self.guardrails_for(phase) config.guardrails_for(phase) end
Source
# File lib/riffer/agent.rb, line 33 def self.identifier(value = nil) value.nil? ? (config.identifier || Riffer::Helpers::Identifier.for(self)) : (config.identifier = value) end
Source
# File lib/riffer/agent.rb, line 45 def self.instructions(value = nil) value.nil? ? config.instructions : (config.instructions = value) end
Source
# File lib/riffer/agent.rb, line 68 def self.max_steps(*value) # The splat tells a bare read apart from +max_steps nil+ (unlimited). return config.max_steps if value.empty? config.max_steps = value.first end
Source
# File lib/riffer/agent.rb, line 89 def self.mcp_configs config.mcp_configs end
: () -> Array[Hash[Symbol, untyped]]
Source
# File lib/riffer/agent.rb, line 39 def self.model(value = nil) value.nil? ? config.model : (config.model = value) end
Source
# File lib/riffer/agent.rb, line 51 def self.model_options(options = nil) options.nil? ? config.model_options : (config.model_options = options) end
Source
# File lib/riffer/agent.rb, line 187 def initialize(session: nil, context: nil, config: nil) @config = config || self.class.config @context = Riffer::Agent::Context.new(context || {}) @provider_name, @model_name = resolve_provider_and_model @provider = build_provider @context.skills = resolve_skills @structured_output = resolve_structured_output @tools = resolve_tools @tool_runtime = resolve_tool_runtime @instruction_message = build_instruction_message @skills_message = build_skills_message # A caller-supplied session owns its contents (e.g. resumed history), so it # is not seeded. @session = session || Riffer::Agent::Session.new(messages: [@instruction_message, @skills_message].compact) @session.set(Riffer::Agent::Session::Repair.prune_orphans(@session.messages)) end
Source
# File lib/riffer/agent.rb, line 101 def self.skills(&block) if block skills_config = Riffer::Skills::Config.new skills_config.instance_eval(&block) config.skills_config = skills_config end config.skills_config end
Source
# File lib/riffer/agent.rb, line 118 def self.stream(prompt = nil, files: nil, context: nil, tags: {}) new(context: context).stream(prompt, files: files, tags: tags) end
Source
# File lib/riffer/agent.rb, line 57 def self.structured_output(params = nil, &block) if block params = Riffer::Params.new params.instance_eval(&block) end config.structured_output = params if params config.structured_output end
Source
# File lib/riffer/agent.rb, line 95 def self.tool_runtime(value = nil) value.nil? ? config.tool_runtime : (config.tool_runtime = value) end
Source
# File lib/riffer/agent.rb, line 84 def self.use_mcp(tag, progressive: true) config.add_mcp(tag, progressive: progressive) end
progressive exposes mcp_search instead of every tool schema up front.
Source
# File lib/riffer/agent.rb, line 77 def self.uses_tools(value = nil) value.nil? ? config.tools_config : (config.tools_config = value) end
Public Instance Methods
Source
# File lib/riffer/agent.rb, line 217 def generate(prompt = nil, files: nil, tags: {}) Riffer::Agent::Run.generate(agent: self, prompt: prompt, files: files, tags: tags) end
Source
# File lib/riffer/agent.rb, line 211 def identifier config.identifier || self.class.identifier end
Source
# File lib/riffer/agent.rb, line 234 def interrupt!(reason = nil) throw :riffer_interrupt, reason end
Source
# File lib/riffer/agent.rb, line 223 def stream(prompt = nil, files: nil, tags: {}) if @structured_output raise Riffer::ArgumentError, "Structured output is not supported with streaming. Use #generate instead." end Riffer::Agent::Run.stream(agent: self, prompt: prompt, files: files, tags: tags) end
Source
# File lib/riffer/agent.rb, line 240 def to_h Riffer::Agent::Serializer.to_h(agent: self) end
Source
# File lib/riffer/agent.rb, line 248 def to_json(*) Riffer::Agent::Serializer.to_json(agent: self) end
The +*+ absorbs JSONβs generator-state argument so JSON.generate(agent) works.