Class: Aidp::Harness::ProviderConfig
- Inherits:
-
Object
- Object
- Aidp::Harness::ProviderConfig
- Includes:
- ProviderTypeChecker
- Defined in:
- lib/aidp/harness/provider_config.rb
Overview
Provider-specific configuration management
Instance Method Summary collapse
-
#configured?(options = {}) ⇒ Boolean
Check if provider is configured.
-
#enabled?(options = {}) ⇒ Boolean
Check if provider is enabled.
-
#get_api_key(options = {}) ⇒ Object
Get API key from environment or config.
-
#get_auth_config(options = {}) ⇒ Object
Get authentication configuration.
-
#get_cache_config(options = {}) ⇒ Object
Get provider-specific cache configuration.
-
#get_capabilities(options = {}) ⇒ Object
Get provider capabilities.
-
#get_circuit_breaker_config(options = {}) ⇒ Object
Get circuit breaker configuration.
-
#get_cmd_args(options = {}) ⇒ Object
Get provider-specific command line arguments.
-
#get_combined_flags(model_name = nil, options = {}) ⇒ Object
Get combined flags (default + model-specific).
-
#get_config(options = {}) ⇒ Object
Get complete provider configuration.
-
#get_cost_config(options = {}) ⇒ Object
Get cost configuration.
-
#get_default_endpoint(options = {}) ⇒ Object
Get default endpoint.
-
#get_default_flags(options = {}) ⇒ Object
Get provider default flags.
-
#get_default_model(options = {}) ⇒ Object
Get default model.
-
#get_endpoints(options = {}) ⇒ Object
Get endpoints configuration.
-
#get_env_vars(options = {}) ⇒ Object
Get provider-specific environment variables.
-
#get_features(options = {}) ⇒ Object
Get provider features.
-
#get_harness_config(options = {}) ⇒ Object
Get provider-specific harness configuration.
-
#get_health_check_config(options = {}) ⇒ Object
Get provider health check configuration.
-
#get_log_config(options = {}) ⇒ Object
Get provider-specific log configuration.
-
#get_max_tokens(options = {}) ⇒ Object
Get provider max tokens.
-
#get_model_config(model_name, options = {}) ⇒ Object
Get model configuration.
-
#get_model_flags(model_name, options = {}) ⇒ Object
Get model-specific flags.
-
#get_model_weights(options = {}) ⇒ Object
Get model weights.
-
#get_models(options = {}) ⇒ Object
Get provider models.
-
#get_monitoring_config(options = {}) ⇒ Object
Get monitoring configuration.
-
#get_priority(options = {}) ⇒ Object
Get provider priority.
-
#get_rate_limit_config(options = {}) ⇒ Object
Get rate limiting configuration.
-
#get_retry_config(options = {}) ⇒ Object
Get retry configuration.
-
#get_security_config(options = {}) ⇒ Object
Get provider-specific security configuration.
-
#get_status(options = {}) ⇒ Object
Get provider status.
-
#get_summary(options = {}) ⇒ Object
Get provider summary.
-
#get_timeout(options = {}) ⇒ Object
Get provider timeout.
-
#get_type(options = {}) ⇒ Object
Get provider type (usage_based, subscription).
-
#get_working_directory(options = {}) ⇒ Object
Get provider-specific working directory.
-
#initialize(provider_name, config_manager = nil) ⇒ ProviderConfig
constructor
A new instance of ProviderConfig.
-
#reload_config ⇒ Object
Reload configuration.
-
#supports_feature?(feature, options = {}) ⇒ Boolean
Check if provider supports feature.
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(provider_name, config_manager = nil) ⇒ ProviderConfig
Returns a new instance of ProviderConfig.
12 13 14 15 16 17 18 |
# File 'lib/aidp/harness/provider_config.rb', line 12 def initialize(provider_name, config_manager = nil) @provider_name = provider_name.to_s @config_manager = config_manager || ConfigManager.new @provider_config = nil @harness_config = nil @cache_timestamp = nil end |
Instance Method Details
#configured?(options = {}) ⇒ Boolean
Check if provider is configured
371 372 373 374 |
# File 'lib/aidp/harness/provider_config.rb', line 371 def configured?( = {}) config = get_config() !config.empty? end |
#enabled?(options = {}) ⇒ Boolean
Check if provider is enabled
377 378 379 380 |
# File 'lib/aidp/harness/provider_config.rb', line 377 def enabled?( = {}) harness_config = get_harness_config() harness_config[:enabled] != false end |
#get_api_key(options = {}) ⇒ Object
Get API key from environment or config
168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/aidp/harness/provider_config.rb', line 168 def get_api_key( = {}) auth_config = get_auth_config() # Try environment variable first if auth_config[:api_key_env] api_key = ENV[auth_config[:api_key_env]] return api_key if api_key && !api_key.empty? end # Try direct config auth_config[:api_key] end |
#get_auth_config(options = {}) ⇒ Object
Get authentication configuration
152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/aidp/harness/provider_config.rb', line 152 def get_auth_config( = {}) config = get_config() auth = config[:auth] || config["auth"] || {} { api_key_env: auth[:api_key_env] || auth["api_key_env"], api_key: auth[:api_key] || auth["api_key"], api_key_file: auth[:api_key_file] || auth["api_key_file"], username: auth[:username] || auth["username"], password: auth[:password] || auth["password"], token: auth[:token] || auth["token"], credentials_file: auth[:credentials_file] || auth["credentials_file"] } end |
#get_cache_config(options = {}) ⇒ Object
Get provider-specific cache configuration
344 345 346 347 348 349 350 351 352 353 354 |
# File 'lib/aidp/harness/provider_config.rb', line 344 def get_cache_config( = {}) config = get_config() cache_config = config[:cache] || config["cache"] || {} { enabled: cache_config[:enabled] != false, ttl: cache_config[:ttl] || 3600, max_size: cache_config[:max_size] || 100, strategy: cache_config[:strategy] || "lru" } end |
#get_capabilities(options = {}) ⇒ Object
Get provider capabilities
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/aidp/harness/provider_config.rb', line 103 def get_capabilities( = {}) features = get_features() capabilities = [] capabilities << "file_upload" if features[:file_upload] capabilities << "code_generation" if features[:code_generation] capabilities << "analysis" if features[:analysis] capabilities << "vision" if features[:vision] capabilities << "streaming" if features[:streaming] capabilities << "function_calling" if features[:function_calling] capabilities << "tool_use" if features[:tool_use] capabilities end |
#get_circuit_breaker_config(options = {}) ⇒ Object
Get circuit breaker configuration
249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/aidp/harness/provider_config.rb', line 249 def get_circuit_breaker_config( = {}) config = get_config() cb_config = config[:circuit_breaker] || 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, success_threshold: cb_config[:success_threshold] || 2 } end |
#get_cmd_args(options = {}) ⇒ Object
Get provider-specific command line arguments
316 317 318 319 320 |
# File 'lib/aidp/harness/provider_config.rb', line 316 def get_cmd_args( = {}) config = get_config() cmd_args = config[:cmd_args] || config["cmd_args"] || [] cmd_args.map(&:to_s) end |
#get_combined_flags(model_name = nil, options = {}) ⇒ Object
Get combined flags (default + model-specific)
144 145 146 147 148 149 |
# File 'lib/aidp/harness/provider_config.rb', line 144 def get_combined_flags(model_name = nil, = {}) default_flags = get_default_flags() model_flags = model_name ? get_model_flags(model_name, ) : [] (default_flags + model_flags).uniq end |
#get_config(options = {}) ⇒ Object
Get complete provider configuration
21 22 23 24 25 26 27 28 29 |
# File 'lib/aidp/harness/provider_config.rb', line 21 def get_config( = {}) return @provider_config if @provider_config && ![:force_reload] && cache_valid? @provider_config = @config_manager.get_provider_config(@provider_name, ) @harness_config = @config_manager.get_harness_config() @cache_timestamp = Time.now @provider_config || {} end |
#get_cost_config(options = {}) ⇒ Object
Get cost configuration
263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/aidp/harness/provider_config.rb', line 263 def get_cost_config( = {}) config = get_config() cost = config[:cost] || config["cost"] || {} { input_cost_per_token: cost[:input_cost_per_token] || cost["input_cost_per_token"], output_cost_per_token: cost[:output_cost_per_token] || cost["output_cost_per_token"], fixed_cost_per_request: cost[:fixed_cost_per_request] || cost["fixed_cost_per_request"], currency: cost[:currency] || cost["currency"] || "USD" } end |
#get_default_endpoint(options = {}) ⇒ Object
Get default endpoint
196 197 198 199 |
# File 'lib/aidp/harness/provider_config.rb', line 196 def get_default_endpoint( = {}) endpoints = get_endpoints() endpoints[:default] end |
#get_default_flags(options = {}) ⇒ Object
Get provider default flags
131 132 133 134 135 |
# File 'lib/aidp/harness/provider_config.rb', line 131 def get_default_flags( = {}) config = get_config() flags = config[:default_flags] || config["default_flags"] || [] flags.map(&:to_s) end |
#get_default_model(options = {}) ⇒ Object
Get default model
53 54 55 56 |
# File 'lib/aidp/harness/provider_config.rb', line 53 def get_default_model( = {}) models = get_models() models.first end |
#get_endpoints(options = {}) ⇒ Object
Get endpoints configuration
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/aidp/harness/provider_config.rb', line 182 def get_endpoints( = {}) config = get_config() endpoints = config[:endpoints] || config["endpoints"] || {} { default: endpoints[:default] || endpoints["default"], chat: endpoints[:chat] || endpoints["chat"], completion: endpoints[:completion] || endpoints["completion"], embedding: endpoints[:embedding] || endpoints["embedding"], vision: endpoints[:vision] || endpoints["vision"] } end |
#get_env_vars(options = {}) ⇒ Object
Get provider-specific environment variables
307 308 309 310 311 312 313 |
# File 'lib/aidp/harness/provider_config.rb', line 307 def get_env_vars( = {}) config = get_config() env_vars = config[:env_vars] || config["env_vars"] || {} # Convert to string keys for environment variable access env_vars.transform_keys(&:to_s) end |
#get_features(options = {}) ⇒ Object
Get provider features
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/aidp/harness/provider_config.rb', line 81 def get_features( = {}) config = get_config() features = config[:features] || config["features"] || {} { file_upload: features[:file_upload] == true, code_generation: features[:code_generation] != false, analysis: features[:analysis] != false, vision: features[:vision] == true, streaming: features[:streaming] != false, function_calling: features[:function_calling] == true, tool_use: features[:tool_use] == true } end |
#get_harness_config(options = {}) ⇒ Object
Get provider-specific harness configuration
276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/aidp/harness/provider_config.rb', line 276 def get_harness_config( = {}) config = get_config() harness_config = config[:harness] || config["harness"] || {} { enabled: harness_config[:enabled] != false, auto_switch_on_error: harness_config[:auto_switch_on_error] != false, auto_switch_on_rate_limit: harness_config[:auto_switch_on_rate_limit] != false, priority: harness_config[:priority] || get_priority(), weight: harness_config[:weight] || 1, max_concurrent_requests: harness_config[:max_concurrent_requests] || 5 } end |
#get_health_check_config(options = {}) ⇒ Object
Get provider health check configuration
291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/aidp/harness/provider_config.rb', line 291 def get_health_check_config( = {}) config = get_config() health_check = config[:health_check] || config["health_check"] || {} { enabled: health_check[:enabled] != false, interval: health_check[:interval] || 60, timeout: health_check[:timeout] || 10, failure_threshold: health_check[:failure_threshold] || 3, success_threshold: health_check[:success_threshold] || 2, check_url: health_check[:check_url] || health_check["check_url"], check_prompt: health_check[:check_prompt] || health_check["check_prompt"] } end |
#get_log_config(options = {}) ⇒ Object
Get provider-specific log configuration
329 330 331 332 333 334 335 336 337 338 339 340 341 |
# File 'lib/aidp/harness/provider_config.rb', line 329 def get_log_config( = {}) config = get_config() log_config = config[:log] || config["log"] || {} { enabled: log_config[:enabled] != false, level: log_config[:level] || "info", file: log_config[:file] || log_config["file"], max_size: log_config[:max_size] || 10_485_760, # 10MB max_files: log_config[:max_files] || 5, format: log_config[:format] || "json" } end |
#get_max_tokens(options = {}) ⇒ Object
Get provider max tokens
119 120 121 122 |
# File 'lib/aidp/harness/provider_config.rb', line 119 def get_max_tokens( = {}) config = get_config() config[:max_tokens] || config["max_tokens"] end |
#get_model_config(model_name, options = {}) ⇒ Object
Get model configuration
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/aidp/harness/provider_config.rb', line 66 def get_model_config(model_name, = {}) config = get_config() models_config = config[:models_config] || 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"], temperature: model_config[:temperature] || model_config["temperature"], max_retries: model_config[:max_retries] || model_config["max_retries"] } end |
#get_model_flags(model_name, options = {}) ⇒ Object
Get model-specific flags
138 139 140 141 |
# File 'lib/aidp/harness/provider_config.rb', line 138 def get_model_flags(model_name, = {}) model_config = get_model_config(model_name, ) model_config[:flags] || [] end |
#get_model_weights(options = {}) ⇒ Object
Get model weights
59 60 61 62 63 |
# File 'lib/aidp/harness/provider_config.rb', line 59 def get_model_weights( = {}) config = get_config() weights = config[:model_weights] || config["model_weights"] || {} weights.transform_values { |weight| [weight.to_i, 1].max } end |
#get_models(options = {}) ⇒ Object
Get provider models
46 47 48 49 50 |
# File 'lib/aidp/harness/provider_config.rb', line 46 def get_models( = {}) config = get_config() models = config[:models] || config["models"] || [] models.map(&:to_s) end |
#get_monitoring_config(options = {}) ⇒ Object
Get monitoring configuration
202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/aidp/harness/provider_config.rb', line 202 def get_monitoring_config( = {}) config = get_config() monitoring = config[:monitoring] || config["monitoring"] || {} { enabled: monitoring[:enabled] != false, metrics_interval: monitoring[:metrics_interval] || 60, health_check_interval: monitoring[:health_check_interval] || 300, log_level: monitoring[:log_level] || "info", log_requests: monitoring[:log_requests] != false, log_responses: monitoring[:log_responses] == true } end |
#get_priority(options = {}) ⇒ Object
Get provider priority
40 41 42 43 |
# File 'lib/aidp/harness/provider_config.rb', line 40 def get_priority( = {}) config = get_config() config[:priority] || config["priority"] || 1 end |
#get_rate_limit_config(options = {}) ⇒ Object
Get rate limiting configuration
217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/aidp/harness/provider_config.rb', line 217 def get_rate_limit_config( = {}) config = get_config() rate_limit = config[:rate_limit] || config["rate_limit"] || {} { enabled: rate_limit[:enabled] != false, requests_per_minute: rate_limit[:requests_per_minute] || 60, requests_per_hour: rate_limit[:requests_per_hour] || 1000, tokens_per_minute: rate_limit[:tokens_per_minute], tokens_per_hour: rate_limit[:tokens_per_hour], burst_limit: rate_limit[:burst_limit] || 10, reset_time: rate_limit[:reset_time] || 3600 } end |
#get_retry_config(options = {}) ⇒ Object
Get retry configuration
233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/aidp/harness/provider_config.rb', line 233 def get_retry_config( = {}) config = get_config() retry_config = config[:retry] || 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, retry_on_rate_limit: retry_config[:retry_on_rate_limit] == true } end |
#get_security_config(options = {}) ⇒ Object
Get provider-specific security configuration
357 358 359 360 361 362 363 364 365 366 367 368 |
# File 'lib/aidp/harness/provider_config.rb', line 357 def get_security_config( = {}) config = get_config() security = config[:security] || config["security"] || {} { ssl_verify: security[:ssl_verify] != false, allowed_hosts: security[:allowed_hosts] || security["allowed_hosts"] || [], blocked_hosts: security[:blocked_hosts] || security["blocked_hosts"] || [], timeout: security[:timeout] || 30, max_redirects: security[:max_redirects] || 5 } end |
#get_status(options = {}) ⇒ Object
Get provider status
383 384 385 386 387 388 |
# File 'lib/aidp/harness/provider_config.rb', line 383 def get_status( = {}) return :not_configured unless configured?() return :disabled unless enabled?() :enabled end |
#get_summary(options = {}) ⇒ Object
Get provider summary
391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 |
# File 'lib/aidp/harness/provider_config.rb', line 391 def get_summary( = {}) config = get_config() return {} if config.empty? { name: @provider_name, type: get_type(), priority: get_priority(), models: get_models(), features: get_capabilities(), status: get_status(), configured: configured?(), enabled: enabled?() } end |
#get_timeout(options = {}) ⇒ Object
Get provider timeout
125 126 127 128 |
# File 'lib/aidp/harness/provider_config.rb', line 125 def get_timeout( = {}) config = get_config() config[:timeout] || config["timeout"] || 300 end |
#get_type(options = {}) ⇒ Object
Get provider type (usage_based, subscription)
32 33 34 35 |
# File 'lib/aidp/harness/provider_config.rb', line 32 def get_type( = {}) config = get_config() config[:type] || config["type"] || "subscription" end |
#get_working_directory(options = {}) ⇒ Object
Get provider-specific working directory
323 324 325 326 |
# File 'lib/aidp/harness/provider_config.rb', line 323 def get_working_directory( = {}) config = get_config() config[:working_directory] || config["working_directory"] || Dir.pwd end |
#reload_config ⇒ Object
Reload configuration
408 409 410 411 412 413 |
# File 'lib/aidp/harness/provider_config.rb', line 408 def reload_config @provider_config = nil @harness_config = nil @cache_timestamp = nil @config_manager.reload_config end |
#supports_feature?(feature, options = {}) ⇒ Boolean
Check if provider supports feature
97 98 99 100 |
# File 'lib/aidp/harness/provider_config.rb', line 97 def supports_feature?(feature, = {}) features = get_features() features[feature.to_sym] == true end |