Module: AIRecordFinder

Defined in:
lib/ai_record_finder.rb,
lib/ai_record_finder/client.rb,
lib/ai_record_finder/errors.rb,
lib/ai_record_finder/railtie.rb,
lib/ai_record_finder/version.rb,
lib/ai_record_finder/providers.rb,
lib/ai_record_finder/ai_adapter.rb,
lib/ai_record_finder/dsl_parser.rb,
lib/ai_record_finder/safety_guard.rb,
lib/ai_record_finder/configuration.rb,
lib/ai_record_finder/query_builder.rb,
lib/ai_record_finder/prompt_builder.rb,
lib/ai_record_finder/providers/base.rb,
lib/ai_record_finder/providers/openai.rb,
lib/ai_record_finder/providers/anthropic.rb,
lib/ai_record_finder/schema_introspector.rb

Overview

Main entry point for natural-language to ActiveRecord query translation.

Defined Under Namespace

Modules: Providers Classes: AIAdapter, AIResponseError, Client, Configuration, ConfigurationError, DSLParser, Error, InvalidDSL, InvalidModelError, PromptBuilder, QueryBuilder, Railtie, SafetyGuard, SchemaIntrospector, UnauthorizedModel

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.configurationAIRecordFinder::Configuration



25
26
27
# File 'lib/ai_record_finder.rb', line 25

def configuration
  @configuration ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Yield Parameters:



30
31
32
# File 'lib/ai_record_finder.rb', line 30

def configure
  yield(configuration)
end

.query(prompt:, model:, ai_adapter: nil) ⇒ ActiveRecord::Relation

Converts a natural-language prompt into an ActiveRecord::Relation.

Parameters:

  • prompt (String)
  • model (Class)
  • ai_adapter (#call, nil) (defaults to: nil)

    Optional injectable adapter for tests.

Returns:

  • (ActiveRecord::Relation)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ai_record_finder.rb', line 40

def query(prompt:, model:, ai_adapter: nil)
  SafetyGuard.validate_model!(model: model, configuration: configuration)

  schema = SchemaIntrospector.new(model).call
  prompt_builder = PromptBuilder.new(schema: schema, max_limit: configuration.max_limit)
  adapter = ai_adapter || AIAdapter.new(client: Client.new(configuration: configuration))

  raw_dsl = adapter.call(
    system_prompt: prompt_builder.system_prompt,
    user_prompt: prompt_builder.user_prompt(prompt)
  )

  dsl = DSLParser.new(
    model: model,
    schema: schema,
    dsl: raw_dsl,
    max_limit: configuration.max_limit
  ).call

  QueryBuilder.new(model: model, dsl: dsl, configuration: configuration).call
end

.reset_configuration!Object

Resets runtime configuration. Intended for tests.



63
64
65
# File 'lib/ai_record_finder.rb', line 63

def reset_configuration!
  @configuration = Configuration.new
end