Class: Glancer::Configuration
- Inherits:
-
Object
- Object
- Glancer::Configuration
- Defined in:
- lib/glancer/configuration.rb
Constant Summary collapse
- ADAPTERS_SUPPORTED =
%i[postgres mysql mysql2 sqlite].freeze
- LLM_PROVIDERS =
%i[gemini openai openrouter].freeze
- LOG_VERBOSITY_LEVELS =
%i[silent none info debug].freeze
- QUERY_MODES =
%i[sql activerecord].freeze
- EMBEDDING_DEFAULTS =
Default embedding models per provider. OpenRouter does not expose a native embedding API; the recommended approach is to set embedding_provider to :gemini or :openai and only use openrouter for chat/sql roles.
{ gemini: "text-embedding-004", openai: "text-embedding-3-large", openrouter: "openai/text-embedding-3-small" }.freeze
Instance Attribute Summary collapse
-
#adapter ⇒ Object
READERS ===.
-
#api_key ⇒ Object
READERS ===.
-
#blazer_path ⇒ Object
READERS ===.
-
#chat_model ⇒ Object
READERS ===.
-
#chat_provider ⇒ Object
READERS ===.
-
#chunk_overlap ⇒ Object
READERS ===.
-
#chunk_size ⇒ Object
READERS ===.
-
#code_model ⇒ Object
READERS ===.
-
#code_provider ⇒ Object
READERS ===.
-
#context_documents_weight ⇒ Object
READERS ===.
-
#context_file_path ⇒ Object
READERS ===.
-
#embedding_model ⇒ Object
READERS ===.
-
#embedding_provider ⇒ Object
READERS ===.
-
#enrichment_model ⇒ Object
READERS ===.
-
#enrichment_provider ⇒ Object
READERS ===.
-
#gemini_api_key ⇒ Object
READERS ===.
-
#history_limit ⇒ Object
READERS ===.
-
#k ⇒ Object
READERS ===.
-
#llm_model ⇒ Object
READERS ===.
-
#llm_provider ⇒ Object
READERS ===.
-
#log_output_path ⇒ Object
READERS ===.
-
#log_verbosity ⇒ Object
READERS ===.
-
#min_score ⇒ Object
READERS ===.
-
#models_documents_weight ⇒ Object
READERS ===.
-
#models_permission ⇒ Object
READERS ===.
-
#openai_api_key ⇒ Object
READERS ===.
-
#openrouter_api_key ⇒ Object
READERS ===.
-
#query_enrichment_enabled ⇒ Object
READERS ===.
-
#query_mode ⇒ Object
READERS ===.
-
#read_only_db ⇒ Object
READERS ===.
-
#schema_documents_weight ⇒ Object
READERS ===.
-
#schema_permission ⇒ Object
READERS ===.
-
#statement_timeout ⇒ Object
READERS ===.
-
#workflow_cache_ttl ⇒ Object
READERS ===.
Class Method Summary collapse
-
.infer_adapter ⇒ Object
Auxiliary methods ===.
- .valid_table_name?(table_name) ⇒ Boolean
Instance Method Summary collapse
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#resolved_adapter ⇒ Object
Returns the adapter in use, auto-detecting from ActiveRecord when nil.
-
#resolved_blazer_path ⇒ Object
Returns the Blazer base path if Blazer is available, nil otherwise.
- #resolved_chat_model ⇒ Object
- #resolved_chat_provider ⇒ Object
- #resolved_code_model ⇒ Object
- #resolved_code_provider ⇒ Object
-
#resolved_embedding_model ⇒ Object
Returns the model to use for embedding calls.
-
#resolved_embedding_provider ⇒ Object
Returns the provider to use for embedding calls (falls back to llm_provider).
- #resolved_enrichment_model ⇒ Object
- #resolved_enrichment_provider ⇒ Object
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/glancer/configuration.rb', line 20 def initialize self.adapter = Glancer::Configuration.infer_adapter || :mysql2 self.read_only_db = nil self.llm_provider = :gemini self.llm_model = "gemini-2.0-flash" self. = false self. = false self.workflow_cache_ttl = 5.minutes self.context_file_path = "config/glancer/llm_context.glancer.md" self.api_key = nil self.gemini_api_key = nil self.openai_api_key = nil self.openrouter_api_key = nil self.log_output_path = nil self.log_verbosity = :info self.k = 5 self.min_score = 0.6 self.schema_documents_weight = 1.3 self.context_documents_weight = 1.2 self.models_documents_weight = 1.1 self.chunk_size = 1000 self.chunk_overlap = 150 self.history_limit = 6 self.statement_timeout = 30.seconds self. = nil # nil → uses llm_provider self. = nil # nil → uses provider default self.code_provider = nil # nil → uses llm_provider (for SQL generation) self.code_model = nil # nil → uses llm_model (for SQL generation) self.chat_provider = nil # nil → uses llm_provider (for humanized responses) self.chat_model = nil # nil → uses llm_model (for humanized responses) self.blazer_path = nil # nil → auto-detected if Blazer::Engine is mounted self.query_mode = :sql # :sql (default) or :activerecord self.query_enrichment_enabled = false # enrich question with table names before retrieval self.enrichment_provider = nil # nil → falls back to llm_provider self.enrichment_model = nil # nil → falls back to llm_model end |
Instance Attribute Details
#adapter ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def adapter @adapter end |
#api_key ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def api_key @api_key end |
#blazer_path ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def blazer_path @blazer_path end |
#chat_model ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def chat_model @chat_model end |
#chat_provider ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def chat_provider @chat_provider end |
#chunk_overlap ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def chunk_overlap @chunk_overlap end |
#chunk_size ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def chunk_size @chunk_size end |
#code_model ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def code_model @code_model end |
#code_provider ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def code_provider @code_provider end |
#context_documents_weight ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def context_documents_weight @context_documents_weight end |
#context_file_path ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def context_file_path @context_file_path end |
#embedding_model ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def @embedding_model end |
#embedding_provider ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def @embedding_provider end |
#enrichment_model ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def enrichment_model @enrichment_model end |
#enrichment_provider ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def enrichment_provider @enrichment_provider end |
#gemini_api_key ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def gemini_api_key @gemini_api_key end |
#history_limit ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def history_limit @history_limit end |
#k ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def k @k end |
#llm_model ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def llm_model @llm_model end |
#llm_provider ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def llm_provider @llm_provider end |
#log_output_path ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def log_output_path @log_output_path end |
#log_verbosity ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def log_verbosity @log_verbosity end |
#min_score ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def min_score @min_score end |
#models_documents_weight ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def models_documents_weight @models_documents_weight end |
#models_permission ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def @models_permission end |
#openai_api_key ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def openai_api_key @openai_api_key end |
#openrouter_api_key ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def openrouter_api_key @openrouter_api_key end |
#query_enrichment_enabled ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def query_enrichment_enabled @query_enrichment_enabled end |
#query_mode ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def query_mode @query_mode end |
#read_only_db ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def read_only_db @read_only_db end |
#schema_documents_weight ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def schema_documents_weight @schema_documents_weight end |
#schema_permission ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def @schema_permission end |
#statement_timeout ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def statement_timeout @statement_timeout end |
#workflow_cache_ttl ⇒ Object
READERS ===
58 59 60 |
# File 'lib/glancer/configuration.rb', line 58 def workflow_cache_ttl @workflow_cache_ttl end |
Class Method Details
.infer_adapter ⇒ Object
Auxiliary methods ===
359 360 361 362 363 364 |
# File 'lib/glancer/configuration.rb', line 359 def self.infer_adapter raw = ActiveRecord::Base.connection.adapter_name.downcase.to_sym raw.to_s == "postgresql" ? :postgres : raw rescue StandardError nil end |
.valid_table_name?(table_name) ⇒ Boolean
366 367 368 369 370 |
# File 'lib/glancer/configuration.rb', line 366 def self.valid_table_name?(table_name) ActiveRecord::Base.connection.tables.include?(table_name.to_s) rescue StandardError false end |
Instance Method Details
#resolved_adapter ⇒ Object
Returns the adapter in use, auto-detecting from ActiveRecord when nil. Normalizes “postgresql” → :postgres so callers don’t need to handle both.
352 353 354 355 |
# File 'lib/glancer/configuration.rb', line 352 def resolved_adapter raw = adapter || self.class.infer_adapter || :mysql2 raw.to_s == "postgresql" ? :postgres : raw end |
#resolved_blazer_path ⇒ Object
Returns the Blazer base path if Blazer is available, nil otherwise.
344 345 346 347 348 |
# File 'lib/glancer/configuration.rb', line 344 def resolved_blazer_path return @blazer_path unless @blazer_path.nil? defined?(Blazer::Engine) ? "/blazer" : nil end |
#resolved_chat_model ⇒ Object
299 300 301 |
# File 'lib/glancer/configuration.rb', line 299 def resolved_chat_model chat_model || llm_model end |
#resolved_chat_provider ⇒ Object
295 296 297 |
# File 'lib/glancer/configuration.rb', line 295 def resolved_chat_provider chat_provider || llm_provider end |
#resolved_code_model ⇒ Object
291 292 293 |
# File 'lib/glancer/configuration.rb', line 291 def resolved_code_model code_model || llm_model end |
#resolved_code_provider ⇒ Object
287 288 289 |
# File 'lib/glancer/configuration.rb', line 287 def resolved_code_provider code_provider || llm_provider end |
#resolved_embedding_model ⇒ Object
Returns the model to use for embedding calls. Falls back to EMBEDDING_DEFAULTS for the resolved provider.
255 256 257 |
# File 'lib/glancer/configuration.rb', line 255 def || EMBEDDING_DEFAULTS[] || "text-embedding-004" end |
#resolved_embedding_provider ⇒ Object
Returns the provider to use for embedding calls (falls back to llm_provider).
249 250 251 |
# File 'lib/glancer/configuration.rb', line 249 def || llm_provider end |
#resolved_enrichment_model ⇒ Object
327 328 329 |
# File 'lib/glancer/configuration.rb', line 327 def resolved_enrichment_model enrichment_model || llm_model end |
#resolved_enrichment_provider ⇒ Object
323 324 325 |
# File 'lib/glancer/configuration.rb', line 323 def resolved_enrichment_provider enrichment_provider || llm_provider end |