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("    INSERT INTO \#{table_name}\n      (project_dir, provider_name, model_name, replacement, reason, detected_at)\n    VALUES (?, ?, ?, ?, ?, ?)\n    ON CONFLICT(project_dir, provider_name, model_name) DO UPDATE SET\n      replacement = excluded.replacement,\n      reason = excluded.reason,\n      detected_at = excluded.detected_at\n  SQL\n\n  Aidp.log_info(\"deprecated_models_repo\", \"added_deprecated_model\",\n    provider: provider_name, model: model_name, replacement: replacement)\n  true\nrescue => e\n  Aidp.log_error(\"deprecated_models_repo\", \"add_failed\",\n    provider: provider_name, model: model_name, error: e.message)\n  false\nend\n", [project_dir, provider_name, model_name, replacement, reason, current_timestamp])

#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("    SELECT 1 FROM \#{table_name}\n    WHERE project_dir = ? AND provider_name = ? AND model_name = ?\n  SQL\n\n  !result.nil?\nend\n", [project_dir, provider_name, model_name])

#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("    SELECT model_name FROM \#{table_name}\n    WHERE project_dir = ? AND provider_name = ?\n    ORDER BY model_name\n  SQL\n\n  rows.map { |row| row[\"model_name\"] }\nend\n", [project_dir, provider_name])

#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("    SELECT replacement, reason, detected_at\n    FROM \#{table_name}\n    WHERE project_dir = ? AND provider_name = ? AND model_name = ?\n  SQL\n\n  return nil unless row\n\n  {\n    replacement: row[\"replacement\"],\n    reason: row[\"reason\"],\n    detected_at: row[\"detected_at\"]\n  }\nend\n", [project_dir, provider_name, model_name])

#list_all ⇒ Array<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("    SELECT provider_name, model_name, replacement, reason, detected_at\n    FROM \#{table_name}\n    WHERE project_dir = ?\n    ORDER BY provider_name, model_name\n  SQL\n\n  rows.map do |row|\n    {\n      provider: row[\"provider_name\"],\n      model: row[\"model_name\"],\n      replacement: row[\"replacement\"],\n      reason: row[\"reason\"],\n      detected_at: row[\"detected_at\"]\n    }\n  end\nend\n", [project_dir])

#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("    DELETE FROM \#{table_name}\n    WHERE project_dir = ? AND provider_name = ? AND model_name = ?\n  SQL\n\n  Aidp.log_info(\"deprecated_models_repo\", \"removed_deprecated_model\",\n    provider: provider_name, model: model_name)\nend\n", [project_dir, provider_name, model_name])

#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("    SELECT replacement FROM \#{table_name}\n    WHERE project_dir = ? AND provider_name = ? AND model_name = ?\n  SQL\nend\n", [project_dir, provider_name, model_name])

#stats ⇒ Hash

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("    SELECT DISTINCT provider_name FROM \#{table_name}\n    WHERE project_dir = ?\n    ORDER BY provider_name\n  SQL\n\n  providers = providers_rows.map { |row| row[\"provider_name\"] }\n\n  by_provider = {}\n  providers.each do |provider|\n    count = query_value(<<~SQL, [project_dir, provider])\n      SELECT COUNT(*) FROM \#{table_name}\n      WHERE project_dir = ? AND provider_name = ?\n    SQL\n    by_provider[provider] = count || 0\n  end\n\n  total = by_provider.values.sum\n\n  {\n    providers: providers,\n    total_deprecated: total,\n    by_provider: by_provider\n  }\nend\n", [project_dir])

#with_replacements ⇒ Array<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("    SELECT provider_name, model_name, replacement\n    FROM \#{table_name}\n    WHERE project_dir = ? AND replacement IS NOT NULL\n    ORDER BY provider_name, model_name\n  SQL\n\n  rows.map do |row|\n    {\n      provider: row[\"provider_name\"],\n      model: row[\"model_name\"],\n      replacement: row[\"replacement\"]\n    }\n  end\nend\n", [project_dir])