@x12i/ai-tools 1.0.4 → 2.0.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.
- package/CHANGELOG.md +23 -0
- package/README.md +146 -204
- package/dist/AiModelsCatalogClient-B5FMI9gj.d.cts +58 -0
- package/dist/AiModelsCatalogClient-CPPNI6Ry.d.ts +58 -0
- package/dist/aliases/index.cjs +4 -3
- package/dist/aliases/index.cjs.map +1 -1
- package/dist/aliases/index.d.cts +3 -5
- package/dist/aliases/index.d.ts +3 -5
- package/dist/aliases/index.js +2 -2
- package/dist/catalog/index.cjs +18 -9
- package/dist/catalog/index.cjs.map +1 -1
- package/dist/catalog/index.d.cts +13 -100
- package/dist/catalog/index.d.ts +13 -100
- package/dist/catalog/index.js +31 -23
- package/dist/{chunk-AJEKEWWB.js → chunk-2PTCWPHV.js} +17 -3
- package/dist/chunk-2PTCWPHV.js.map +1 -0
- package/dist/chunk-56R4XA2S.js +1 -0
- package/dist/chunk-5GUKLOEK.cjs +1 -0
- package/dist/chunk-5GUKLOEK.cjs.map +1 -0
- package/dist/chunk-5XAAMBDO.cjs +1988 -0
- package/dist/chunk-5XAAMBDO.cjs.map +1 -0
- package/dist/chunk-6BQBKROR.js +95 -0
- package/dist/chunk-6BQBKROR.js.map +1 -0
- package/dist/chunk-AB5GNXJ4.js +46 -0
- package/dist/chunk-AB5GNXJ4.js.map +1 -0
- package/dist/{chunk-O2A6OVEH.js → chunk-ANVONYJF.js} +2 -2
- package/dist/{chunk-O2A6OVEH.js.map → chunk-ANVONYJF.js.map} +1 -1
- package/dist/chunk-B3V2EHRY.js +225 -0
- package/dist/chunk-B3V2EHRY.js.map +1 -0
- package/dist/{chunk-QWAX7VQO.cjs → chunk-BAHBDADJ.cjs} +11 -11
- package/dist/{chunk-QWAX7VQO.cjs.map → chunk-BAHBDADJ.cjs.map} +1 -1
- package/dist/{chunk-TF4L2NEC.cjs → chunk-DXZOL3VN.cjs} +62 -313
- package/dist/chunk-DXZOL3VN.cjs.map +1 -0
- package/dist/chunk-EDMCKHO6.cjs +225 -0
- package/dist/chunk-EDMCKHO6.cjs.map +1 -0
- package/dist/{chunk-DJ5SWJDY.js → chunk-EYHMQVAL.js} +48 -299
- package/dist/chunk-EYHMQVAL.js.map +1 -0
- package/dist/chunk-GS7T56RP.cjs +8 -0
- package/dist/chunk-GS7T56RP.cjs.map +1 -0
- package/dist/chunk-NF2SKQR7.cjs +973 -0
- package/dist/chunk-NF2SKQR7.cjs.map +1 -0
- package/dist/chunk-OPN6BGNH.js +1985 -0
- package/dist/chunk-OPN6BGNH.js.map +1 -0
- package/dist/{chunk-7Q742NI3.cjs → chunk-PADNCGZB.cjs} +17 -3
- package/dist/chunk-PADNCGZB.cjs.map +1 -0
- package/dist/chunk-PRCICORG.cjs +95 -0
- package/dist/chunk-PRCICORG.cjs.map +1 -0
- package/dist/{chunk-6QGDZTGH.js → chunk-SIH4GPV4.js} +4 -29
- package/dist/chunk-SIH4GPV4.js.map +1 -0
- package/dist/chunk-U2YDDUVP.js +970 -0
- package/dist/chunk-U2YDDUVP.js.map +1 -0
- package/dist/{chunk-4NAY6HRP.js → chunk-VJHLO2R3.js} +7 -58
- package/dist/chunk-VJHLO2R3.js.map +1 -0
- package/dist/chunk-XAWBTX3N.cjs +46 -0
- package/dist/chunk-XAWBTX3N.cjs.map +1 -0
- package/dist/{chunk-AV6OE2YQ.cjs → chunk-XOKUDUUI.cjs} +14 -39
- package/dist/chunk-XOKUDUUI.cjs.map +1 -0
- package/dist/chunk-YQDSN6R6.cjs +86 -0
- package/dist/chunk-YQDSN6R6.cjs.map +1 -0
- package/dist/cli/index.cjs +59 -201
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +53 -198
- package/dist/cli/index.js.map +1 -1
- package/dist/cost/index.cjs +19 -3
- package/dist/cost/index.cjs.map +1 -1
- package/dist/cost/index.d.cts +10 -50
- package/dist/cost/index.d.ts +10 -50
- package/dist/cost/index.js +18 -3
- package/dist/index.cjs +24 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +44 -37
- package/dist/modelCache-BzRn6t_C.d.ts +113 -0
- package/dist/modelCache-CJftI-Ko.d.cts +113 -0
- package/dist/{modelNameResolver-DqFt7g6W.d.ts → modelNameResolver-5XkBMctP.d.ts} +2 -6
- package/dist/{modelNameResolver-D9V_GfUK.d.cts → modelNameResolver-C5CSTGFF.d.cts} +2 -6
- package/dist/models/index.cjs +9 -6
- package/dist/models/index.cjs.map +1 -1
- package/dist/models/index.d.cts +9 -31
- package/dist/models/index.d.ts +9 -31
- package/dist/models/index.js +9 -7
- package/dist/resolveUsageModel-BFwf80Hz.d.ts +140 -0
- package/dist/resolveUsageModel-C_YmGR1M.d.cts +140 -0
- package/dist/sync/index.cjs +7 -9
- package/dist/sync/index.cjs.map +1 -1
- package/dist/sync/index.d.cts +3 -8
- package/dist/sync/index.d.ts +3 -8
- package/dist/sync/index.js +8 -11
- package/dist/toolbox/index.cjs +1 -0
- package/dist/toolbox/index.cjs.map +1 -1
- package/dist/types-BrzJWsTU.d.cts +277 -0
- package/dist/types-BrzJWsTU.d.ts +277 -0
- package/package.json +9 -20
- package/src/data/models-catalog.json +670 -0
- package/src/data/openrouter-models-catalog.json +857 -0
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs +0 -9
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs.map +0 -1
- package/dist/AiModelsCatalogClient-CNeqFiFs.d.cts +0 -30
- package/dist/AiModelsCatalogClient-NUF3CBLW.js +0 -9
- package/dist/AiModelsCatalogClient-nwFoEaqL.d.ts +0 -30
- package/dist/catalox/index.cjs +0 -21
- package/dist/catalox/index.cjs.map +0 -1
- package/dist/catalox/index.d.cts +0 -11
- package/dist/catalox/index.d.ts +0 -11
- package/dist/catalox/index.js +0 -21
- package/dist/catalox/index.js.map +0 -1
- package/dist/chunk-4NAY6HRP.js.map +0 -1
- package/dist/chunk-6QGDZTGH.js.map +0 -1
- package/dist/chunk-7Q742NI3.cjs.map +0 -1
- package/dist/chunk-AJEKEWWB.js.map +0 -1
- package/dist/chunk-AV6OE2YQ.cjs.map +0 -1
- package/dist/chunk-C3H7RTFR.cjs +0 -1
- package/dist/chunk-C3H7RTFR.cjs.map +0 -1
- package/dist/chunk-DJ5SWJDY.js.map +0 -1
- package/dist/chunk-DKHGWHXP.cjs +0 -169
- package/dist/chunk-DKHGWHXP.cjs.map +0 -1
- package/dist/chunk-F2F4UEFD.cjs +0 -75
- package/dist/chunk-F2F4UEFD.cjs.map +0 -1
- package/dist/chunk-FGP3QXWL.cjs +0 -163
- package/dist/chunk-FGP3QXWL.cjs.map +0 -1
- package/dist/chunk-G2G4KSC5.js +0 -30
- package/dist/chunk-G2G4KSC5.js.map +0 -1
- package/dist/chunk-HN6UAQAE.cjs +0 -83
- package/dist/chunk-HN6UAQAE.cjs.map +0 -1
- package/dist/chunk-HS74X2OJ.cjs +0 -172
- package/dist/chunk-HS74X2OJ.cjs.map +0 -1
- package/dist/chunk-HYGXZY25.js +0 -163
- package/dist/chunk-HYGXZY25.js.map +0 -1
- package/dist/chunk-KQOALKKX.js +0 -75
- package/dist/chunk-KQOALKKX.js.map +0 -1
- package/dist/chunk-LYOU7CA2.cjs +0 -30
- package/dist/chunk-LYOU7CA2.cjs.map +0 -1
- package/dist/chunk-M5TMA73F.js +0 -1
- package/dist/chunk-M5TMA73F.js.map +0 -1
- package/dist/chunk-MX3AMQFC.js +0 -172
- package/dist/chunk-MX3AMQFC.js.map +0 -1
- package/dist/chunk-QCRLKVB3.cjs +0 -137
- package/dist/chunk-QCRLKVB3.cjs.map +0 -1
- package/dist/chunk-TF4L2NEC.cjs.map +0 -1
- package/dist/chunk-VRFVF5RH.js +0 -169
- package/dist/chunk-VRFVF5RH.js.map +0 -1
- package/dist/chunk-YHO57D2V.js +0 -83
- package/dist/chunk-YHO57D2V.js.map +0 -1
- package/dist/syncAiModelsCatalog-CnXRLm2c.d.cts +0 -32
- package/dist/syncAiModelsCatalog-DpkN_w7S.d.ts +0 -32
- package/dist/types-BYXnCvKx.d.cts +0 -137
- package/dist/types-BYXnCvKx.d.ts +0 -137
- package/dist/types-CX6QFNNy.d.cts +0 -144
- package/dist/types-CuiPDcVs.d.ts +0 -144
- package/dist/upsertAiModelRecord-C831wOIF.d.ts +0 -35
- package/dist/upsertAiModelRecord-CjY-sny0.d.cts +0 -35
- /package/dist/{AiModelsCatalogClient-NUF3CBLW.js.map → chunk-56R4XA2S.js.map} +0 -0
package/dist/aliases/index.js
CHANGED
package/dist/catalog/index.cjs
CHANGED
|
@@ -1,30 +1,39 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
var _chunkXAWBTX3Ncjs = require('../chunk-XAWBTX3N.cjs');
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
var _chunkHS74X2OJcjs = require('../chunk-HS74X2OJ.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var _chunkDKHGWHXPcjs = require('../chunk-DKHGWHXP.cjs');
|
|
11
|
-
require('../chunk-FGP3QXWL.cjs');
|
|
12
|
-
require('../chunk-AV6OE2YQ.cjs');
|
|
13
|
-
require('../chunk-F2F4UEFD.cjs');
|
|
14
10
|
|
|
15
11
|
|
|
16
12
|
|
|
17
13
|
|
|
18
|
-
var _chunkTF4L2NECcjs = require('../chunk-TF4L2NEC.cjs');
|
|
19
|
-
require('../chunk-7Q742NI3.cjs');
|
|
20
14
|
|
|
21
15
|
|
|
22
16
|
|
|
23
17
|
|
|
18
|
+
var _chunk5XAAMBDOcjs = require('../chunk-5XAAMBDO.cjs');
|
|
19
|
+
require('../chunk-DXZOL3VN.cjs');
|
|
20
|
+
require('../chunk-EDMCKHO6.cjs');
|
|
21
|
+
require('../chunk-PADNCGZB.cjs');
|
|
22
|
+
require('../chunk-GS7T56RP.cjs');
|
|
24
23
|
|
|
25
24
|
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
exports.AiModelsCatalogClient = _chunk5XAAMBDOcjs.AiModelsCatalogClient; exports.DEFAULT_CATALOG_CACHE_TTL_MS = _chunk5XAAMBDOcjs.DEFAULT_CATALOG_CACHE_TTL_MS; exports.DEFAULT_DIRECT_CATALOG_URL = _chunk5XAAMBDOcjs.DEFAULT_DIRECT_CATALOG_URL; exports.DEFAULT_OPENROUTER_CATALOG_URL = _chunk5XAAMBDOcjs.DEFAULT_OPENROUTER_CATALOG_URL; exports.canonicalCatalogModelId = _chunk5XAAMBDOcjs.canonicalCatalogModelId; exports.invalidateCatalogLoadCache = _chunk5XAAMBDOcjs.invalidateCatalogLoadCache; exports.loadCatalogSources = _chunk5XAAMBDOcjs.loadCatalogSources; exports.loadCatalogSourcesCached = _chunk5XAAMBDOcjs.loadCatalogSourcesCached; exports.modelsFromX12iCatalogFile = _chunk5XAAMBDOcjs.modelsFromX12iCatalogFile; exports.normalizeX12iCatalogModel = _chunk5XAAMBDOcjs.normalizeX12iCatalogModel; exports.readBundledCatalogFiles = _chunk5XAAMBDOcjs.readBundledCatalogFiles; exports.refreshAiModelsCatalog = _chunkXAWBTX3Ncjs.refreshAiModelsCatalog; exports.resolveCatalogCacheTtlMs = _chunk5XAAMBDOcjs.resolveCatalogCacheTtlMs; exports.verifyAiModelsCatalog = _chunkXAWBTX3Ncjs.verifyAiModelsCatalog;
|
|
30
39
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/catalog/index.cjs"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/catalog/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,ilCAAC","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/catalog/index.cjs"}
|
package/dist/catalog/index.d.cts
CHANGED
|
@@ -1,100 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import { a as AiModelRecord
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
declare const AI_TOOLS_APP_ID = "ai-tools";
|
|
15
|
-
declare const AI_MODELS_DESCRIPTOR: CatalogDescriptor;
|
|
16
|
-
|
|
17
|
-
type CatalogVerifyOptions = {
|
|
18
|
-
catalox: Catalox;
|
|
19
|
-
appId?: string;
|
|
20
|
-
catalogId?: string;
|
|
21
|
-
/** When set, compare against this id set (e.g. from a sync that just ran). */
|
|
22
|
-
expectedModelIds?: Set<string>;
|
|
23
|
-
/** When set, compare against this list instead of fetching OpenRouter. */
|
|
24
|
-
openRouterModels?: AiModelRecord[];
|
|
25
|
-
openRouterApiKey?: string;
|
|
26
|
-
openRouterQuery?: OpenRouterModelsQuery;
|
|
27
|
-
/** Ensure descriptor is registered before reading (default true). */
|
|
28
|
-
ensureDescriptor?: boolean;
|
|
29
|
-
/** Max model ids to include in report samples (default 20). */
|
|
30
|
-
sampleLimit?: number;
|
|
31
|
-
};
|
|
32
|
-
type CatalogVerifyReport = {
|
|
33
|
-
ok: boolean;
|
|
34
|
-
openRouterCount: number;
|
|
35
|
-
cataloxCount: number;
|
|
36
|
-
missingInCatalox: string[];
|
|
37
|
-
extraInCatalox: string[];
|
|
38
|
-
supportsReasoningMissing: number;
|
|
39
|
-
openRouterMirrorMissing: number;
|
|
40
|
-
descriptorKeysMatch: boolean;
|
|
41
|
-
durationMs: number;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Compare the live OpenRouter catalog with Catalox/Firestore ai-models items.
|
|
45
|
-
* Use after sync in CI/cron, or standalone health checks.
|
|
46
|
-
*/
|
|
47
|
-
declare function verifyAiModelsCatalog(options: CatalogVerifyOptions): Promise<CatalogVerifyReport>;
|
|
48
|
-
|
|
49
|
-
type CatalogSyncJobOptions = SyncOptions & {
|
|
50
|
-
/**
|
|
51
|
-
* After upsert, compare Catalox to OpenRouter (default true).
|
|
52
|
-
* Set false only when you will verify separately.
|
|
53
|
-
*/
|
|
54
|
-
verifyAfter?: boolean;
|
|
55
|
-
/** Fail the job when verification does not pass (default true). */
|
|
56
|
-
failOnVerifyError?: boolean;
|
|
57
|
-
/** Delete Firestore rows not present in the latest OpenRouter list (default false). */
|
|
58
|
-
pruneStale?: boolean;
|
|
59
|
-
};
|
|
60
|
-
type CatalogSyncJobResult = {
|
|
61
|
-
sync: SyncResult;
|
|
62
|
-
verify?: CatalogVerifyReport;
|
|
63
|
-
prune?: {
|
|
64
|
-
scanned: number;
|
|
65
|
-
pruned: number;
|
|
66
|
-
prunedModelIds: string[];
|
|
67
|
-
};
|
|
68
|
-
ok: boolean;
|
|
69
|
-
};
|
|
70
|
-
declare class CatalogSyncJobError extends Error {
|
|
71
|
-
readonly sync: SyncResult;
|
|
72
|
-
readonly verify?: CatalogVerifyReport | undefined;
|
|
73
|
-
constructor(message: string, sync: SyncResult, verify?: CatalogVerifyReport | undefined);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Production entry point: sync OpenRouter → Catalox, optionally prune stale rows, then verify.
|
|
77
|
-
* Suitable for cron, Cloud Run jobs, and `ai-tools sync`.
|
|
78
|
-
*/
|
|
79
|
-
declare function runAiModelsCatalogSync(options: CatalogSyncJobOptions): Promise<CatalogSyncJobResult>;
|
|
80
|
-
|
|
81
|
-
type PruneStaleCatalogModelsOptions = {
|
|
82
|
-
firestore: Firestore;
|
|
83
|
-
catalogId: string;
|
|
84
|
-
context: CataloxContext;
|
|
85
|
-
/** Canonical model ids from the latest OpenRouter fetch. */
|
|
86
|
-
activeModelIds: Set<string>;
|
|
87
|
-
dryRun?: boolean;
|
|
88
|
-
};
|
|
89
|
-
type PruneStaleCatalogModelsResult = {
|
|
90
|
-
scanned: number;
|
|
91
|
-
pruned: number;
|
|
92
|
-
prunedModelIds: string[];
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Remove catalog documents that are no longer listed on OpenRouter.
|
|
96
|
-
* Off by default — enable explicitly when running production sync jobs.
|
|
97
|
-
*/
|
|
98
|
-
declare function pruneStaleCatalogModels(options: PruneStaleCatalogModelsOptions): Promise<PruneStaleCatalogModelsResult>;
|
|
99
|
-
|
|
100
|
-
export { AI_MODELS_CATALOG_ID, AI_MODELS_DESCRIPTOR, AI_TOOLS_APP_ID, CatalogSyncJobError, type CatalogSyncJobOptions, type CatalogSyncJobResult, type CatalogVerifyOptions, type CatalogVerifyReport, type EnsureAiModelsCatalogOptions, type PruneStaleCatalogModelsOptions, type PruneStaleCatalogModelsResult, ensureAiModelsCatalog, pruneStaleCatalogModels, runAiModelsCatalogSync, verifyAiModelsCatalog };
|
|
1
|
+
export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions, L as LoadCatalogOptions, b as LoadedCatalogs, l as loadCatalogSources, r as readBundledCatalogFiles } from '../AiModelsCatalogClient-B5FMI9gj.cjs';
|
|
2
|
+
import { a as AiModelRecord } from '../types-BrzJWsTU.cjs';
|
|
3
|
+
import { X as X12iCatalogModelEntry, b as CatalogSourceKind } from '../modelCache-CJftI-Ko.cjs';
|
|
4
|
+
export { C as CatalogRefreshOptions, a as CatalogRefreshResult, c as CatalogVerifyOptions, d as CatalogVerifyReport, D as DEFAULT_CATALOG_CACHE_TTL_MS, e as DEFAULT_DIRECT_CATALOG_URL, f as DEFAULT_OPENROUTER_CATALOG_URL, L as LoadCatalogCachedOptions, g as X12iModelsCatalogFile, i as invalidateCatalogLoadCache, l as loadCatalogSourcesCached, r as refreshAiModelsCatalog, h as resolveCatalogCacheTtlMs, v as verifyAiModelsCatalog } from '../modelCache-CJftI-Ko.cjs';
|
|
5
|
+
|
|
6
|
+
declare function canonicalCatalogModelId(provider: string, modelId: string): string;
|
|
7
|
+
declare function normalizeX12iCatalogModel(entry: X12iCatalogModelEntry, kind: CatalogSourceKind, verifiedAt: string): AiModelRecord | null;
|
|
8
|
+
declare function modelsFromX12iCatalogFile(file: {
|
|
9
|
+
models: X12iCatalogModelEntry[];
|
|
10
|
+
verifiedAt?: string;
|
|
11
|
+
}, kind: CatalogSourceKind): Map<string, AiModelRecord>;
|
|
12
|
+
|
|
13
|
+
export { CatalogSourceKind, X12iCatalogModelEntry, canonicalCatalogModelId, modelsFromX12iCatalogFile, normalizeX12iCatalogModel };
|
package/dist/catalog/index.d.ts
CHANGED
|
@@ -1,100 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import { a as AiModelRecord
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
declare const AI_TOOLS_APP_ID = "ai-tools";
|
|
15
|
-
declare const AI_MODELS_DESCRIPTOR: CatalogDescriptor;
|
|
16
|
-
|
|
17
|
-
type CatalogVerifyOptions = {
|
|
18
|
-
catalox: Catalox;
|
|
19
|
-
appId?: string;
|
|
20
|
-
catalogId?: string;
|
|
21
|
-
/** When set, compare against this id set (e.g. from a sync that just ran). */
|
|
22
|
-
expectedModelIds?: Set<string>;
|
|
23
|
-
/** When set, compare against this list instead of fetching OpenRouter. */
|
|
24
|
-
openRouterModels?: AiModelRecord[];
|
|
25
|
-
openRouterApiKey?: string;
|
|
26
|
-
openRouterQuery?: OpenRouterModelsQuery;
|
|
27
|
-
/** Ensure descriptor is registered before reading (default true). */
|
|
28
|
-
ensureDescriptor?: boolean;
|
|
29
|
-
/** Max model ids to include in report samples (default 20). */
|
|
30
|
-
sampleLimit?: number;
|
|
31
|
-
};
|
|
32
|
-
type CatalogVerifyReport = {
|
|
33
|
-
ok: boolean;
|
|
34
|
-
openRouterCount: number;
|
|
35
|
-
cataloxCount: number;
|
|
36
|
-
missingInCatalox: string[];
|
|
37
|
-
extraInCatalox: string[];
|
|
38
|
-
supportsReasoningMissing: number;
|
|
39
|
-
openRouterMirrorMissing: number;
|
|
40
|
-
descriptorKeysMatch: boolean;
|
|
41
|
-
durationMs: number;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Compare the live OpenRouter catalog with Catalox/Firestore ai-models items.
|
|
45
|
-
* Use after sync in CI/cron, or standalone health checks.
|
|
46
|
-
*/
|
|
47
|
-
declare function verifyAiModelsCatalog(options: CatalogVerifyOptions): Promise<CatalogVerifyReport>;
|
|
48
|
-
|
|
49
|
-
type CatalogSyncJobOptions = SyncOptions & {
|
|
50
|
-
/**
|
|
51
|
-
* After upsert, compare Catalox to OpenRouter (default true).
|
|
52
|
-
* Set false only when you will verify separately.
|
|
53
|
-
*/
|
|
54
|
-
verifyAfter?: boolean;
|
|
55
|
-
/** Fail the job when verification does not pass (default true). */
|
|
56
|
-
failOnVerifyError?: boolean;
|
|
57
|
-
/** Delete Firestore rows not present in the latest OpenRouter list (default false). */
|
|
58
|
-
pruneStale?: boolean;
|
|
59
|
-
};
|
|
60
|
-
type CatalogSyncJobResult = {
|
|
61
|
-
sync: SyncResult;
|
|
62
|
-
verify?: CatalogVerifyReport;
|
|
63
|
-
prune?: {
|
|
64
|
-
scanned: number;
|
|
65
|
-
pruned: number;
|
|
66
|
-
prunedModelIds: string[];
|
|
67
|
-
};
|
|
68
|
-
ok: boolean;
|
|
69
|
-
};
|
|
70
|
-
declare class CatalogSyncJobError extends Error {
|
|
71
|
-
readonly sync: SyncResult;
|
|
72
|
-
readonly verify?: CatalogVerifyReport | undefined;
|
|
73
|
-
constructor(message: string, sync: SyncResult, verify?: CatalogVerifyReport | undefined);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Production entry point: sync OpenRouter → Catalox, optionally prune stale rows, then verify.
|
|
77
|
-
* Suitable for cron, Cloud Run jobs, and `ai-tools sync`.
|
|
78
|
-
*/
|
|
79
|
-
declare function runAiModelsCatalogSync(options: CatalogSyncJobOptions): Promise<CatalogSyncJobResult>;
|
|
80
|
-
|
|
81
|
-
type PruneStaleCatalogModelsOptions = {
|
|
82
|
-
firestore: Firestore;
|
|
83
|
-
catalogId: string;
|
|
84
|
-
context: CataloxContext;
|
|
85
|
-
/** Canonical model ids from the latest OpenRouter fetch. */
|
|
86
|
-
activeModelIds: Set<string>;
|
|
87
|
-
dryRun?: boolean;
|
|
88
|
-
};
|
|
89
|
-
type PruneStaleCatalogModelsResult = {
|
|
90
|
-
scanned: number;
|
|
91
|
-
pruned: number;
|
|
92
|
-
prunedModelIds: string[];
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Remove catalog documents that are no longer listed on OpenRouter.
|
|
96
|
-
* Off by default — enable explicitly when running production sync jobs.
|
|
97
|
-
*/
|
|
98
|
-
declare function pruneStaleCatalogModels(options: PruneStaleCatalogModelsOptions): Promise<PruneStaleCatalogModelsResult>;
|
|
99
|
-
|
|
100
|
-
export { AI_MODELS_CATALOG_ID, AI_MODELS_DESCRIPTOR, AI_TOOLS_APP_ID, CatalogSyncJobError, type CatalogSyncJobOptions, type CatalogSyncJobResult, type CatalogVerifyOptions, type CatalogVerifyReport, type EnsureAiModelsCatalogOptions, type PruneStaleCatalogModelsOptions, type PruneStaleCatalogModelsResult, ensureAiModelsCatalog, pruneStaleCatalogModels, runAiModelsCatalogSync, verifyAiModelsCatalog };
|
|
1
|
+
export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions, L as LoadCatalogOptions, b as LoadedCatalogs, l as loadCatalogSources, r as readBundledCatalogFiles } from '../AiModelsCatalogClient-CPPNI6Ry.js';
|
|
2
|
+
import { a as AiModelRecord } from '../types-BrzJWsTU.js';
|
|
3
|
+
import { X as X12iCatalogModelEntry, b as CatalogSourceKind } from '../modelCache-BzRn6t_C.js';
|
|
4
|
+
export { C as CatalogRefreshOptions, a as CatalogRefreshResult, c as CatalogVerifyOptions, d as CatalogVerifyReport, D as DEFAULT_CATALOG_CACHE_TTL_MS, e as DEFAULT_DIRECT_CATALOG_URL, f as DEFAULT_OPENROUTER_CATALOG_URL, L as LoadCatalogCachedOptions, g as X12iModelsCatalogFile, i as invalidateCatalogLoadCache, l as loadCatalogSourcesCached, r as refreshAiModelsCatalog, h as resolveCatalogCacheTtlMs, v as verifyAiModelsCatalog } from '../modelCache-BzRn6t_C.js';
|
|
5
|
+
|
|
6
|
+
declare function canonicalCatalogModelId(provider: string, modelId: string): string;
|
|
7
|
+
declare function normalizeX12iCatalogModel(entry: X12iCatalogModelEntry, kind: CatalogSourceKind, verifiedAt: string): AiModelRecord | null;
|
|
8
|
+
declare function modelsFromX12iCatalogFile(file: {
|
|
9
|
+
models: X12iCatalogModelEntry[];
|
|
10
|
+
verifiedAt?: string;
|
|
11
|
+
}, kind: CatalogSourceKind): Map<string, AiModelRecord>;
|
|
12
|
+
|
|
13
|
+
export { CatalogSourceKind, X12iCatalogModelEntry, canonicalCatalogModelId, modelsFromX12iCatalogFile, normalizeX12iCatalogModel };
|
package/dist/catalog/index.js
CHANGED
|
@@ -1,30 +1,38 @@
|
|
|
1
|
-
import "../chunk-M5TMA73F.js";
|
|
2
1
|
import {
|
|
3
|
-
|
|
4
|
-
pruneStaleCatalogModels,
|
|
5
|
-
runAiModelsCatalogSync,
|
|
2
|
+
refreshAiModelsCatalog,
|
|
6
3
|
verifyAiModelsCatalog
|
|
7
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-AB5GNXJ4.js";
|
|
8
5
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
6
|
+
AiModelsCatalogClient,
|
|
7
|
+
DEFAULT_CATALOG_CACHE_TTL_MS,
|
|
8
|
+
DEFAULT_DIRECT_CATALOG_URL,
|
|
9
|
+
DEFAULT_OPENROUTER_CATALOG_URL,
|
|
10
|
+
canonicalCatalogModelId,
|
|
11
|
+
invalidateCatalogLoadCache,
|
|
12
|
+
loadCatalogSources,
|
|
13
|
+
loadCatalogSourcesCached,
|
|
14
|
+
modelsFromX12iCatalogFile,
|
|
15
|
+
normalizeX12iCatalogModel,
|
|
16
|
+
readBundledCatalogFiles,
|
|
17
|
+
resolveCatalogCacheTtlMs
|
|
18
|
+
} from "../chunk-OPN6BGNH.js";
|
|
19
|
+
import "../chunk-EYHMQVAL.js";
|
|
20
|
+
import "../chunk-B3V2EHRY.js";
|
|
21
|
+
import "../chunk-2PTCWPHV.js";
|
|
20
22
|
export {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
AiModelsCatalogClient,
|
|
24
|
+
DEFAULT_CATALOG_CACHE_TTL_MS,
|
|
25
|
+
DEFAULT_DIRECT_CATALOG_URL,
|
|
26
|
+
DEFAULT_OPENROUTER_CATALOG_URL,
|
|
27
|
+
canonicalCatalogModelId,
|
|
28
|
+
invalidateCatalogLoadCache,
|
|
29
|
+
loadCatalogSources,
|
|
30
|
+
loadCatalogSourcesCached,
|
|
31
|
+
modelsFromX12iCatalogFile,
|
|
32
|
+
normalizeX12iCatalogModel,
|
|
33
|
+
readBundledCatalogFiles,
|
|
34
|
+
refreshAiModelsCatalog,
|
|
35
|
+
resolveCatalogCacheTtlMs,
|
|
28
36
|
verifyAiModelsCatalog
|
|
29
37
|
};
|
|
30
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -13,7 +13,7 @@ var ModelNotFoundError = class extends AiToolsError {
|
|
|
13
13
|
constructor(modelId) {
|
|
14
14
|
super(
|
|
15
15
|
"MODEL_NOT_FOUND",
|
|
16
|
-
`Model not found: "${modelId}". Run "ai-tools
|
|
16
|
+
`Model not found: "${modelId}". Run "npx ai-tools catalog refresh" or verify the model id against the catalog.`
|
|
17
17
|
);
|
|
18
18
|
this.name = "ModelNotFoundError";
|
|
19
19
|
}
|
|
@@ -90,6 +90,19 @@ var CostCalculationError = class extends AiToolsError {
|
|
|
90
90
|
this.name = "CostCalculationError";
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
+
var UnknownModelCostError = class extends AiToolsError {
|
|
94
|
+
constructor(model, provider) {
|
|
95
|
+
super(
|
|
96
|
+
"COST_UNKNOWN_MODEL",
|
|
97
|
+
`Cannot price unknown model "${model}" (provider: "${provider}"). Refresh catalogs with "npx ai-tools catalog refresh", use a known ai-profile name, or set throwOnUnknownModel: false.`
|
|
98
|
+
);
|
|
99
|
+
this.model = model;
|
|
100
|
+
this.provider = provider;
|
|
101
|
+
this.name = "UnknownModelCostError";
|
|
102
|
+
}
|
|
103
|
+
model;
|
|
104
|
+
provider;
|
|
105
|
+
};
|
|
93
106
|
|
|
94
107
|
export {
|
|
95
108
|
AiToolsError,
|
|
@@ -101,6 +114,7 @@ export {
|
|
|
101
114
|
AliasFileParseError,
|
|
102
115
|
AliasFileWriteError,
|
|
103
116
|
SyncError,
|
|
104
|
-
CostCalculationError
|
|
117
|
+
CostCalculationError,
|
|
118
|
+
UnknownModelCostError
|
|
105
119
|
};
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
//# sourceMappingURL=chunk-2PTCWPHV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import type {\n ModelResolutionInput,\n ModelResolutionNotFound,\n} from \"./sync/modelNameResolver/types.js\";\n\nexport type AiToolsErrorCode =\n | \"MODEL_NOT_FOUND\"\n | \"SYNC_FETCH_FAILED\"\n | \"SYNC_UPSERT_FAILED\"\n | \"COST_CALCULATION_FAILED\"\n | \"COST_UNKNOWN_MODEL\"\n | \"INVALID_USAGE_INPUT\"\n | \"OPENROUTER_AUTH_FAILED\"\n | \"OPENROUTER_MODELS_FETCH_FAILED\"\n | \"CACHE_READ_ERROR\"\n | \"ALIAS_NOT_FOUND\"\n | \"ALIAS_INVALID_NAME\"\n | \"ALIAS_CONFLICT\"\n | \"ALIAS_FILE_PARSE_ERROR\"\n | \"ALIAS_FILE_WRITE_ERROR\";\n\nexport class AiToolsError extends Error {\n constructor(\n public readonly code: AiToolsErrorCode,\n message: string,\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"AiToolsError\";\n }\n}\n\nexport class ModelNotFoundError extends AiToolsError {\n constructor(modelId: string) {\n super(\n \"MODEL_NOT_FOUND\",\n `Model not found: \"${modelId}\". Run \"npx ai-tools catalog refresh\" or verify the model id against the catalog.`,\n );\n this.name = \"ModelNotFoundError\";\n }\n}\n\nexport class ModelResolutionError extends AiToolsError {\n constructor(\n public readonly input: ModelResolutionInput,\n public readonly result: ModelResolutionNotFound,\n ) {\n super(\n \"MODEL_NOT_FOUND\",\n `Could not resolve model \"${input.model}\" (provider: \"${input.provider ?? \"unspecified\"}\"). ` +\n result.reason +\n (result.bestRejectedCandidate\n ? ` Best candidate was \"${result.bestRejectedCandidate.modelId}\" (confidence ${result.bestRejectedCandidate.confidence.toFixed(2)}).`\n : \"\"),\n );\n this.name = \"ModelResolutionError\";\n }\n}\n\nexport class AliasNotFoundError extends AiToolsError {\n constructor(aliasName: string) {\n super(\n \"ALIAS_NOT_FOUND\",\n `Alias not found: \"${aliasName}\". Run \"ai-tools alias list\" to see defined aliases.`,\n );\n this.name = \"AliasNotFoundError\";\n }\n}\n\nexport class AliasInvalidNameError extends AiToolsError {\n constructor(aliasName: string) {\n super(\n \"ALIAS_INVALID_NAME\",\n `Invalid alias name: \"${aliasName}\". Names must match /^[a-z0-9][a-z0-9-]*$/`,\n );\n this.name = \"AliasInvalidNameError\";\n }\n}\n\nexport class AliasConflictError extends AiToolsError {\n constructor(aliasName: string) {\n super(\n \"ALIAS_CONFLICT\",\n `Alias \"${aliasName}\" already exists. Use --force to overwrite.`,\n );\n this.name = \"AliasConflictError\";\n }\n}\n\nexport class AliasFileParseError extends AiToolsError {\n constructor(path: string, cause?: unknown) {\n super(\n \"ALIAS_FILE_PARSE_ERROR\",\n `Failed to parse aliases file at \"${path}\". Check JSON syntax.`,\n cause,\n );\n this.name = \"AliasFileParseError\";\n }\n}\n\nexport class AliasFileWriteError extends AiToolsError {\n constructor(path: string, cause?: unknown) {\n super(\n \"ALIAS_FILE_WRITE_ERROR\",\n `Failed to write aliases file at \"${path}\".`,\n cause,\n );\n this.name = \"AliasFileWriteError\";\n }\n}\n\nexport class SyncError extends AiToolsError {\n constructor(code: Extract<AiToolsErrorCode, \"SYNC_FETCH_FAILED\" | \"SYNC_UPSERT_FAILED\" | \"OPENROUTER_AUTH_FAILED\" | \"OPENROUTER_MODELS_FETCH_FAILED\">, message: string, cause?: unknown) {\n super(code, message, cause);\n this.name = \"SyncError\";\n }\n}\n\nexport class CostCalculationError extends AiToolsError {\n constructor(message: string, cause?: unknown) {\n super(\"COST_CALCULATION_FAILED\", message, cause);\n this.name = \"CostCalculationError\";\n }\n}\n\nexport class UnknownModelCostError extends AiToolsError {\n constructor(\n public readonly model: string,\n public readonly provider: string,\n ) {\n super(\n \"COST_UNKNOWN_MODEL\",\n `Cannot price unknown model \"${model}\" (provider: \"${provider}\"). ` +\n 'Refresh catalogs with \"npx ai-tools catalog refresh\", use a known ai-profile name, or set throwOnUnknownModel: false.',\n );\n this.name = \"UnknownModelCostError\";\n }\n}\n"],"mappings":";AAqBO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACkB,MAChB,SACgB,OAChB;AACA,UAAM,OAAO;AAJG;AAEA;AAGhB,SAAK,OAAO;AAAA,EACd;AAAA,EANkB;AAAA,EAEA;AAKpB;AAEO,IAAM,qBAAN,cAAiC,aAAa;AAAA,EACnD,YAAY,SAAiB;AAC3B;AAAA,MACE;AAAA,MACA,qBAAqB,OAAO;AAAA,IAC9B;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,aAAa;AAAA,EACrD,YACkB,OACA,QAChB;AACA;AAAA,MACE;AAAA,MACA,4BAA4B,MAAM,KAAK,iBAAiB,MAAM,YAAY,aAAa,SACrF,OAAO,UACN,OAAO,wBACJ,wBAAwB,OAAO,sBAAsB,OAAO,iBAAiB,OAAO,sBAAsB,WAAW,QAAQ,CAAC,CAAC,OAC/H;AAAA,IACR;AAVgB;AACA;AAUhB,SAAK,OAAO;AAAA,EACd;AAAA,EAZkB;AAAA,EACA;AAYpB;AAEO,IAAM,qBAAN,cAAiC,aAAa;AAAA,EACnD,YAAY,WAAmB;AAC7B;AAAA,MACE;AAAA,MACA,qBAAqB,SAAS;AAAA,IAChC;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,wBAAN,cAAoC,aAAa;AAAA,EACtD,YAAY,WAAmB;AAC7B;AAAA,MACE;AAAA,MACA,wBAAwB,SAAS;AAAA,IACnC;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,cAAiC,aAAa;AAAA,EACnD,YAAY,WAAmB;AAC7B;AAAA,MACE;AAAA,MACA,UAAU,SAAS;AAAA,IACrB;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,aAAa;AAAA,EACpD,YAAY,MAAc,OAAiB;AACzC;AAAA,MACE;AAAA,MACA,oCAAoC,IAAI;AAAA,MACxC;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,aAAa;AAAA,EACpD,YAAY,MAAc,OAAiB;AACzC;AAAA,MACE;AAAA,MACA,oCAAoC,IAAI;AAAA,MACxC;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,YAAN,cAAwB,aAAa;AAAA,EAC1C,YAAY,MAA2I,SAAiB,OAAiB;AACvL,UAAM,MAAM,SAAS,KAAK;AAC1B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,aAAa;AAAA,EACrD,YAAY,SAAiB,OAAiB;AAC5C,UAAM,2BAA2B,SAAS,KAAK;AAC/C,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,wBAAN,cAAoC,aAAa;AAAA,EACtD,YACkB,OACA,UAChB;AACA;AAAA,MACE;AAAA,MACA,+BAA+B,KAAK,iBAAiB,QAAQ;AAAA,IAE/D;AAPgB;AACA;AAOhB,SAAK,OAAO;AAAA,EACd;AAAA,EATkB;AAAA,EACA;AASpB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-56R4XA2S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";//# sourceMappingURL=chunk-5GUKLOEK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-5GUKLOEK.cjs"],"names":[],"mappings":"AAAA","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-5GUKLOEK.cjs"}
|