Module: SqlChatbot

Defined in:
lib/sql_chatbot_rails.rb,
lib/sql_chatbot/engine.rb,
lib/sql_chatbot/version.rb,
lib/sql_chatbot/auth/jwt.rb,
lib/sql_chatbot/auth/cors.rb,
lib/sql_chatbot/llm/client.rb,
lib/sql_chatbot/configuration.rb,
lib/sql_chatbot/prompts/answer.rb,
lib/sql_chatbot/grammar/registry.rb,
lib/sql_chatbot/prompts/classify.rb,
lib/sql_chatbot/grammar/modifiers.rb,
lib/sql_chatbot/grammar/primitives.rb,
lib/sql_chatbot/grammar/miss_logger.rb,
lib/sql_chatbot/grammar/sanity_check.rb,
lib/sql_chatbot/prompts/generate_sql.rb,
lib/sql_chatbot/grammar/list_renderer.rb,
lib/sql_chatbot/services/code_indexer.rb,
lib/sql_chatbot/services/orchestrator.rb,
lib/sql_chatbot/services/sql_executor.rb,
lib/sql_chatbot/grammar/count_renderer.rb,
lib/sql_chatbot/services/schema_service.rb,
lib/sql_chatbot/grammar/intent_extractor.rb,
lib/sql_chatbot/grammar/entity_candidates.rb,
lib/sql_chatbot/grammar/template_compiler.rb,
lib/sql_chatbot/services/grammar_pipeline.rb,
lib/sql_chatbot/services/registry_builder.rb,
lib/sql_chatbot/services/model_introspector.rb,
lib/sql_chatbot/services/route_introspector.rb,
lib/generators/sql_chatbot/install_generator.rb,
lib/sql_chatbot/grammar/programmatic_renderer.rb,
app/controllers/sql_chatbot/chatbot_controller.rb

Defined Under Namespace

Modules: Auth, Generators, Grammar, LLM, Prompts, Services Classes: ChatbotController, Configuration, Engine

Constant Summary collapse

VERSION =
"1.0.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.code_indexerObject

Returns the value of attribute code_indexer.



21
22
23
# File 'lib/sql_chatbot_rails.rb', line 21

def code_indexer
  @code_indexer
end

.configObject

Returns the value of attribute config.



21
22
23
# File 'lib/sql_chatbot_rails.rb', line 21

def config
  @config
end

.orchestratorObject

Returns the value of attribute orchestrator.



21
22
23
# File 'lib/sql_chatbot_rails.rb', line 21

def orchestrator
  @orchestrator
end

.registryObject

Returns the value of attribute registry.



21
22
23
# File 'lib/sql_chatbot_rails.rb', line 21

def registry
  @registry
end

.schema_serviceObject

Returns the value of attribute schema_service.



21
22
23
# File 'lib/sql_chatbot_rails.rb', line 21

def schema_service
  @schema_service
end

Class Method Details

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

Yields:



23
24
25
26
# File 'lib/sql_chatbot_rails.rb', line 23

def configure
  self.config ||= Configuration.new
  yield(config) if block_given?
end

.ensure_initialized!Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/sql_chatbot_rails.rb', line 38

def ensure_initialized!
  return if @initialized
  @init_mutex ||= Mutex.new
  @init_mutex.synchronize do
    return if @initialized
    cfg = config || Configuration.new

    @schema_service = Services::SchemaService.new
    @schema_service.discover

    # Introspect Rails models for enums, non-standard FKs, and soft delete gems
    introspector = Services::ModelIntrospector.new
    introspection = introspector.introspect

    # Apply soft delete annotations conditionally (gem-based vs enum-based)
    @schema_service.apply_soft_delete_annotations(
      soft_delete_tables: introspection.soft_delete_tables,
      enum_soft_delete_tables: introspection.enum_soft_delete_tables,
    )

    # Inject model annotations (enums, FKs)
    @schema_service.append_model_annotations(introspection.annotations)

    # Move lookup values from referenced tables to FK columns
    @schema_service.relocate_lookup_annotations

    # Introspect Rails routes for navigation context
    route_introspector = Services::RouteIntrospector.new
    route_data = route_introspector.introspect

    @code_indexer = Services::CodeIndexer.new
    @code_indexer.index(cfg.code_paths)

    llm_client = LLM::Client.new(
      api_key: cfg.resolved_api_key,
      base_url: cfg.resolved_base_url,
      model: cfg.resolved_model,
    )

    @orchestrator = Services::Orchestrator.new(
      llm_client: llm_client,
      schema_service: @schema_service,
      code_indexer: @code_indexer,
      route_introspector_data: route_data,
    )

    @initialized = true
  end
rescue => e
  @initialized = false
  raise e
end

.reset!Object



28
29
30
31
32
33
34
35
36
# File 'lib/sql_chatbot_rails.rb', line 28

def reset!
  self.config = Configuration.new
  @schema_service = nil
  @code_indexer = nil
  @orchestrator = nil
  @registry = nil
  @initialized = false
  @init_mutex = Mutex.new
end