Class: Aidp::Harness::ConfigManager
- Inherits:
-
Object
- Object
- Aidp::Harness::ConfigManager
- Includes:
- ProviderTypeChecker
- Defined in:
- lib/aidp/harness/config_manager.rb
Overview
Unified configuration manager for harness
Instance Attribute Summary collapse
-
#project_dir ⇒ Object
readonly
Returns the value of attribute project_dir.
Instance Method Summary collapse
-
#all_providers(options = {}) ⇒ Object
Get all provider configurations.
-
#circuit_breaker_config(options = {}) ⇒ Object
Get circuit breaker configuration.
-
#config(options = {}) ⇒ Object
Get complete configuration.
-
#config_summary ⇒ Object
Get configuration summary.
-
#config_valid? ⇒ Boolean
Check if configuration is valid.
-
#default_provider(options = {}) ⇒ Object
Get default provider.
-
#fallback_providers(options = {}) ⇒ Object
Get fallback providers.
-
#harness_config(options = {}) ⇒ Object
Get harness configuration.
-
#health_check_config(options = {}) ⇒ Object
Get health check configuration.
-
#initialize(project_dir = Dir.pwd) ⇒ ConfigManager
constructor
A new instance of ConfigManager.
-
#load_balancing_config(options = {}) ⇒ Object
Get load balancing configuration.
-
#max_retries(options = {}) ⇒ Object
Get max retries (alias for backward compatibility with ErrorHandler).
-
#metrics_config(options = {}) ⇒ Object
Get metrics configuration.
-
#model_switching_config(options = {}) ⇒ Object
Get model switching configuration.
-
#provider_auth_config(provider_name, options = {}) ⇒ Object
Get provider auth configuration.
-
#provider_config(provider_name, options = {}) ⇒ Object
Get provider configuration.
-
#provider_default_flags(provider_name, options = {}) ⇒ Object
Get provider default flags.
-
#provider_endpoints(provider_name, options = {}) ⇒ Object
Get provider endpoints.
-
#provider_features(provider_name, options = {}) ⇒ Object
Get provider features.
-
#provider_max_tokens(provider_name, options = {}) ⇒ Object
Get provider max tokens.
-
#provider_model_config(provider_name, model_name, options = {}) ⇒ Object
Get provider model configuration.
-
#provider_model_weights(provider_name, options = {}) ⇒ Object
Get provider model weights.
-
#provider_models(provider_name, options = {}) ⇒ Object
Get provider models.
-
#provider_monitoring_config(provider_name, options = {}) ⇒ Object
Get provider monitoring configuration.
-
#provider_names(options = {}) ⇒ Object
Get configured provider names.
-
#provider_priority(provider_name, options = {}) ⇒ Object
Get provider priority.
-
#provider_supports_feature?(provider_name, feature, options = {}) ⇒ Boolean
Check if provider supports feature.
-
#provider_type(provider_name, options = {}) ⇒ Object
Get provider type.
-
#provider_weights(options = {}) ⇒ Object
Get provider weights.
-
#rate_limit_config(options = {}) ⇒ Object
Get rate limit configuration.
-
#reload_config ⇒ Object
Reload configuration.
-
#retry_config(options = {}) ⇒ Object
Get retry configuration.
-
#session_config(options = {}) ⇒ Object
Get session configuration.
-
#validation_errors ⇒ Object
Get validation errors.
-
#validation_warnings ⇒ Object
Get validation warnings.
Methods included from ProviderTypeChecker
#get_provider_type, #get_underlying_service, #has_underlying_service?, #passthrough_provider?, #requires_api_key?, #subscription_provider?, #usage_based_provider?
Constructor Details
#initialize(project_dir = Dir.pwd) ⇒ ConfigManager
Returns a new instance of ConfigManager.
15 16 17 18 19 20 |
# File 'lib/aidp/harness/config_manager.rb', line 15 def initialize(project_dir = Dir.pwd) @project_dir = project_dir @loader = ConfigLoader.new(project_dir) @cache = {} = nil end |
Instance Attribute Details
#project_dir ⇒ Object (readonly)
Returns the value of attribute project_dir.
13 14 15 |
# File 'lib/aidp/harness/config_manager.rb', line 13 def project_dir @project_dir end |
Instance Method Details
#all_providers(options = {}) ⇒ Object
Get all provider configurations
53 54 55 56 57 58 |
# File 'lib/aidp/harness/config_manager.rb', line 53 def all_providers( = {}) config = config() return {} unless config config[:providers] || {} end |
#circuit_breaker_config(options = {}) ⇒ Object
Get circuit breaker configuration
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/aidp/harness/config_manager.rb', line 112 def circuit_breaker_config( = {}) harness_config = harness_config() cb_config = harness_config[:circuit_breaker] || harness_config["circuit_breaker"] || {} { enabled: cb_config[:enabled] != false, failure_threshold: cb_config[:failure_threshold] || 5, timeout: cb_config[:timeout] || 300, half_open_max_calls: cb_config[:half_open_max_calls] || 3 } end |
#config(options = {}) ⇒ Object
Get complete configuration
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/aidp/harness/config_manager.rb', line 23 def config( = {}) cache_key = "config_#{options.hash}" if cache_valid?(cache_key) return @cache[cache_key] end config = () @cache[cache_key] = config if config config end |
#config_summary ⇒ Object
Get configuration summary
353 354 355 |
# File 'lib/aidp/harness/config_manager.rb', line 353 def config_summary @loader.config_summary end |
#config_valid? ⇒ Boolean
Check if configuration is valid
331 332 333 |
# File 'lib/aidp/harness/config_manager.rb', line 331 def config_valid? @loader.config_valid? end |
#default_provider(options = {}) ⇒ Object
Get default provider
67 68 69 70 |
# File 'lib/aidp/harness/config_manager.rb', line 67 def default_provider( = {}) harness_config = harness_config() harness_config[:default_provider] || harness_config["default_provider"] end |
#fallback_providers(options = {}) ⇒ Object
Get fallback providers
73 74 75 76 77 78 79 80 |
# File 'lib/aidp/harness/config_manager.rb', line 73 def fallback_providers( = {}) harness_config = harness_config() fallback_providers = harness_config[:fallback_providers] || harness_config["fallback_providers"] || [] # Ensure fallback providers are configured configured_providers = provider_names() fallback_providers.select { |provider| configured_providers.include?(provider) } end |
#harness_config(options = {}) ⇒ Object
Get harness configuration
36 37 38 39 40 41 |
# File 'lib/aidp/harness/config_manager.rb', line 36 def harness_config( = {}) config = config() return nil unless config config[:harness] || {} end |
#health_check_config(options = {}) ⇒ Object
Get health check configuration
164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/aidp/harness/config_manager.rb', line 164 def health_check_config( = {}) harness_config = harness_config() hc_config = harness_config[:health_check] || harness_config["health_check"] || {} { enabled: hc_config[:enabled] != false, interval: hc_config[:interval] || 60, timeout: hc_config[:timeout] || 10, failure_threshold: hc_config[:failure_threshold] || 3, success_threshold: hc_config[:success_threshold] || 2 } end |
#load_balancing_config(options = {}) ⇒ Object
Get load balancing configuration
138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/aidp/harness/config_manager.rb', line 138 def load_balancing_config( = {}) harness_config = harness_config() lb_config = harness_config[:load_balancing] || harness_config["load_balancing"] || {} { enabled: lb_config[:enabled] != false, strategy: lb_config[:strategy] || "weighted_round_robin", health_check_interval: lb_config[:health_check_interval] || 30, unhealthy_threshold: lb_config[:unhealthy_threshold] || 3 } end |
#max_retries(options = {}) ⇒ Object
Get max retries (alias for backward compatibility with ErrorHandler)
107 108 109 |
# File 'lib/aidp/harness/config_manager.rb', line 107 def max_retries( = {}) retry_config()[:max_attempts] end |
#metrics_config(options = {}) ⇒ Object
Get metrics configuration
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/aidp/harness/config_manager.rb', line 178 def metrics_config( = {}) harness_config = harness_config() metrics_config = harness_config[:metrics] || harness_config["metrics"] || {} { enabled: metrics_config[:enabled] != false, retention_days: metrics_config[:retention_days] || 30, aggregation_interval: metrics_config[:aggregation_interval] || 300, export_interval: metrics_config[:export_interval] || 3600 } end |
#model_switching_config(options = {}) ⇒ Object
Get model switching configuration
151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/aidp/harness/config_manager.rb', line 151 def model_switching_config( = {}) harness_config = harness_config() ms_config = harness_config[:model_switching] || harness_config["model_switching"] || {} { enabled: ms_config[:enabled] != false, auto_switch_on_error: ms_config[:auto_switch_on_error] != false, auto_switch_on_rate_limit: ms_config[:auto_switch_on_rate_limit] != false, fallback_strategy: ms_config[:fallback_strategy] || "sequential" } end |
#provider_auth_config(provider_name, options = {}) ⇒ Object
Get provider auth configuration
306 307 308 309 310 311 312 313 314 315 316 |
# File 'lib/aidp/harness/config_manager.rb', line 306 def provider_auth_config(provider_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config auth = provider_config[:auth] || provider_config["auth"] || {} { api_key_env: auth[:api_key_env] || auth["api_key_env"], api_key: auth[:api_key] || auth["api_key"] } end |
#provider_config(provider_name, options = {}) ⇒ Object
Get provider configuration
44 45 46 47 48 49 50 |
# File 'lib/aidp/harness/config_manager.rb', line 44 def provider_config(provider_name, = {}) config = config() return nil unless config providers = config[:providers] || {} providers[provider_name.to_sym] || providers[provider_name.to_s] end |
#provider_default_flags(provider_name, options = {}) ⇒ Object
Get provider default flags
297 298 299 300 301 302 303 |
# File 'lib/aidp/harness/config_manager.rb', line 297 def provider_default_flags(provider_name, = {}) provider_config = provider_config(provider_name, ) return [] unless provider_config flags = provider_config[:default_flags] || provider_config["default_flags"] || [] flags.map(&:to_s) end |
#provider_endpoints(provider_name, options = {}) ⇒ Object
Get provider endpoints
319 320 321 322 323 324 325 326 327 328 |
# File 'lib/aidp/harness/config_manager.rb', line 319 def provider_endpoints(provider_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config endpoints = provider_config[:endpoints] || provider_config["endpoints"] || {} { default: endpoints[:default] || endpoints["default"] } end |
#provider_features(provider_name, options = {}) ⇒ Object
Get provider features
237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/aidp/harness/config_manager.rb', line 237 def provider_features(provider_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config features = provider_config[:features] || provider_config["features"] || {} { file_upload: features[:file_upload] == true, code_generation: features[:code_generation] != false, analysis: features[:analysis] != false, vision: features[:vision] == true } end |
#provider_max_tokens(provider_name, options = {}) ⇒ Object
Get provider max tokens
289 290 291 292 293 294 |
# File 'lib/aidp/harness/config_manager.rb', line 289 def provider_max_tokens(provider_name, = {}) provider_config = provider_config(provider_name, ) return nil unless provider_config provider_config[:max_tokens] || provider_config["max_tokens"] end |
#provider_model_config(provider_name, model_name, options = {}) ⇒ Object
Get provider model configuration
222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/aidp/harness/config_manager.rb', line 222 def provider_model_config(provider_name, model_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config models_config = provider_config[:models_config] || provider_config["models_config"] || {} model_config = models_config[model_name.to_sym] || models_config[model_name.to_s] || {} { flags: model_config[:flags] || model_config["flags"] || [], max_tokens: model_config[:max_tokens] || model_config["max_tokens"], timeout: model_config[:timeout] || model_config["timeout"] } end |
#provider_model_weights(provider_name, options = {}) ⇒ Object
Get provider model weights
213 214 215 216 217 218 219 |
# File 'lib/aidp/harness/config_manager.rb', line 213 def provider_model_weights(provider_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config weights = provider_config[:model_weights] || provider_config["model_weights"] || {} weights.transform_values { |weight| [weight.to_i, 1].max } end |
#provider_models(provider_name, options = {}) ⇒ Object
Get provider models
204 205 206 207 208 209 210 |
# File 'lib/aidp/harness/config_manager.rb', line 204 def provider_models(provider_name, = {}) provider_config = provider_config(provider_name, ) return [] unless provider_config models = provider_config[:models] || provider_config["models"] || [] models.map(&:to_s) end |
#provider_monitoring_config(provider_name, options = {}) ⇒ Object
Get provider monitoring configuration
252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/aidp/harness/config_manager.rb', line 252 def provider_monitoring_config(provider_name, = {}) provider_config = provider_config(provider_name, ) return {} unless provider_config monitoring = provider_config[:monitoring] || provider_config["monitoring"] || {} { enabled: monitoring[:enabled] != false, metrics_interval: monitoring[:metrics_interval] || 60 } end |
#provider_names(options = {}) ⇒ Object
Get configured provider names
61 62 63 64 |
# File 'lib/aidp/harness/config_manager.rb', line 61 def provider_names( = {}) providers = all_providers() providers.keys.map(&:to_s) end |
#provider_priority(provider_name, options = {}) ⇒ Object
Get provider priority
271 272 273 274 275 276 |
# File 'lib/aidp/harness/config_manager.rb', line 271 def provider_priority(provider_name, = {}) provider_config = provider_config(provider_name, ) return 1 unless provider_config provider_config[:priority] || provider_config["priority"] || 1 end |
#provider_supports_feature?(provider_name, feature, options = {}) ⇒ Boolean
Check if provider supports feature
265 266 267 268 |
# File 'lib/aidp/harness/config_manager.rb', line 265 def provider_supports_feature?(provider_name, feature, = {}) features = provider_features(provider_name, ) features[feature.to_sym] == true end |
#provider_type(provider_name, options = {}) ⇒ Object
Get provider type
279 280 281 282 283 284 |
# File 'lib/aidp/harness/config_manager.rb', line 279 def provider_type(provider_name, = {}) provider_config = provider_config(provider_name, ) return nil unless provider_config provider_config[:type] || provider_config["type"] end |
#provider_weights(options = {}) ⇒ Object
Get provider weights
83 84 85 86 87 88 89 |
# File 'lib/aidp/harness/config_manager.rb', line 83 def provider_weights( = {}) harness_config = harness_config() weights = harness_config[:provider_weights] || harness_config["provider_weights"] || {} # Normalize weights to ensure they're positive integers weights.transform_values { |weight| [weight.to_i, 1].max } end |
#rate_limit_config(options = {}) ⇒ Object
Get rate limit configuration
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/aidp/harness/config_manager.rb', line 125 def rate_limit_config( = {}) harness_config = harness_config() rate_limit_config = harness_config[:rate_limit] || harness_config["rate_limit"] || {} { enabled: rate_limit_config[:enabled] != false, default_reset_time: rate_limit_config[:default_reset_time] || 3600, burst_limit: rate_limit_config[:burst_limit] || 10, sustained_limit: rate_limit_config[:sustained_limit] || 5 } end |
#reload_config ⇒ Object
Reload configuration
346 347 348 349 350 |
# File 'lib/aidp/harness/config_manager.rb', line 346 def reload_config @cache.clear = nil @loader.reload_config end |
#retry_config(options = {}) ⇒ Object
Get retry configuration
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/aidp/harness/config_manager.rb', line 92 def retry_config( = {}) harness_config = harness_config() retry_config = harness_config[:retry] || harness_config["retry"] || {} { enabled: retry_config[:enabled] != false, max_attempts: retry_config[:max_attempts] || 3, base_delay: retry_config[:base_delay] || 1.0, max_delay: retry_config[:max_delay] || 60.0, exponential_base: retry_config[:exponential_base] || 2.0, jitter: retry_config[:jitter] != false } end |
#session_config(options = {}) ⇒ Object
Get session configuration
191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/aidp/harness/config_manager.rb', line 191 def session_config( = {}) harness_config = harness_config() session_config = harness_config[:session] || harness_config["session"] || {} { enabled: session_config[:enabled] != false, timeout: session_config[:timeout] || 1800, sticky_sessions: session_config[:sticky_sessions] != false, session_affinity: session_config[:session_affinity] || "provider_model" } end |
#validation_errors ⇒ Object
Get validation errors
336 337 338 |
# File 'lib/aidp/harness/config_manager.rb', line 336 def validation_errors @loader.validation_errors end |
#validation_warnings ⇒ Object
Get validation warnings
341 342 343 |
# File 'lib/aidp/harness/config_manager.rb', line 341 def validation_warnings @loader.validation_warnings end |