Class: RubyOpenrouter::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_openrouter/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(model:, api_key: nil, site_url: nil, site_name: nil, timeout: nil) ⇒ Client

Returns a new instance of Client.



3
4
5
6
7
# File 'lib/ruby_openrouter/client.rb', line 3

def initialize(model:, api_key: nil, site_url: nil, site_name: nil, timeout: nil)
  @model    = model
  @config   = build_config(api_key: api_key, site_url: site_url, site_name: site_name, timeout: timeout)
  @messages = []
end

Instance Method Details

#assistant(content) ⇒ Object



32
33
34
35
# File 'lib/ruby_openrouter/client.rb', line 32

def assistant(content)
  @messages << { role: "assistant", content: content }
  self
end

#modelsObject



43
44
45
# File 'lib/ruby_openrouter/client.rb', line 43

def models
  Http.get("/models", config: @config).fetch("data", [])
end

#resetObject



37
38
39
40
41
# File 'lib/ruby_openrouter/client.rb', line 37

def reset
  system_msg = @messages.find { |m| m[:role] == "system" }
  @messages  = system_msg ? [system_msg] : []
  self
end

#system(content) ⇒ Object



9
10
11
12
13
# File 'lib/ruby_openrouter/client.rb', line 9

def system(content)
  @messages.reject! { |m| m[:role] == "system" }
  @messages.unshift(role: "system", content: content)
  self
end

#user(content, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ruby_openrouter/client.rb', line 15

def user(content, &block)
  @messages << { role: "user", content: content }
  if block
    accumulated = ""
    Http.stream("/chat/completions", body: request_body(stream: true), config: @config) do |chunk|
      accumulated += chunk
      block.call(chunk)
    end
    @messages << { role: "assistant", content: accumulated } unless accumulated.empty?
    nil
  else
    text = complete
    @messages << { role: "assistant", content: text }
    text
  end
end