Class: Ace::LLM::Molecules::ProviderModelParser

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/llm/molecules/provider_model_parser.rb

Overview

ProviderModelParser handles parsing and validation of provider:model syntax for the unified LLM query interface.

Defined Under Namespace

Classes: ParseResult

Constant Summary collapse

THINKING_LEVELS =
%w[low medium high xhigh].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(alias_resolver: nil, registry: nil) ⇒ ProviderModelParser

Returns a new instance of ProviderModelParser.



34
35
36
37
38
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 34

def initialize(alias_resolver: nil, registry: nil)
  @alias_resolver = alias_resolver || LlmAliasResolver.new
  @registry = registry || ClientRegistry.new
  @role_resolver = RoleResolver.new(registry: @registry)
end

Instance Attribute Details

#alias_resolverObject (readonly)

Returns the value of attribute alias_resolver.



32
33
34
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 32

def alias_resolver
  @alias_resolver
end

#registryObject (readonly)

Returns the value of attribute registry.



32
33
34
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 32

def registry
  @registry
end

Instance Method Details

#default_model_for(provider) ⇒ Object



58
59
60
61
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 58

def default_model_for(provider)
  models = @registry.models_for_provider(provider)
  models&.first
end

#dynamic_aliasesObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 63

def dynamic_aliases
  return {} unless @alias_resolver

  global = @alias_resolver.available_aliases[:global] || {}
  providers = @alias_resolver.available_aliases[:providers] || {}

  flattened = {}
  providers.each do |provider, aliases|
    aliases.each do |alias_name, model|
      flattened["#{provider}:#{alias_name}"] = "#{provider}:#{model}"
    end
  end

  global.merge(flattened)
end

#parse(input) ⇒ Object

Parse a provider:model string or alias.



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 41

def parse(input)
  return create_error_result(input, "Input cannot be nil or empty") if input.nil? || input.strip.empty?

  original_input = input.strip
  if role_reference?(original_input)
    return parse_role_reference(original_input)
  end

  parse_standard_target(original_input)
rescue Ace::LLM::ConfigurationError => e
  create_error_result(original_input, e.message)
end

#supported_providersObject



54
55
56
# File 'lib/ace/llm/molecules/provider_model_parser.rb', line 54

def supported_providers
  @registry.available_providers
end