Class: Ragents::Providers::Test

Inherits:
Ragents::Provider show all
Defined in:
lib/ragents/providers/test.rb

Overview

Test provider for unit testing without real API calls. Allows scripting responses for predictable test scenarios.

Examples:

Basic stubbing

provider = Ragents::Providers::Test.new
provider.stub_response(content: "Hello!")

response = provider.generate(messages: [])
response.content # => "Hello!"

Stubbing tool calls

provider = Ragents::Providers::Test.new
provider.stub_tool_call(name: :search, arguments: { query: "test" })
provider.stub_response(content: "Search complete")

# First call returns tool call, second returns final response
response1 = provider.generate(messages: [])
response1.has_tool_calls? # => true

response2 = provider.generate(messages: [])
response2.content # => "Search complete"

Instance Attribute Summary collapse

Attributes inherited from Ragents::Provider

#config

Instance Method Summary collapse

Methods inherited from Ragents::Provider

#name

Constructor Details

#initialize(**config) ⇒ Test

Returns a new instance of Test.



32
33
34
35
36
37
# File 'lib/ragents/providers/test.rb', line 32

def initialize(**config)
  super
  @responses = []
  @requests = []
  @default_response = Response.new(content: "Test response")
end

Instance Attribute Details

#requestsObject (readonly)

Returns the value of attribute requests.



30
31
32
# File 'lib/ragents/providers/test.rb', line 30

def requests
  @requests
end

Instance Method Details

#default_response=(response) ⇒ Object

Set default response for when no stubs remain

Parameters:

  • response (Response)

    The default response



71
72
73
# File 'lib/ragents/providers/test.rb', line 71

def default_response=(response)
  @default_response = response
end

#generate(messages:, tools: [], **options) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/ragents/providers/test.rb', line 75

def generate(messages:, tools: [], **options)
  @requests << {
    messages: messages,
    tools: tools,
    options: options
  }

  @responses.shift || @default_response
end

#last_requestHash?

Get the last request made

Returns:

  • (Hash, nil)

    The last request or nil



106
107
108
# File 'lib/ragents/providers/test.rb', line 106

def last_request
  @requests.last
end

#request_countInteger

Get the number of requests made

Returns:

  • (Integer)


118
119
120
# File 'lib/ragents/providers/test.rb', line 118

def request_count
  @requests.size
end

#requests?Boolean

Check if any requests were made

Returns:

  • (Boolean)


112
113
114
# File 'lib/ragents/providers/test.rb', line 112

def requests?
  !@requests.empty?
end

#reset!Object

Clear all stubs and requests



99
100
101
102
# File 'lib/ragents/providers/test.rb', line 99

def reset!
  @responses.clear
  @requests.clear
end

#stream(messages:, tools: [], **options, &block) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/ragents/providers/test.rb', line 85

def stream(messages:, tools: [], **options, &block)
  response = generate(messages: messages, tools: tools, **options)

  # Simulate streaming by yielding content character by character
  if block_given? && response.content
    response.content.each_char do |char|
      block.call(char)
    end
  end

  response
end

#stub_response(content: nil, tool_calls: nil, finish_reason: "stop") ⇒ self

Stub the next response

Parameters:

  • content (String) (defaults to: nil)

    The response content

  • tool_calls (Array) (defaults to: nil)

    Optional tool calls

  • finish_reason (String) (defaults to: "stop")

    The finish reason

Returns:

  • (self)

    For method chaining



44
45
46
47
48
49
50
51
# File 'lib/ragents/providers/test.rb', line 44

def stub_response(content: nil, tool_calls: nil, finish_reason: "stop")
  @responses << Response.new(
    content: content,
    tool_calls: tool_calls || [],
    finish_reason: finish_reason
  )
  self
end

#stub_tool_call(name:, arguments: {}, id: nil, content: nil) ⇒ self

Stub a tool call response

Parameters:

  • name (Symbol)

    The tool name

  • arguments (Hash) (defaults to: {})

    The tool arguments

  • id (String) (defaults to: nil)

    Optional tool call ID

  • content (String) (defaults to: nil)

    Optional content alongside tool call

Returns:

  • (self)

    For method chaining



59
60
61
62
63
64
65
66
67
# File 'lib/ragents/providers/test.rb', line 59

def stub_tool_call(name:, arguments: {}, id: nil, content: nil)
  tool_call = ToolCall.new(
    id: id || "call_#{SecureRandom.hex(8)}",
    name: name,
    arguments: arguments
  )
  stub_response(content: content, tool_calls: [tool_call], finish_reason: "tool_calls")
  self
end