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.

– : (**untyped) -> void



30
31
32
33
34
35
# File 'lib/riffer/providers/mock.rb', line 30

def initialize(**options)
  @responses = options[:responses] || []
  @current_index = 0
  @calls = []
  @stubbed_responses = []
end

Instance Attribute Details

#callsObject (readonly)

Array of recorded method calls for assertions.



24
25
26
# File 'lib/riffer/providers/mock.rb', line 24

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)



18
19
20
21
# File 'lib/riffer/providers/mock.rb', line 18

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



62
63
64
# File 'lib/riffer/providers/mock.rb', line 62

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::TokenUsage.new(input_tokens: 10, output_tokens: 5))

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



47
48
49
50
51
52
53
54
55
56
# File 'lib/riffer/providers/mock.rb', line 47

def stub_response(content, tool_calls: [], token_usage: nil)
  formatted_tool_calls = tool_calls.map.with_index do |tc, idx|
    Riffer::Messages::Assistant::ToolCall.new(
      call_id: tc[:call_id] || tc[:id] || "mock_call_#{idx}",
      name: tc[:name],
      arguments: tc[:arguments].is_a?(String) ? tc[:arguments] : tc[:arguments].to_json
    )
  end
  @stubbed_responses << {role: "assistant", content: content, tool_calls: formatted_tool_calls, token_usage: token_usage}
end