Class: Ace::Support::Models::Molecules::ModelValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/support/models/molecules/model_validator.rb

Overview

Validates model names against cached data

Constant Summary collapse

MAX_SUGGESTIONS =
5
MAX_LEVENSHTEIN_LENGTH =

Maximum string length for Levenshtein distance calculation. Prevents O(n*m) memory/time blowups on pathological inputs.

500

Instance Method Summary collapse

Constructor Details

#initialize(cache_manager: nil) ⇒ ModelValidator

Initialize validator

Parameters:

  • cache_manager (CacheManager, nil) (defaults to: nil)

    Cache manager instance



16
17
18
# File 'lib/ace/support/models/molecules/model_validator.rb', line 16

def initialize(cache_manager: nil)
  @cache_manager = cache_manager || CacheManager.new
end

Instance Method Details

#get(model_id) ⇒ Models::ModelInfo?

Get model info (returns nil instead of raising)

Parameters:

  • model_id (String)

    Model ID

Returns:



58
59
60
61
62
# File 'lib/ace/support/models/molecules/model_validator.rb', line 58

def get(model_id)
  validate(model_id)
rescue ModelNotFoundError, ProviderNotFoundError
  nil
end

#models_for(provider_id) ⇒ Array<String>

List models for a provider

Parameters:

  • provider_id (String)

    Provider ID

Returns:

  • (Array<String>)

    Model IDs



73
74
75
76
77
78
79
# File 'lib/ace/support/models/molecules/model_validator.rb', line 73

def models_for(provider_id)
  data = load_data
  provider_data = data[provider_id]
  return [] unless provider_data

  (provider_data["models"]&.keys || []).sort
end

#providersArray<String>

List all providers

Returns:

  • (Array<String>)

    Provider IDs



66
67
68
# File 'lib/ace/support/models/molecules/model_validator.rb', line 66

def providers
  load_data.keys.sort
end

#valid?(model_id) ⇒ Boolean

Check if model is valid (no exception)

Parameters:

  • model_id (String)

    Model ID

Returns:

  • (Boolean)


48
49
50
51
52
53
# File 'lib/ace/support/models/molecules/model_validator.rb', line 48

def valid?(model_id)
  validate(model_id)
  true
rescue ModelNotFoundError, ProviderNotFoundError
  false
end

#validate(model_id) ⇒ Models::ModelInfo

Validate a model exists

Parameters:

  • model_id (String)

    Model ID (provider:model or just model)

Returns:

Raises:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ace/support/models/molecules/model_validator.rb', line 26

def validate(model_id)
  validate_format!(model_id)
  data = load_data
  provider_id, model_name = parse_model_id(model_id)

  # Check provider exists
  provider_data = data[provider_id]
  raise ProviderNotFoundError, provider_id unless provider_data

  # Check model exists
  model_data = provider_data.dig("models", model_name)
  unless model_data
    suggestions = find_suggestions(provider_data["models"]&.keys || [], model_name)
    raise ModelNotFoundError.new("#{provider_id}:#{model_name}", suggestions: suggestions)
  end

  Models::ModelInfo.from_hash(model_data, provider_id: provider_id)
end