Class: Ace::LLM::Molecules::ModelLimitResolver

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

Overview

Resolves model context/output limits against the expanded concrete target.

Defined Under Namespace

Classes: ResolveResult

Constant Summary collapse

DEFAULT_CONTEXT_LIMIT =
200_000

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(registry: nil, parser: nil) ⇒ ModelLimitResolver

Returns a new instance of ModelLimitResolver.



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

def initialize(registry: nil, parser: nil)
  @registry = registry || ClientRegistry.new
  @parser = parser || ProviderModelParser.new(registry: @registry)
end

Class Method Details

.resolve(target, **kwargs) ⇒ Object



30
31
32
# File 'lib/ace/llm/molecules/model_limit_resolver.rb', line 30

def self.resolve(target, **kwargs)
  new(**kwargs).resolve(target)
end

Instance Method Details

#resolve(target) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ace/llm/molecules/model_limit_resolver.rb', line 39

def resolve(target)
  original_target = target.to_s
  return fallback_result(original_target) if original_target.strip.empty?

  parsed = @parser.parse(original_target)
  return fallback_result(original_target) if parsed.invalid?

  provider_config = @registry.get_provider(parsed.provider)
  return fallback_result(original_target, provider: parsed.provider, model: parsed.model) unless provider_config

  limits = Ace::Support::Models::Atoms::ProviderConfigReader.extract_limits(provider_config)
  default_limits = limits["default"] || {}
  model_limits = limits.dig("models", parsed.model) || {}
  merged_limits = default_limits.merge(model_limits)

  ResolveResult.new(
    provider: parsed.provider,
    model: parsed.model,
    context_limit: merged_limits["context"] || DEFAULT_CONTEXT_LIMIT,
    output_limit: merged_limits["output"],
    source: limit_source(default_limits, model_limits),
    original_target: original_target
  )
rescue
  fallback_result(original_target)
end