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

Constructor Details

#initialize(**options) ⇒ Mock

responses: pre-configures canned responses (same shape as #stub_response), typically set via provider_options responses: […].

Riffer::Providers::Mock.new(responses: [
  {content: "", tool_calls: [{name: "tool_a", arguments: "{}"}]},
  {content: "Final answer"}
])

– : (**untyped) -> void



39
40
41
42
43
44
# File 'lib/riffer/providers/mock.rb', line 39

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.



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

def calls
  @calls
end

Class Method Details

.semconv_provider_nameObject

The GenAI semconv well-known provider name. – : () -> String



22
23
24
# File 'lib/riffer/providers/mock.rb', line 22

def self.semconv_provider_name
  "mock"
end

.skills_adapter(model = nil) ⇒ Object

Returns the skill adapter for the mock model — XML when the model name contains claude (mirroring a real Claude provider), else Markdown. – : (?String?) -> singleton(Riffer::Skills::Adapter)



14
15
16
17
# File 'lib/riffer/providers/mock.rb', line 14

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



64
65
66
# File 'lib/riffer/providers/mock.rb', line 64

def clear_stubs
  @stubbed_responses = []
end

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

Stubs the next response; call repeatedly to queue several. finish_reason defaults to :tool_calls when tool calls are present, else :stop.

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))
provider.stub_response("Truncated...", finish_reason: :length)

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



56
57
58
# File 'lib/riffer/providers/mock.rb', line 56

def stub_response(content, tool_calls: [], token_usage: nil, finish_reason: nil)
  @stubbed_responses << normalize_response(content: content, tool_calls: tool_calls, token_usage: token_usage, finish_reason: finish_reason)
end