Module: Ace::Support::Models

Defined in:
lib/ace/support/models/cli.rb,
lib/ace/support/models/errors.rb,
lib/ace/support/models/models.rb,
lib/ace/support/models/version.rb,
lib/ace/support/models/atoms/api_fetcher.rb,
lib/ace/support/models/atoms/file_reader.rb,
lib/ace/support/models/atoms/file_writer.rb,
lib/ace/support/models/atoms/json_parser.rb,
lib/ace/support/models/cli/commands/info.rb,
lib/ace/support/models/cli/providers_cli.rb,
lib/ace/support/models/models/model_info.rb,
lib/ace/support/models/atoms/model_filter.rb,
lib/ace/support/models/models/diff_result.rb,
lib/ace/support/models/cli/commands/search.rb,
lib/ace/support/models/models/pricing_info.rb,
lib/ace/support/models/models/provider_info.rb,
lib/ace/support/models/cli/commands/cache/diff.rb,
lib/ace/support/models/cli/commands/cache/sync.rb,
lib/ace/support/models/molecules/cache_manager.rb,
lib/ace/support/models/cli/commands/cache/clear.rb,
lib/ace/support/models/cli/commands/models/cost.rb,
lib/ace/support/models/cli/commands/models/info.rb,
lib/ace/support/models/molecules/diff_generator.rb,
lib/ace/support/models/molecules/model_searcher.rb,
lib/ace/support/models/atoms/cache_path_resolver.rb,
lib/ace/support/models/cli/commands/cache/status.rb,
lib/ace/support/models/molecules/cost_calculator.rb,
lib/ace/support/models/molecules/model_validator.rb,
lib/ace/support/models/cli/commands/models/search.rb,
lib/ace/support/models/cli/commands/sync_shortcut.rb,
lib/ace/support/models/cli/commands/providers/list.rb,
lib/ace/support/models/cli/commands/providers/show.rb,
lib/ace/support/models/cli/commands/providers/sync.rb,
lib/ace/support/models/organisms/sync_orchestrator.rb,
lib/ace/support/models/atoms/provider_config_reader.rb,
lib/ace/support/models/atoms/provider_config_writer.rb,
lib/ace/support/models/molecules/provider_sync_diff.rb,
lib/ace/support/models/atoms/model_name_canonicalizer.rb,
lib/ace/support/models/organisms/provider_sync_orchestrator.rb

Defined Under Namespace

Modules: Atoms, CLI, Models, Molecules, Organisms, ProvidersCLI Classes: ApiError, CacheError, ConfigError, Error, ModelNotFoundError, NetworkError, ProviderNotFoundError, ValidationError

Constant Summary collapse

API_URL =
"https://models.dev/api.json"
VERSION =
"0.11.2"

Class Method Summary collapse

Class Method Details

.cache_dirString

Get the default cache directory

Returns:

  • (String)

    Path to cache directory



45
46
47
# File 'lib/ace/support/models/models.rb', line 45

def cache_dir
  Atoms::CachePathResolver.resolve
end

.cost(model_id, input_tokens:, output_tokens:, reasoning_tokens: 0) ⇒ Hash

Calculate cost for a query

Parameters:

  • model_id (String)

    Model ID

  • input_tokens (Integer)

    Input token count

  • output_tokens (Integer)

    Output token count

  • reasoning_tokens (Integer) (defaults to: 0)

    Reasoning token count (optional)

Returns:

  • (Hash)

    Cost breakdown



80
81
82
83
84
85
86
87
# File 'lib/ace/support/models/models.rb', line 80

def cost(model_id, input_tokens:, output_tokens:, reasoning_tokens: 0)
  Molecules::CostCalculator.new.calculate(
    model_id,
    input_tokens: input_tokens,
    output_tokens: output_tokens,
    reasoning_tokens: reasoning_tokens
  )
end

.diffModels::DiffResult

Get diff between cached versions

Returns:



91
92
93
# File 'lib/ace/support/models/models.rb', line 91

def diff
  Molecules::DiffGenerator.new.generate
end

.sync(force: false) ⇒ Hash

Sync models from API

Parameters:

  • force (Boolean) (defaults to: false)

    Force sync even if cache is fresh

Returns:

  • (Hash)

    Sync result with stats



52
53
54
# File 'lib/ace/support/models/models.rb', line 52

def sync(force: false)
  Organisms::SyncOrchestrator.new.sync(force: force)
end

.valid?(model_id) ⇒ Boolean

Validate a model exists (returns boolean, no exception)

Parameters:

  • model_id (String)

    Model ID in format provider:model

Returns:

  • (Boolean)

    true if valid, false otherwise



67
68
69
70
71
72
# File 'lib/ace/support/models/models.rb', line 67

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

.validate(model_id) ⇒ Boolean

Validate a model exists

Parameters:

  • model_id (String)

    Model ID in format provider:model

Returns:

  • (Boolean)

    true if valid

Raises:



60
61
62
# File 'lib/ace/support/models/models.rb', line 60

def validate(model_id)
  Molecules::ModelValidator.new.validate(model_id)
end