Class: AsktiveRecord::Adapters::Base

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

Overview

Base adapter class that defines the interface all LLM adapters must implement. To create a custom adapter, inherit from this class and implement the required methods.

Examples:

Creating a custom adapter

class MyAdapter < AsktiveRecord::Adapters::Base
  def chat(prompt, options = {})
    # Your LLM API call here
    # Must return a string response
  end
end

AsktiveRecord.configure do |config|
  config.adapter = MyAdapter.new(api_key: ENV["MY_LLM_KEY"])
end

Direct Known Subclasses

OpenAI

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, model_name: nil) ⇒ Base

Returns a new instance of Base.

Raises:



22
23
24
25
26
27
28
29
30
# File 'lib/asktive_record/adapters/base.rb', line 22

def initialize(api_key:, model_name: nil)
  @api_key = api_key
  @model_name = model_name

  return if @api_key

  raise ConfigurationError,
        "LLM API key is required for adapter initialization."
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



20
21
22
# File 'lib/asktive_record/adapters/base.rb', line 20

def api_key
  @api_key
end

#model_nameObject (readonly)

Returns the value of attribute model_name.



20
21
22
# File 'lib/asktive_record/adapters/base.rb', line 20

def model_name
  @model_name
end

Instance Method Details

#chat(prompt, options = {}) ⇒ String?

Send a prompt to the LLM and return the text response.

Parameters:

  • prompt (String)

    the prompt to send

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

    additional options (temperature, max_tokens, etc.)

Returns:

  • (String, nil)

    the text response from the LLM

Raises:

  • (NotImplementedError)


37
38
39
# File 'lib/asktive_record/adapters/base.rb', line 37

def chat(prompt, options = {})
  raise NotImplementedError, "#{self.class.name} must implement #chat"
end

#default_model_nameString

Returns the default model name for this adapter.

Returns:

  • (String)

    the default model name

Raises:

  • (NotImplementedError)


44
45
46
# File 'lib/asktive_record/adapters/base.rb', line 44

def default_model_name
  raise NotImplementedError, "#{self.class.name} must implement #default_model_name"
end

#resolved_model_nameString

Returns the resolved model name (configured or default).

Returns:

  • (String)


51
52
53
# File 'lib/asktive_record/adapters/base.rb', line 51

def resolved_model_name
  model_name || default_model_name
end