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 ===.
-
#llm_retry_delay ⇒ Object
READERS ===.
-
#log_output_path ⇒ Object
READERS ===.
-
#log_verbosity ⇒ Object
READERS ===.
-
#max_llm_retries ⇒ 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 56 57 |
# 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 self.max_llm_retries = 3 # retries on rate-limit errors self.llm_retry_delay = 60 # base delay in seconds (fallback when no retry-after hint) end |
Instance Attribute Details
#adapter ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def adapter @adapter end |
#api_key ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def api_key @api_key end |
#blazer_path ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def blazer_path @blazer_path end |
#chat_model ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def chat_model @chat_model end |
#chat_provider ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def chat_provider @chat_provider end |
#chunk_overlap ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def chunk_overlap @chunk_overlap end |
#chunk_size ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def chunk_size @chunk_size end |
#code_model ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def code_model @code_model end |
#code_provider ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def code_provider @code_provider end |
#context_documents_weight ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def context_documents_weight @context_documents_weight end |
#context_file_path ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def context_file_path @context_file_path end |
#embedding_model ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def @embedding_model end |
#embedding_provider ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def @embedding_provider end |
#enrichment_model ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def enrichment_model @enrichment_model end |
#enrichment_provider ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def enrichment_provider @enrichment_provider end |
#gemini_api_key ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def gemini_api_key @gemini_api_key end |
#history_limit ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def history_limit @history_limit end |
#k ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def k @k end |
#llm_model ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def llm_model @llm_model end |
#llm_provider ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def llm_provider @llm_provider end |
#llm_retry_delay ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def llm_retry_delay @llm_retry_delay end |
#log_output_path ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def log_output_path @log_output_path end |
#log_verbosity ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def log_verbosity @log_verbosity end |
#max_llm_retries ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def max_llm_retries @max_llm_retries end |
#min_score ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def min_score @min_score end |
#models_documents_weight ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def models_documents_weight @models_documents_weight end |
#models_permission ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def @models_permission end |
#openai_api_key ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def openai_api_key @openai_api_key end |
#openrouter_api_key ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def openrouter_api_key @openrouter_api_key end |
#query_enrichment_enabled ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def query_enrichment_enabled @query_enrichment_enabled end |
#query_mode ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def query_mode @query_mode end |
#read_only_db ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def read_only_db @read_only_db end |
#schema_documents_weight ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def schema_documents_weight @schema_documents_weight end |
#schema_permission ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def @schema_permission end |
#statement_timeout ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def statement_timeout @statement_timeout end |
#workflow_cache_ttl ⇒ Object
READERS ===
60 61 62 |
# File 'lib/glancer/configuration.rb', line 60 def workflow_cache_ttl @workflow_cache_ttl end |
Class Method Details
.infer_adapter ⇒ Object
Auxiliary methods ===
374 375 376 377 378 379 |
# File 'lib/glancer/configuration.rb', line 374 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
381 382 383 384 385 |
# File 'lib/glancer/configuration.rb', line 381 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.
367 368 369 370 |
# File 'lib/glancer/configuration.rb', line 367 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.
359 360 361 362 363 |
# File 'lib/glancer/configuration.rb', line 359 def resolved_blazer_path return @blazer_path unless @blazer_path.nil? defined?(Blazer::Engine) ? "/blazer" : nil end |
#resolved_chat_model ⇒ Object
302 303 304 |
# File 'lib/glancer/configuration.rb', line 302 def resolved_chat_model chat_model || llm_model end |
#resolved_chat_provider ⇒ Object
298 299 300 |
# File 'lib/glancer/configuration.rb', line 298 def resolved_chat_provider chat_provider || llm_provider end |
#resolved_code_model ⇒ Object
294 295 296 |
# File 'lib/glancer/configuration.rb', line 294 def resolved_code_model code_model || llm_model end |
#resolved_code_provider ⇒ Object
290 291 292 |
# File 'lib/glancer/configuration.rb', line 290 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.
258 259 260 |
# File 'lib/glancer/configuration.rb', line 258 def || EMBEDDING_DEFAULTS[] || "text-embedding-004" end |
#resolved_embedding_provider ⇒ Object
Returns the provider to use for embedding calls (falls back to llm_provider).
252 253 254 |
# File 'lib/glancer/configuration.rb', line 252 def || llm_provider end |
#resolved_enrichment_model ⇒ Object
330 331 332 |
# File 'lib/glancer/configuration.rb', line 330 def resolved_enrichment_model enrichment_model || llm_model end |
#resolved_enrichment_provider ⇒ Object
326 327 328 |
# File 'lib/glancer/configuration.rb', line 326 def resolved_enrichment_provider enrichment_provider || llm_provider end |