Class: HumanSQL::QueryBuilder

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

Constant Summary collapse

OPENAI_API_URL =
'https://api.openai.com/v1/chat/completions'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user_input) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



11
12
13
14
# File 'lib/human_sql.rb', line 11

def initialize(user_input)
  @user_input = user_input
  @schema_content = File.read(Rails.root.join('db', 'schema.rb'))
end

Class Method Details

.run(user_input) ⇒ Object



16
17
18
# File 'lib/human_sql.rb', line 16

def self.run(user_input)
  new(user_input).get_results
end

Instance Method Details

#generate_queryObject



20
21
22
23
24
25
26
27
# File 'lib/human_sql.rb', line 20

def generate_query
  prompt = build_query_prompt(@user_input, @schema_content)

  generated_query_response = call_openai_service(prompt)&.strip
  extracted_query = extract_active_record_query(generated_query_response)
  
  extracted_query
end

#get_resultsObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/human_sql.rb', line 29

def get_results
  generated_query = generate_query
  raise "Could not generate a valid query." if generated_query.blank?

  results = execute_query(generated_query)
  raise "No results found." if results.blank?

  formatted_results = format_results_for_openai(results)
  natural_language_response = generate_natural_language_response(formatted_results, @user_input)

  natural_language_response
rescue StandardError => e
  process_error_in_natural_language(e.message)
end