Class: Riffer::Providers::Mock

Inherits:
Base
  • Object
show all
Defined in:
lib/riffer/providers/mock.rb

Overview

Mock provider for mocking LLM responses in tests.

No external gems required.

Constant Summary

Constants inherited from Base

Base::WIRE_SEPARATOR

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#generate_text, #stream_text

Methods included from Messages::Converter

#convert_to_file_part, #convert_to_message_object

Methods included from Helpers::Dependencies

#depends_on

Constructor Details

#initialize(**options) ⇒ Mock

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"}
])

– : (**untyped) -> void



45
46
47
48
49
50
# 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

Instance Attribute Details

#callsObject (readonly)

Array of recorded method calls for assertions.



28
29
30
# File 'lib/riffer/providers/mock.rb', line 28

def calls
  @calls
end

Class Method Details

.skills_adapter(model = nil) ⇒ Object

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.

– : (?String?) -> singleton(Riffer::Skills::Adapter)



22
23
24
25
# 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

Instance Method Details

#clear_stubsObject

Clears all stubbed responses.

– : () -> void



70
71
72
# File 'lib/riffer/providers/mock.rb', line 70

def clear_stubs
  @stubbed_responses = []
end

#stub_response(content, tool_calls: [], token_usage: nil) ⇒ Object

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))

– : (String, ?tool_calls: Array[Hash[Symbol, untyped]], ?token_usage: Riffer::Providers::TokenUsage?) -> void



62
63
64
# 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