class Riffer::Providers::Mock
Mock provider for mocking LLM responses in tests.
No external gems required.
Attributes
Array of recorded method calls for assertions.
Public Class Methods
Source
# File lib/riffer/providers/mock.rb, line 45 def initialize(**options) @responses = (options[:responses] || []).map { |r| normalize_response(r) } @current_index = 0 @calls = [] @stubbed_responses = [] end
Initializes the mock provider.
responses: accepts an array of response hashes in the same shape stub_response takes — raw tool_calls: hashes are normalised to Riffer::Messages::Assistant::ToolCall instances. This is the canonical way to pre-configure canned LLM responses on an agent via +provider_options responses: […]+.
Riffer::Providers::Mock.new(responses: [ {content: "", tool_calls: [{name: "tool_a", arguments: "{}"}]}, {content: "Final answer"} ])
Source
# File lib/riffer/providers/mock.rb, line 22 def self.skills_adapter(model = nil) return Riffer::Skills::XmlAdapter if model&.include?("claude") Riffer::Skills::MarkdownAdapter end
Returns the preferred skill adapter for the given mock model.
Mock is used to stand in for any real provider in tests, so the model string itself is the only signal we have. When the model name contains claude (e.g. mock/claude-sonnet-4-6), pick the XML adapter to mirror what a real Claude-backed provider would do; otherwise fall back to Markdown.
Public Instance Methods
Source
# File lib/riffer/providers/mock.rb, line 70 def clear_stubs @stubbed_responses = [] end
Clears all stubbed responses.
Source
# File lib/riffer/providers/mock.rb, line 62 def stub_response(content, tool_calls: [], token_usage: nil) @stubbed_responses << normalize_response(content: content, tool_calls: tool_calls, token_usage: token_usage) end
Stubs the next response from the provider.
Can be called multiple times to queue responses.
provider.stub_response("Hello") provider.stub_response("", tool_calls: [{name: "my_tool", arguments: '{"key":"value"}'}]) provider.stub_response("Final response", token_usage: Riffer::Providers::TokenUsage.new(input_tokens: 10, output_tokens: 5))