modelinfo 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +130 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/caps.d.ts +5 -0
  7. package/dist/commands/caps.js +37 -0
  8. package/dist/commands/caps.js.map +1 -0
  9. package/dist/commands/cost.d.ts +5 -0
  10. package/dist/commands/cost.js +37 -0
  11. package/dist/commands/cost.js.map +1 -0
  12. package/dist/commands/diff.d.ts +6 -0
  13. package/dist/commands/diff.js +62 -0
  14. package/dist/commands/diff.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +4 -0
  16. package/dist/commands/doctor.js +38 -0
  17. package/dist/commands/doctor.js.map +1 -0
  18. package/dist/commands/limit.d.ts +5 -0
  19. package/dist/commands/limit.js +37 -0
  20. package/dist/commands/limit.js.map +1 -0
  21. package/dist/commands/list.d.ts +4 -0
  22. package/dist/commands/list.js +46 -0
  23. package/dist/commands/list.js.map +1 -0
  24. package/dist/commands/providers.d.ts +4 -0
  25. package/dist/commands/providers.js +20 -0
  26. package/dist/commands/providers.js.map +1 -0
  27. package/dist/commands/search.d.ts +6 -0
  28. package/dist/commands/search.js +24 -0
  29. package/dist/commands/search.js.map +1 -0
  30. package/dist/commands/shared.d.ts +15 -0
  31. package/dist/commands/shared.js +40 -0
  32. package/dist/commands/shared.js.map +1 -0
  33. package/dist/commands/show.d.ts +5 -0
  34. package/dist/commands/show.js +35 -0
  35. package/dist/commands/show.js.map +1 -0
  36. package/dist/commands/update.d.ts +4 -0
  37. package/dist/commands/update.js +22 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/core/config.d.ts +21 -0
  40. package/dist/core/config.js +29 -0
  41. package/dist/core/config.js.map +1 -0
  42. package/dist/core/errors.d.ts +8 -0
  43. package/dist/core/errors.js +18 -0
  44. package/dist/core/errors.js.map +1 -0
  45. package/dist/core/logger.d.ts +3 -0
  46. package/dist/core/logger.js +10 -0
  47. package/dist/core/logger.js.map +1 -0
  48. package/dist/data/cache.d.ts +9 -0
  49. package/dist/data/cache.js +66 -0
  50. package/dist/data/cache.js.map +1 -0
  51. package/dist/data/index.d.ts +13 -0
  52. package/dist/data/index.js +275 -0
  53. package/dist/data/index.js.map +1 -0
  54. package/dist/data/normalize.d.ts +2 -0
  55. package/dist/data/normalize.js +157 -0
  56. package/dist/data/normalize.js.map +1 -0
  57. package/dist/data/remote.d.ts +11 -0
  58. package/dist/data/remote.js +160 -0
  59. package/dist/data/remote.js.map +1 -0
  60. package/dist/data/schema.d.ts +12 -0
  61. package/dist/data/schema.js +44 -0
  62. package/dist/data/schema.js.map +1 -0
  63. package/dist/data/types.d.ts +142 -0
  64. package/dist/data/types.js +2 -0
  65. package/dist/data/types.js.map +1 -0
  66. package/dist/data/version.d.ts +5 -0
  67. package/dist/data/version.js +28 -0
  68. package/dist/data/version.js.map +1 -0
  69. package/dist/format/detail.d.ts +11 -0
  70. package/dist/format/detail.js +139 -0
  71. package/dist/format/detail.js.map +1 -0
  72. package/dist/format/json.d.ts +258 -0
  73. package/dist/format/json.js +174 -0
  74. package/dist/format/json.js.map +1 -0
  75. package/dist/format/table.d.ts +7 -0
  76. package/dist/format/table.js +120 -0
  77. package/dist/format/table.js.map +1 -0
  78. package/dist/format/value.d.ts +8 -0
  79. package/dist/format/value.js +47 -0
  80. package/dist/format/value.js.map +1 -0
  81. package/dist/search/fuzzy.d.ts +3 -0
  82. package/dist/search/fuzzy.js +20 -0
  83. package/dist/search/fuzzy.js.map +1 -0
  84. package/dist/search/rank.d.ts +5 -0
  85. package/dist/search/rank.js +47 -0
  86. package/dist/search/rank.js.map +1 -0
  87. package/dist/utils/fs.d.ts +5 -0
  88. package/dist/utils/fs.js +31 -0
  89. package/dist/utils/fs.js.map +1 -0
  90. package/dist/utils/numbers.d.ts +3 -0
  91. package/dist/utils/numbers.js +40 -0
  92. package/dist/utils/numbers.js.map +1 -0
  93. package/dist/utils/strings.d.ts +6 -0
  94. package/dist/utils/strings.js +34 -0
  95. package/dist/utils/strings.js.map +1 -0
  96. package/dist/utils/time.d.ts +3 -0
  97. package/dist/utils/time.js +36 -0
  98. package/dist/utils/time.js.map +1 -0
  99. package/package.json +76 -0
  100. package/seed/all.json +166975 -0
  101. package/seed/index.json +576348 -0
  102. package/seed/version.json +8 -0
@@ -0,0 +1,275 @@
1
+ import { INDEX_SCHEMA_VERSION } from "../core/config.js";
2
+ import { buildSortScore, compareModelMatches, compareProviderMatches } from "../search/rank.js";
3
+ import { createModelFuse } from "../search/fuzzy.js";
4
+ import { normalizeNeedle, toNonEmptyString, uniqueStrings } from "../utils/strings.js";
5
+ function createEmptyLookup() {
6
+ return {
7
+ by_model_id: {},
8
+ by_display_name: {},
9
+ by_name: {},
10
+ by_provider_id: {},
11
+ by_provider_name: {},
12
+ by_provider_display_name: {},
13
+ };
14
+ }
15
+ function addLookup(map, key, index) {
16
+ const normalized = key ? normalizeNeedle(key) : undefined;
17
+ if (!normalized) {
18
+ return;
19
+ }
20
+ const bucket = map[normalized] ?? [];
21
+ bucket.push(index);
22
+ map[normalized] = bucket;
23
+ }
24
+ function buildProviderTokens(provider) {
25
+ return uniqueStrings([provider.id, provider.name, provider.display_name]);
26
+ }
27
+ function buildModelTokens(model) {
28
+ return uniqueStrings([
29
+ model.model_id,
30
+ model.model_name,
31
+ model.model_display_name,
32
+ model.provider_id,
33
+ model.provider_name,
34
+ model.provider_display_name,
35
+ ...model.input_modalities,
36
+ ...model.output_modalities,
37
+ ...model.metadata_features,
38
+ ...model.metadata_type_hints,
39
+ ]).map((value) => value.toLowerCase());
40
+ }
41
+ export function buildIndexDocument(normalized, generatedAt = Date.now()) {
42
+ const providers = normalized.providers.map((provider) => {
43
+ const searchTokens = buildProviderTokens(provider).map((value) => value.toLowerCase());
44
+ return {
45
+ ...provider,
46
+ search_tokens: searchTokens,
47
+ search_text: searchTokens.join(" "),
48
+ };
49
+ });
50
+ const models = normalized.models.map((model) => {
51
+ const searchTokens = buildModelTokens(model);
52
+ return {
53
+ ...model,
54
+ search_tokens: searchTokens,
55
+ search_text: searchTokens.join(" "),
56
+ };
57
+ });
58
+ const lookup = createEmptyLookup();
59
+ models.forEach((model, index) => {
60
+ addLookup(lookup.by_model_id, model.model_id, index);
61
+ addLookup(lookup.by_display_name, model.model_display_name, index);
62
+ addLookup(lookup.by_name, model.model_name, index);
63
+ addLookup(lookup.by_provider_id, model.provider_id, index);
64
+ addLookup(lookup.by_provider_name, model.provider_name, index);
65
+ addLookup(lookup.by_provider_display_name, model.provider_display_name, index);
66
+ });
67
+ return {
68
+ schema_version: INDEX_SCHEMA_VERSION,
69
+ source_updated_at: normalized.source_updated_at,
70
+ generated_at: generatedAt,
71
+ provider_count: providers.length,
72
+ model_count: models.length,
73
+ providers,
74
+ models,
75
+ lookup,
76
+ };
77
+ }
78
+ function pushModelMatch(target, index, model, reason, tieBreaker, fuzzyScore) {
79
+ const next = {
80
+ model,
81
+ index,
82
+ reason,
83
+ fuzzy_score: fuzzyScore,
84
+ sort_score: buildSortScore(reason, tieBreaker, fuzzyScore),
85
+ };
86
+ const current = target.get(index);
87
+ if (!current || compareModelMatches(next, current) < 0) {
88
+ target.set(index, next);
89
+ }
90
+ }
91
+ function pushProviderMatch(target, provider, reason, tieBreaker) {
92
+ const next = {
93
+ provider,
94
+ reason,
95
+ sort_score: buildSortScore(reason, tieBreaker),
96
+ };
97
+ const current = target.get(provider.id);
98
+ if (!current || compareProviderMatches(next, current) < 0) {
99
+ target.set(provider.id, next);
100
+ }
101
+ }
102
+ function maybeMatchField(field, needle, exactReason) {
103
+ const normalized = field ? normalizeNeedle(field) : undefined;
104
+ if (!normalized) {
105
+ return undefined;
106
+ }
107
+ if (normalized === needle) {
108
+ return { reason: exactReason, tieBreaker: normalized.length / 1000 };
109
+ }
110
+ if (normalized.startsWith(needle)) {
111
+ return { reason: "prefix", tieBreaker: normalized.length / 1000 };
112
+ }
113
+ if (normalized.includes(needle)) {
114
+ return { reason: "substring", tieBreaker: normalized.length / 1000 };
115
+ }
116
+ return undefined;
117
+ }
118
+ function collectProviderFilterIds(indexDocument, providerFilter) {
119
+ if (!providerFilter) {
120
+ return undefined;
121
+ }
122
+ const providerMatches = searchProviders(indexDocument, providerFilter);
123
+ if (providerMatches.length === 0) {
124
+ return new Set();
125
+ }
126
+ return new Set(providerMatches.map((match) => match.provider.id));
127
+ }
128
+ export function searchProviders(indexDocument, keyword) {
129
+ const needle = normalizeNeedle(keyword);
130
+ if (!needle) {
131
+ return [];
132
+ }
133
+ const matches = new Map();
134
+ for (const provider of indexDocument.providers) {
135
+ const candidates = [];
136
+ for (const field of [provider.id, provider.display_name, provider.name]) {
137
+ const match = maybeMatchField(field, needle, "exact-name");
138
+ if (match) {
139
+ candidates.push({
140
+ reason: match.reason,
141
+ tieBreaker: match.tieBreaker,
142
+ });
143
+ }
144
+ }
145
+ candidates.sort((left, right) => buildSortScore(left.reason, left.tieBreaker) -
146
+ buildSortScore(right.reason, right.tieBreaker));
147
+ const best = candidates[0];
148
+ if (best) {
149
+ pushProviderMatch(matches, provider, best.reason, best.tieBreaker);
150
+ }
151
+ }
152
+ return [...matches.values()].sort(compareProviderMatches);
153
+ }
154
+ function applyFuzzyMatches(indexDocument, keyword, matches, providerFilterIds) {
155
+ const fuse = createModelFuse(indexDocument.models);
156
+ const fuzzyMatches = fuse.search(keyword);
157
+ for (const fuzzyMatch of fuzzyMatches) {
158
+ const model = fuzzyMatch.item;
159
+ if (providerFilterIds && !providerFilterIds.has(model.provider_id)) {
160
+ continue;
161
+ }
162
+ pushModelMatch(matches, fuzzyMatch.refIndex, model, "fuzzy", (fuzzyMatch.score ?? 0) * 10, fuzzyMatch.score);
163
+ }
164
+ }
165
+ function rankModelMatches(indexDocument, keyword, options) {
166
+ const needle = normalizeNeedle(keyword);
167
+ if (!needle) {
168
+ return [];
169
+ }
170
+ const providerFilterIds = collectProviderFilterIds(indexDocument, options.providerFilter);
171
+ if (providerFilterIds && providerFilterIds.size === 0) {
172
+ return [];
173
+ }
174
+ const matches = new Map();
175
+ indexDocument.models.forEach((model, index) => {
176
+ if (providerFilterIds && !providerFilterIds.has(model.provider_id)) {
177
+ return;
178
+ }
179
+ const fields = [
180
+ { value: model.model_id, reason: "exact-model-id" },
181
+ { value: model.model_display_name, reason: "exact-display-name" },
182
+ { value: model.model_name, reason: "exact-name" },
183
+ ];
184
+ if (options.includeProviderFields) {
185
+ fields.push({ value: model.provider_id, reason: "exact-name" }, { value: model.provider_display_name, reason: "exact-name" }, { value: model.provider_name, reason: "exact-name" });
186
+ }
187
+ const bestMatches = fields
188
+ .map((field) => maybeMatchField(field.value, needle, field.reason))
189
+ .filter((value) => Boolean(value))
190
+ .sort((left, right) => buildSortScore(left.reason, left.tieBreaker) -
191
+ buildSortScore(right.reason, right.tieBreaker));
192
+ const best = bestMatches[0];
193
+ if (best) {
194
+ pushModelMatch(matches, index, model, best.reason, best.tieBreaker);
195
+ return;
196
+ }
197
+ if (model.search_text.includes(needle)) {
198
+ pushModelMatch(matches, index, model, "substring", model.search_text.length / 1000);
199
+ }
200
+ });
201
+ applyFuzzyMatches(indexDocument, keyword, matches, providerFilterIds);
202
+ return [...matches.values()].sort(compareModelMatches);
203
+ }
204
+ export function searchModels(indexDocument, keyword, options) {
205
+ return rankModelMatches(indexDocument, keyword, {
206
+ includeProviderFields: true,
207
+ providerFilter: options?.provider,
208
+ });
209
+ }
210
+ export function resolveModelCandidates(indexDocument, keyword, options) {
211
+ return rankModelMatches(indexDocument, keyword, {
212
+ includeProviderFields: false,
213
+ providerFilter: options?.provider,
214
+ });
215
+ }
216
+ export function pickStrongModelMatch(matches) {
217
+ if (matches.length === 0) {
218
+ return undefined;
219
+ }
220
+ if (matches.length === 1) {
221
+ return matches[0];
222
+ }
223
+ const first = matches[0];
224
+ const second = matches[1];
225
+ if (!first || !second) {
226
+ return first;
227
+ }
228
+ const exactReasons = ["exact-model-id", "exact-display-name", "exact-name"];
229
+ if (exactReasons.includes(first.reason) && first.reason !== second.reason) {
230
+ return first;
231
+ }
232
+ return undefined;
233
+ }
234
+ export function resolveProviderCandidates(indexDocument, keyword) {
235
+ return searchProviders(indexDocument, keyword);
236
+ }
237
+ export function getModelsForProvider(indexDocument, providerId) {
238
+ const needle = normalizeNeedle(providerId);
239
+ return indexDocument.models.filter((model) => normalizeNeedle(model.provider_id) === needle);
240
+ }
241
+ export function collectKnownExtraFields(model) {
242
+ const knownModelKeys = new Set([
243
+ "id",
244
+ "name",
245
+ "display_name",
246
+ "type",
247
+ "attachment",
248
+ "reasoning",
249
+ "tool_call",
250
+ "temperature",
251
+ "vision",
252
+ "open_weights",
253
+ "knowledge",
254
+ "release_date",
255
+ "last_updated",
256
+ "modalities",
257
+ "cost",
258
+ "limit",
259
+ "metadata",
260
+ "features",
261
+ "typeHints",
262
+ ]);
263
+ const extras = [];
264
+ for (const [key, value] of Object.entries(model.raw)) {
265
+ if (knownModelKeys.has(key)) {
266
+ continue;
267
+ }
268
+ const rendered = toNonEmptyString(value) ?? JSON.stringify(value);
269
+ if (rendered) {
270
+ extras.push([key, rendered]);
271
+ }
272
+ }
273
+ return extras;
274
+ }
275
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NormalizeResult, RawDataset } from "./types.js";
2
+ export declare function normalizeDataset(dataset: RawDataset): NormalizeResult;
@@ -0,0 +1,157 @@
1
+ import { toNumber } from "../utils/numbers.js";
2
+ import { stringArrayFromUnknown, toNonEmptyString, uniqueStrings, isRecord, } from "../utils/strings.js";
3
+ import { toTimestamp } from "../utils/time.js";
4
+ function asRecord(value) {
5
+ return isRecord(value) ? value : undefined;
6
+ }
7
+ function toBoolean(value) {
8
+ if (typeof value === "boolean") {
9
+ return value;
10
+ }
11
+ if (typeof value === "number") {
12
+ return value !== 0;
13
+ }
14
+ if (typeof value === "string") {
15
+ const normalized = value.trim().toLowerCase();
16
+ if (["true", "yes", "1", "supported"].includes(normalized)) {
17
+ return true;
18
+ }
19
+ if (["false", "no", "0", "unsupported"].includes(normalized)) {
20
+ return false;
21
+ }
22
+ }
23
+ return undefined;
24
+ }
25
+ function toDisplayString(value) {
26
+ if (typeof value === "string") {
27
+ const trimmed = value.trim();
28
+ return trimmed ? trimmed : undefined;
29
+ }
30
+ if (typeof value === "number" || typeof value === "boolean") {
31
+ return String(value);
32
+ }
33
+ return undefined;
34
+ }
35
+ function normalizeMetadataArray(value) {
36
+ return stringArrayFromUnknown(value);
37
+ }
38
+ function normalizeModalities(rawModalities, metadata) {
39
+ const modalities = asRecord(rawModalities);
40
+ const metadataModalities = asRecord(metadata?.modalities);
41
+ const input = uniqueStrings([
42
+ ...stringArrayFromUnknown(modalities?.input),
43
+ ...stringArrayFromUnknown(metadata?.inputModalities),
44
+ ...stringArrayFromUnknown(metadataModalities?.input),
45
+ ]);
46
+ const output = uniqueStrings([
47
+ ...stringArrayFromUnknown(modalities?.output),
48
+ ...stringArrayFromUnknown(metadataModalities?.output),
49
+ ]);
50
+ return { input, output };
51
+ }
52
+ function normalizeProvider(rawProvider, fallbackId) {
53
+ const id = toNonEmptyString(rawProvider.id) ?? fallbackId;
54
+ return {
55
+ id,
56
+ api: toNonEmptyString(rawProvider.api),
57
+ name: toNonEmptyString(rawProvider.name),
58
+ doc: toNonEmptyString(rawProvider.doc),
59
+ display_name: toNonEmptyString(rawProvider.display_name),
60
+ metadata: asRecord(rawProvider.metadata),
61
+ model_count: Array.isArray(rawProvider.models) ? rawProvider.models.length : 0,
62
+ raw: rawProvider,
63
+ };
64
+ }
65
+ function normalizeModel(rawModel, provider, fallbackIndex) {
66
+ const metadata = asRecord(rawModel.metadata);
67
+ const reasoning = asRecord(rawModel.reasoning);
68
+ const cost = asRecord(rawModel.cost);
69
+ const limit = asRecord(rawModel.limit);
70
+ const metadataPricing = asRecord(metadata?.pricing);
71
+ const { input, output } = normalizeModalities(rawModel.modalities, metadata);
72
+ const explicitVision = toBoolean(rawModel.vision);
73
+ const derivedVision = input.some((item) => item === "image" || item === "video");
74
+ return {
75
+ provider_id: provider.id,
76
+ provider_name: provider.name,
77
+ provider_display_name: provider.display_name,
78
+ provider_api: provider.api,
79
+ provider_doc: provider.doc,
80
+ model_id: toNonEmptyString(rawModel.id) ??
81
+ toNonEmptyString(rawModel.display_name) ??
82
+ toNonEmptyString(rawModel.name) ??
83
+ `${provider.id}#${fallbackIndex}`,
84
+ model_name: toNonEmptyString(rawModel.name),
85
+ model_display_name: toNonEmptyString(rawModel.display_name),
86
+ type: toNonEmptyString(rawModel.type),
87
+ attachment: toBoolean(rawModel.attachment),
88
+ reasoning_supported: toBoolean(reasoning?.supported),
89
+ reasoning_default: toBoolean(reasoning?.default),
90
+ tool_call: toBoolean(rawModel.tool_call),
91
+ temperature: toBoolean(rawModel.temperature),
92
+ vision: explicitVision ?? (input.length > 0 ? derivedVision : undefined),
93
+ open_weights: toBoolean(rawModel.open_weights),
94
+ knowledge: toDisplayString(rawModel.knowledge),
95
+ release_date: toDisplayString(rawModel.release_date),
96
+ last_updated: toDisplayString(rawModel.last_updated),
97
+ input_modalities: input,
98
+ output_modalities: output,
99
+ cost_input: toNumber(cost?.input) ?? toNumber(metadataPricing?.input),
100
+ cost_output: toNumber(cost?.output) ?? toNumber(metadataPricing?.output),
101
+ cost_cache_read: toNumber(cost?.cache_read) ??
102
+ toNumber(metadataPricing?.cache_read) ??
103
+ toNumber(rawModel.cache_read),
104
+ context_limit: toNumber(limit?.context) ?? toNumber(limit?.input),
105
+ output_limit: toNumber(limit?.output),
106
+ metadata_description: toDisplayString(metadata?.description),
107
+ metadata_features: normalizeMetadataArray(metadata?.features ?? rawModel.features),
108
+ metadata_type_hints: normalizeMetadataArray(metadata?.typeHints ?? rawModel.typeHints),
109
+ raw: rawModel,
110
+ };
111
+ }
112
+ export function normalizeDataset(dataset) {
113
+ const sourceUpdatedAt = Array.isArray(dataset) ? undefined : toTimestamp(dataset.updated_at);
114
+ const rawProviders = [];
115
+ if (Array.isArray(dataset)) {
116
+ dataset.forEach((provider, index) => {
117
+ rawProviders.push({
118
+ key: toNonEmptyString(provider.id) ?? `provider-${index + 1}`,
119
+ provider,
120
+ });
121
+ });
122
+ }
123
+ else if (Array.isArray(dataset.providers)) {
124
+ dataset.providers.forEach((provider, index) => {
125
+ rawProviders.push({
126
+ key: toNonEmptyString(provider.id) ?? `provider-${index + 1}`,
127
+ provider,
128
+ });
129
+ });
130
+ }
131
+ else {
132
+ for (const [key, provider] of Object.entries(dataset.providers)) {
133
+ if (isRecord(provider)) {
134
+ rawProviders.push({ key, provider });
135
+ }
136
+ }
137
+ }
138
+ const providers = [];
139
+ const models = [];
140
+ for (const { key, provider: rawProvider } of rawProviders) {
141
+ const provider = normalizeProvider(rawProvider, key);
142
+ providers.push(provider);
143
+ const rawModels = Array.isArray(rawProvider.models) ? rawProvider.models : [];
144
+ rawModels.forEach((rawModel, index) => {
145
+ if (!isRecord(rawModel)) {
146
+ return;
147
+ }
148
+ models.push(normalizeModel(rawModel, provider, index + 1));
149
+ });
150
+ }
151
+ return {
152
+ providers,
153
+ models,
154
+ source_updated_at: sourceUpdatedAt,
155
+ };
156
+ }
157
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/data/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CachePaths } from "../core/config.js";
2
+ import type { CacheVersionState, IndexDocument, RawDataset, SyncResult } from "./types.js";
3
+ export declare function fetchRemoteVersion(): Promise<{
4
+ updatedAt: number;
5
+ }>;
6
+ export declare function fetchRemoteDataset(): Promise<RawDataset>;
7
+ export declare function syncCacheFromRemote(cachePaths?: CachePaths, remoteUpdatedAt?: number): Promise<SyncResult>;
8
+ export declare function ensureRuntimeIndex(cachePaths?: CachePaths): Promise<{
9
+ index: IndexDocument;
10
+ version: CacheVersionState | undefined;
11
+ }>;
@@ -0,0 +1,160 @@
1
+ import { APP_NAME, APP_VERSION, REMOTE_DATASET_URL, REMOTE_VERSION_URL, getCachePaths, } from "../core/config.js";
2
+ import { ModelinfoError, toErrorMessage } from "../core/errors.js";
3
+ import { logWarn } from "../core/logger.js";
4
+ import { buildIndexDocument } from "./index.js";
5
+ import { ensureSeededCache, readIndexDocument, readRawDataset, readVersionState, writeIndexDocument, writeRawDataset, writeVersionState, } from "./cache.js";
6
+ import { normalizeDataset } from "./normalize.js";
7
+ import { parseDataset, parseVersionFile } from "./schema.js";
8
+ import { createVersionState, isRemoteNewer, shouldCheckRemoteVersion } from "./version.js";
9
+ import { toTimestamp } from "../utils/time.js";
10
+ async function fetchJson(url) {
11
+ const controller = new AbortController();
12
+ const timer = setTimeout(() => controller.abort(), 15000);
13
+ try {
14
+ const response = await fetch(url, {
15
+ headers: {
16
+ "user-agent": `${APP_NAME}/${APP_VERSION}`,
17
+ },
18
+ signal: controller.signal,
19
+ });
20
+ if (!response.ok) {
21
+ throw new ModelinfoError(`Request failed: ${response.status} ${response.statusText}`, "REMOTE_FETCH_FAILED");
22
+ }
23
+ return (await response.json());
24
+ }
25
+ catch (error) {
26
+ throw new ModelinfoError(`Failed to fetch ${url}: ${toErrorMessage(error)}`, "REMOTE_FETCH_FAILED", {
27
+ cause: error,
28
+ });
29
+ }
30
+ finally {
31
+ clearTimeout(timer);
32
+ }
33
+ }
34
+ export async function fetchRemoteVersion() {
35
+ const raw = await fetchJson(REMOTE_VERSION_URL);
36
+ const parsed = parseVersionFile(raw);
37
+ const updatedAt = toTimestamp(parsed.updated_at);
38
+ if (!updatedAt) {
39
+ throw new ModelinfoError("Remote version file is missing a valid updated_at timestamp.", "INVALID_REMOTE_VERSION");
40
+ }
41
+ return { updatedAt };
42
+ }
43
+ export async function fetchRemoteDataset() {
44
+ const raw = await fetchJson(REMOTE_DATASET_URL);
45
+ return parseDataset(raw);
46
+ }
47
+ async function rebuildIndexFromRawCache(cachePaths, versionState) {
48
+ const rawDataset = await readRawDataset(cachePaths);
49
+ if (!rawDataset) {
50
+ return undefined;
51
+ }
52
+ const normalized = normalizeDataset(rawDataset);
53
+ const built = buildIndexDocument(normalized);
54
+ const nextVersion = createVersionState({
55
+ cache_origin: versionState?.cache_origin ?? "bundled",
56
+ local_updated_at: versionState?.local_updated_at ?? normalized.source_updated_at,
57
+ last_checked_remote_updated_at: versionState?.last_checked_remote_updated_at,
58
+ last_checked_at: versionState?.last_checked_at,
59
+ index_built_at: built.generated_at,
60
+ });
61
+ await writeIndexDocument(built, cachePaths);
62
+ await writeVersionState(nextVersion, cachePaths);
63
+ return built;
64
+ }
65
+ export async function syncCacheFromRemote(cachePaths = getCachePaths(), remoteUpdatedAt) {
66
+ const currentVersion = await readVersionState(cachePaths);
67
+ const versionInfo = remoteUpdatedAt !== undefined ? { updatedAt: remoteUpdatedAt } : await fetchRemoteVersion();
68
+ const nextUpdatedAt = versionInfo.updatedAt;
69
+ const currentIndex = await readIndexDocument(cachePaths);
70
+ if (!isRemoteNewer(nextUpdatedAt, currentVersion?.local_updated_at) && currentIndex) {
71
+ const nextVersion = createVersionState({
72
+ cache_origin: currentVersion?.cache_origin ?? "remote",
73
+ local_updated_at: currentVersion?.local_updated_at ?? nextUpdatedAt,
74
+ last_checked_remote_updated_at: nextUpdatedAt,
75
+ last_checked_at: Date.now(),
76
+ index_built_at: currentVersion?.index_built_at ?? currentIndex.generated_at,
77
+ });
78
+ await writeVersionState(nextVersion, cachePaths);
79
+ return {
80
+ updated: false,
81
+ old_version: currentVersion?.local_updated_at,
82
+ new_version: currentVersion?.local_updated_at ?? nextUpdatedAt,
83
+ provider_count: currentIndex.provider_count,
84
+ model_count: currentIndex.model_count,
85
+ cache_origin: nextVersion.cache_origin,
86
+ };
87
+ }
88
+ const dataset = await fetchRemoteDataset();
89
+ const normalized = normalizeDataset(dataset);
90
+ const indexDocument = buildIndexDocument(normalized);
91
+ const nextVersion = createVersionState({
92
+ cache_origin: "remote",
93
+ local_updated_at: nextUpdatedAt,
94
+ last_checked_remote_updated_at: nextUpdatedAt,
95
+ last_checked_at: Date.now(),
96
+ index_built_at: indexDocument.generated_at,
97
+ });
98
+ await writeRawDataset(dataset, cachePaths);
99
+ await writeIndexDocument(indexDocument, cachePaths);
100
+ await writeVersionState(nextVersion, cachePaths);
101
+ return {
102
+ updated: true,
103
+ old_version: currentVersion?.local_updated_at,
104
+ new_version: nextUpdatedAt,
105
+ provider_count: indexDocument.provider_count,
106
+ model_count: indexDocument.model_count,
107
+ cache_origin: "remote",
108
+ };
109
+ }
110
+ export async function ensureRuntimeIndex(cachePaths = getCachePaths()) {
111
+ await ensureSeededCache(cachePaths);
112
+ let versionState = await readVersionState(cachePaths);
113
+ let indexDocument;
114
+ try {
115
+ indexDocument = await readIndexDocument(cachePaths);
116
+ }
117
+ catch {
118
+ indexDocument = await rebuildIndexFromRawCache(cachePaths, versionState);
119
+ }
120
+ if (!indexDocument) {
121
+ await syncCacheFromRemote(cachePaths);
122
+ versionState = await readVersionState(cachePaths);
123
+ indexDocument = await readIndexDocument(cachePaths);
124
+ }
125
+ if (!indexDocument) {
126
+ throw new ModelinfoError("No usable local index is available.", "INDEX_NOT_AVAILABLE");
127
+ }
128
+ if (shouldCheckRemoteVersion(versionState)) {
129
+ try {
130
+ const { updatedAt } = await fetchRemoteVersion();
131
+ if (isRemoteNewer(updatedAt, versionState?.local_updated_at)) {
132
+ await syncCacheFromRemote(cachePaths, updatedAt);
133
+ versionState = await readVersionState(cachePaths);
134
+ indexDocument = await readIndexDocument(cachePaths);
135
+ }
136
+ else {
137
+ const nextVersion = createVersionState({
138
+ cache_origin: versionState?.cache_origin ?? "bundled",
139
+ local_updated_at: versionState?.local_updated_at ?? indexDocument.source_updated_at,
140
+ last_checked_remote_updated_at: updatedAt,
141
+ last_checked_at: Date.now(),
142
+ index_built_at: versionState?.index_built_at ?? indexDocument.generated_at,
143
+ });
144
+ await writeVersionState(nextVersion, cachePaths);
145
+ versionState = nextVersion;
146
+ }
147
+ }
148
+ catch (error) {
149
+ logWarn(`Version check failed, using local cache: ${toErrorMessage(error)}`);
150
+ }
151
+ }
152
+ if (!indexDocument) {
153
+ throw new ModelinfoError("Failed to load the local index after sync.", "INDEX_NOT_AVAILABLE");
154
+ }
155
+ return {
156
+ index: indexDocument,
157
+ version: versionState,
158
+ };
159
+ }
160
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/data/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import type { IndexDocument, RawDataset, RawVersionFile } from "./types.js";
3
+ export declare const versionFileSchema: z.ZodObject<{
4
+ updated_at: z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodDate]>;
5
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
6
+ updated_at: z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodDate]>;
7
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
8
+ updated_at: z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodDate]>;
9
+ }, z.ZodTypeAny, "passthrough">>;
10
+ export declare function parseVersionFile(value: unknown): RawVersionFile;
11
+ export declare function parseDataset(value: unknown): RawDataset;
12
+ export declare function parseIndexDocument(value: unknown): IndexDocument;