Class: DeepAgentsRb::Models::OpenAI

Inherits:
BaseModel
  • Object
show all
Defined in:
lib/deepagents/deepagentsrb/models.rb

Overview

OpenAI model adapter

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, model: "gpt-4o", client: nil) ⇒ OpenAI

Returns a new instance of OpenAI.



60
61
62
63
64
65
# File 'lib/deepagents/deepagentsrb/models.rb', line 60

def initialize(api_key: nil, model: "gpt-4o", client: nil)
  require 'openai'
  @api_key = api_key || ENV['OPENAI_API_KEY']
  @model = model
  @client = client || ::OpenAI::Client.new(access_token: @api_key)
end

Instance Method Details

#generate(prompt, messages) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/deepagents/deepagentsrb/models.rb', line 67

def generate(prompt, messages)
  # Convert messages to OpenAI format if needed
  openai_messages = messages.map do |msg|
    msg = msg.transform_keys(&:to_sym) if msg.is_a?(Hash)
    msg
  end
  
  # Add system message with prompt
  openai_messages.unshift({ role: "system", content: prompt }) unless prompt.nil? || prompt.empty?
  
  response = @client.chat(
    parameters: {
      model: @model,
      messages: openai_messages
    }
  )
  
  response.dig("choices", 0, "message", "content")
end

#stream_generate(prompt, messages, &block) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/deepagents/deepagentsrb/models.rb', line 87

def stream_generate(prompt, messages, &block)
  # Convert messages to OpenAI format if needed
  openai_messages = messages.map do |msg|
    msg = msg.transform_keys(&:to_sym) if msg.is_a?(Hash)
    msg
  end
  
  # Add system message with prompt
  openai_messages.unshift({ role: "system", content: prompt }) unless prompt.nil? || prompt.empty?
  
  full_text = ""
  @client.chat(
    parameters: {
      model: @model,
      messages: openai_messages,
      stream: true
    }
  ) do |chunk|
    content = chunk.dig("choices", 0, "delta", "content")
    if content
      full_text += content
      yield content if block_given?
    end
  end
  
  full_text
end