Class: ActionPrompt::Adapters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/action_prompt/adapters/base.rb

Overview

Abstract base class for all ActionPrompt delivery adapters.

Implement a custom adapter by subclassing this and overriding #complete.

OpenAI Example

# Gemfile: gem "ruby-openai"

class OpenAIAdapter < ActionPrompt::Adapters::Base
def initialize(api_key:)
  @client = OpenAI::Client.new(access_token: api_key)
end

def complete(prompt_text, options = {})
  response = @client.chat(
    parameters: {
      model:       options.fetch(:model, "gpt-4o"),
      temperature: options.fetch(:temperature, 0.7),
      messages: [{ role: "user", content: prompt_text }]
    }
  )
  response.dig("choices", 0, "message", "content")
end
end

Google Gemini Example

# Gemfile: gem "gemini-ai"

class GeminiAdapter < ActionPrompt::Adapters::Base
def initialize(api_key:)
  @client = Gemini.new(
    credentials: { service: "generative-language-api", api_key: api_key },
    options: { model: "gemini-pro", server_sent_events: false }
  )
end

def complete(prompt_text, options = {})
  result = @client.generate_content(
    { contents: { role: "user", parts: { text: prompt_text } } },
    request_options: { model: options[:model] }.compact
  )
  result.dig("candidates", 0, "content", "parts", 0, "text")
end
end

Direct Known Subclasses

Null, Test

Instance Method Summary collapse

Instance Method Details

#complete(prompt_text, options = {}) ⇒ String

Sends prompt_text to the LLM and returns its text response.

Parameters:

  • prompt_text (String)

    the fully rendered prompt

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

    adapter-specific options (e.g. :model, :temperature)

Returns:

  • (String)

    the LLM response text

Raises:

  • (NotImplementedError)

    if the subclass does not implement this method



57
58
59
# File 'lib/action_prompt/adapters/base.rb', line 57

def complete(prompt_text, options = {}) # rubocop:disable Lint/UnusedMethodArgument
  raise NotImplementedError, "#{self.class}#complete must be implemented by subclasses"
end