Module: Aidp::Harness::ProviderTypeChecker

Included in:
ConfigManager, ProviderConfig
Defined in:
lib/aidp/harness/provider_type_checker.rb

Overview

Shared module for provider type checking functionality This eliminates duplication across ProviderConfig and ConfigManager

Instance Method Summary collapse

Instance Method Details

#get_provider_type(provider_name, options = {}) ⇒ Object

Get provider type with fallback to subscription (ConfigManager signature)



44
45
46
47
48
49
# File 'lib/aidp/harness/provider_type_checker.rb', line 44

def get_provider_type(provider_name, options = {})
  provider_config = provider_config(provider_name, options)
  return "subscription" unless provider_config

  provider_config[:type] || provider_config["type"] || "subscription"
end

#get_underlying_service(provider_name_or_options = {}, options = {}) ⇒ Object

Get underlying service name for passthrough providers



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/aidp/harness/provider_type_checker.rb', line 73

def get_underlying_service(provider_name_or_options = {}, options = {})
  return nil unless passthrough_provider?(provider_name_or_options, options)

  if provider_name_or_options.is_a?(String) || provider_name_or_options.is_a?(Symbol)
    provider_name = provider_name_or_options
    provider_config = provider_config(provider_name, options)
  else
    options = provider_name_or_options
    provider_config = get_config(options)
  end

  provider_config[:underlying_service] || provider_config["underlying_service"]
end

#has_underlying_service?(provider_name_or_options = {}, options = {}) ⇒ Boolean

Check if provider has underlying service (passthrough)

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/aidp/harness/provider_type_checker.rb', line 57

def has_underlying_service?(provider_name_or_options = {}, options = {})
  return false unless passthrough_provider?(provider_name_or_options, options)

  if provider_name_or_options.is_a?(String) || provider_name_or_options.is_a?(Symbol)
    provider_name = provider_name_or_options
    provider_config = provider_config(provider_name, options)
  else
    options = provider_name_or_options
    provider_config = get_config(options)
  end

  underlying_service = provider_config[:underlying_service] || provider_config["underlying_service"]
  !underlying_service.nil? && !underlying_service.empty?
end

#passthrough_provider?(provider_name_or_options = {}, options = {}) ⇒ Boolean

Check if provider is passthrough (inherits billing from underlying service)

Returns:

  • (Boolean)


33
34
35
36
37
38
39
40
41
# File 'lib/aidp/harness/provider_type_checker.rb', line 33

def passthrough_provider?(provider_name_or_options = {}, options = {})
  if provider_name_or_options.is_a?(String) || provider_name_or_options.is_a?(Symbol)
    provider_name = provider_name_or_options
    get_provider_type(provider_name, options) == "passthrough"
  else
    options = provider_name_or_options
    type(options) == "passthrough"
  end
end

#requires_api_key?(provider_name_or_options = {}, options = {}) ⇒ Boolean

Check if provider requires API key

Returns:

  • (Boolean)


52
53
54
# File 'lib/aidp/harness/provider_type_checker.rb', line 52

def requires_api_key?(provider_name_or_options = {}, options = {})
  usage_based_provider?(provider_name_or_options, options)
end

#subscription_provider?(provider_name_or_options = {}, options = {}) ⇒ Boolean

Check if provider is subscription-based (unlimited within limits)

Returns:

  • (Boolean)


22
23
24
25
26
27
28
29
30
# File 'lib/aidp/harness/provider_type_checker.rb', line 22

def subscription_provider?(provider_name_or_options = {}, options = {})
  if provider_name_or_options.is_a?(String) || provider_name_or_options.is_a?(Symbol)
    provider_name = provider_name_or_options
    get_provider_type(provider_name, options) == "subscription"
  else
    options = provider_name_or_options
    type(options) == "subscription"
  end
end

#usage_based_provider?(provider_name_or_options = {}, options = {}) ⇒ Boolean

Check if provider is usage-based (pay per token)

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
17
18
19
# File 'lib/aidp/harness/provider_type_checker.rb', line 9

def usage_based_provider?(provider_name_or_options = {}, options = {})
  # Handle both ConfigManager (provider_name, options) and ProviderConfig (options) signatures
  if provider_name_or_options.is_a?(String) || provider_name_or_options.is_a?(Symbol)
    provider_name = provider_name_or_options
    get_provider_type(provider_name, options) == "usage_based"
  else
    # ProviderConfig signature: usage_based_provider?(options)
    options = provider_name_or_options
    type(options) == "usage_based"
  end
end