Class: Aidp::Database::Repositories::DeprecatedModelsRepository

Inherits:
Aidp::Database::Repository show all
Defined in:
lib/aidp/database/repositories/deprecated_models_repository.rb

Overview

Repository for deprecated models cache Replaces: .aidp/deprecated_models.json

Tracks models that have been deprecated by providers at runtime

Instance Attribute Summary

Attributes inherited from Aidp::Database::Repository

#project_dir, #table_name

Instance Method Summary collapse

Constructor Details

#initialize(project_dir: Dir.pwd) ⇒ DeprecatedModelsRepository

Returns a new instance of DeprecatedModelsRepository.



13
14
15
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 13

def initialize(project_dir: Dir.pwd)
  super(project_dir: project_dir, table_name: "deprecated_models")
end

Instance Method Details

#add(provider_name:, model_name:, replacement: nil, reason: nil) ⇒ Boolean

Add a deprecated model to the cache

Parameters:

  • provider_name (String)

    Provider name (e.g., "anthropic")

  • model_name (String)

    Deprecated model ID

  • replacement (String, nil) (defaults to: nil)

    Replacement model ID

  • reason (String, nil) (defaults to: nil)

    Deprecation reason

Returns:

  • (Boolean)

    Success status



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 24

def add(provider_name:, model_name:, replacement: nil, reason: nil)
  Aidp.log_debug("deprecated_models_repo", "add",
    provider: provider_name, model: model_name, replacement: replacement)

  execute(<<~SQL, [project_dir, provider_name, model_name, replacement, reason, current_timestamp])
    INSERT INTO #{table_name}
      (project_dir, provider_name, model_name, replacement, reason, detected_at)
    VALUES (?, ?, ?, ?, ?, ?)
    ON CONFLICT(project_dir, provider_name, model_name) DO UPDATE SET
      replacement = excluded.replacement,
      reason = excluded.reason,
      detected_at = excluded.detected_at
  SQL

  Aidp.log_info("deprecated_models_repo", "added_deprecated_model",
    provider: provider_name, model: model_name, replacement: replacement)
  true
rescue => e
  Aidp.log_error("deprecated_models_repo", "add_failed",
    provider: provider_name, model: model_name, error: e.message)
  false
end

#clear!Object

Clear all deprecations for project



126
127
128
129
130
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 126

def clear!
  Aidp.log_debug("deprecated_models_repo", "clear")
  delete_by_project
  Aidp.log_info("deprecated_models_repo", "cleared_all")
end

#deprecated?(provider_name:, model_name:) ⇒ Boolean

Check if a model is deprecated

Parameters:

  • provider_name (String)

    Provider name

  • model_name (String)

    Model ID to check

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 52

def deprecated?(provider_name:, model_name:)
  result = query_value(<<~SQL, [project_dir, provider_name, model_name])
    SELECT 1 FROM #{table_name}
    WHERE project_dir = ? AND provider_name = ? AND model_name = ?
  SQL

  !result.nil?
end

#deprecated_models(provider_name:) ⇒ Array<String>

Get all deprecated models for a provider

Parameters:

  • provider_name (String)

    Provider name

Returns:

  • (Array<String>)

    List of deprecated model IDs



77
78
79
80
81
82
83
84
85
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 77

def deprecated_models(provider_name:)
  rows = query(<<~SQL, [project_dir, provider_name])
    SELECT model_name FROM #{table_name}
    WHERE project_dir = ? AND provider_name = ?
    ORDER BY model_name
  SQL

  rows.map { |row| row["model_name"] }
end

#info(provider_name:, model_name:) ⇒ Hash?

Get full deprecation info for a model

Parameters:

  • provider_name (String)

    Provider name

  • model_name (String)

    Model ID

Returns:

  • (Hash, nil)

    Deprecation metadata or nil



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 92

def info(provider_name:, model_name:)
  row = query_one(<<~SQL, [project_dir, provider_name, model_name])
    SELECT replacement, reason, detected_at
    FROM #{table_name}
    WHERE project_dir = ? AND provider_name = ? AND model_name = ?
  SQL

  return nil unless row

  {
    replacement: row["replacement"],
    reason: row["reason"],
    detected_at: row["detected_at"]
  }
end

#list_allArray<Hash>

List all deprecated models with full info

Returns:

  • (Array<Hash>)

    All deprecated models



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 165

def list_all
  rows = query(<<~SQL, [project_dir])
    SELECT provider_name, model_name, replacement, reason, detected_at
    FROM #{table_name}
    WHERE project_dir = ?
    ORDER BY provider_name, model_name
  SQL

  rows.map do |row|
    {
      provider: row["provider_name"],
      model: row["model_name"],
      replacement: row["replacement"],
      reason: row["reason"],
      detected_at: row["detected_at"]
    }
  end
end

#remove(provider_name:, model_name:) ⇒ Object

Remove a model from the deprecated cache

Parameters:

  • provider_name (String)

    Provider name

  • model_name (String)

    Model ID to remove



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 112

def remove(provider_name:, model_name:)
  Aidp.log_debug("deprecated_models_repo", "remove",
    provider: provider_name, model: model_name)

  execute(<<~SQL, [project_dir, provider_name, model_name])
    DELETE FROM #{table_name}
    WHERE project_dir = ? AND provider_name = ? AND model_name = ?
  SQL

  Aidp.log_info("deprecated_models_repo", "removed_deprecated_model",
    provider: provider_name, model: model_name)
end

#replacement_for(provider_name:, model_name:) ⇒ String?

Get replacement model for a deprecated model

Parameters:

  • provider_name (String)

    Provider name

  • model_name (String)

    Deprecated model ID

Returns:

  • (String, nil)

    Replacement model ID or nil



66
67
68
69
70
71
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 66

def replacement_for(provider_name:, model_name:)
  query_value(<<~SQL, [project_dir, provider_name, model_name])
    SELECT replacement FROM #{table_name}
    WHERE project_dir = ? AND provider_name = ? AND model_name = ?
  SQL
end

#statsHash

Get cache statistics

Returns:

  • (Hash)

    Statistics



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 135

def stats
  providers_rows = query(<<~SQL, [project_dir])
    SELECT DISTINCT provider_name FROM #{table_name}
    WHERE project_dir = ?
    ORDER BY provider_name
  SQL

  providers = providers_rows.map { |row| row["provider_name"] }

  by_provider = {}
  providers.each do |provider|
    count = query_value(<<~SQL, [project_dir, provider])
      SELECT COUNT(*) FROM #{table_name}
      WHERE project_dir = ? AND provider_name = ?
    SQL
    by_provider[provider] = count || 0
  end

  total = by_provider.values.sum

  {
    providers: providers,
    total_deprecated: total,
    by_provider: by_provider
  }
end

#with_replacementsArray<Hash>

Find deprecated models with replacements

Returns:

  • (Array<Hash>)

    Models with replacement info



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/aidp/database/repositories/deprecated_models_repository.rb', line 187

def with_replacements
  rows = query(<<~SQL, [project_dir])
    SELECT provider_name, model_name, replacement
    FROM #{table_name}
    WHERE project_dir = ? AND replacement IS NOT NULL
    ORDER BY provider_name, model_name
  SQL

  rows.map do |row|
    {
      provider: row["provider_name"],
      model: row["model_name"],
      replacement: row["replacement"]
    }
  end
end