@x12i/ai-tools 1.0.4 → 2.0.1

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 (162) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +146 -204
  3. package/dist/AiModelsCatalogClient-B5FMI9gj.d.cts +58 -0
  4. package/dist/AiModelsCatalogClient-CPPNI6Ry.d.ts +58 -0
  5. package/dist/aliases/index.cjs +4 -3
  6. package/dist/aliases/index.cjs.map +1 -1
  7. package/dist/aliases/index.d.cts +3 -5
  8. package/dist/aliases/index.d.ts +3 -5
  9. package/dist/aliases/index.js +2 -2
  10. package/dist/catalog/index.cjs +18 -9
  11. package/dist/catalog/index.cjs.map +1 -1
  12. package/dist/catalog/index.d.cts +13 -100
  13. package/dist/catalog/index.d.ts +13 -100
  14. package/dist/catalog/index.js +31 -23
  15. package/dist/{chunk-AJEKEWWB.js → chunk-2PTCWPHV.js} +17 -3
  16. package/dist/chunk-2PTCWPHV.js.map +1 -0
  17. package/dist/chunk-56R4XA2S.js +1 -0
  18. package/dist/chunk-5GUKLOEK.cjs +1 -0
  19. package/dist/chunk-5GUKLOEK.cjs.map +1 -0
  20. package/dist/chunk-5IZ7PLY2.cjs +51 -0
  21. package/dist/chunk-5IZ7PLY2.cjs.map +1 -0
  22. package/dist/chunk-5XAAMBDO.cjs +1988 -0
  23. package/dist/chunk-5XAAMBDO.cjs.map +1 -0
  24. package/dist/chunk-6BQBKROR.js +95 -0
  25. package/dist/chunk-6BQBKROR.js.map +1 -0
  26. package/dist/chunk-AB5GNXJ4.js +46 -0
  27. package/dist/chunk-AB5GNXJ4.js.map +1 -0
  28. package/dist/{chunk-O2A6OVEH.js → chunk-ANVONYJF.js} +2 -2
  29. package/dist/{chunk-O2A6OVEH.js.map → chunk-ANVONYJF.js.map} +1 -1
  30. package/dist/chunk-B3V2EHRY.js +225 -0
  31. package/dist/chunk-B3V2EHRY.js.map +1 -0
  32. package/dist/{chunk-QWAX7VQO.cjs → chunk-BAHBDADJ.cjs} +11 -11
  33. package/dist/{chunk-QWAX7VQO.cjs.map → chunk-BAHBDADJ.cjs.map} +1 -1
  34. package/dist/chunk-CTM35DMA.js +948 -0
  35. package/dist/chunk-CTM35DMA.js.map +1 -0
  36. package/dist/{chunk-TF4L2NEC.cjs → chunk-DXZOL3VN.cjs} +62 -313
  37. package/dist/chunk-DXZOL3VN.cjs.map +1 -0
  38. package/dist/chunk-EDMCKHO6.cjs +225 -0
  39. package/dist/chunk-EDMCKHO6.cjs.map +1 -0
  40. package/dist/{chunk-DJ5SWJDY.js → chunk-EYHMQVAL.js} +48 -299
  41. package/dist/chunk-EYHMQVAL.js.map +1 -0
  42. package/dist/chunk-GS7T56RP.cjs +8 -0
  43. package/dist/chunk-GS7T56RP.cjs.map +1 -0
  44. package/dist/chunk-OPN6BGNH.js +1985 -0
  45. package/dist/chunk-OPN6BGNH.js.map +1 -0
  46. package/dist/{chunk-7Q742NI3.cjs → chunk-PADNCGZB.cjs} +17 -3
  47. package/dist/chunk-PADNCGZB.cjs.map +1 -0
  48. package/dist/chunk-PRCICORG.cjs +95 -0
  49. package/dist/chunk-PRCICORG.cjs.map +1 -0
  50. package/dist/{chunk-6QGDZTGH.js → chunk-SIH4GPV4.js} +4 -29
  51. package/dist/chunk-SIH4GPV4.js.map +1 -0
  52. package/dist/{chunk-4NAY6HRP.js → chunk-VJHLO2R3.js} +7 -58
  53. package/dist/chunk-VJHLO2R3.js.map +1 -0
  54. package/dist/chunk-WOHMHXRZ.cjs +951 -0
  55. package/dist/chunk-WOHMHXRZ.cjs.map +1 -0
  56. package/dist/chunk-XAWBTX3N.cjs +46 -0
  57. package/dist/chunk-XAWBTX3N.cjs.map +1 -0
  58. package/dist/{chunk-AV6OE2YQ.cjs → chunk-XOKUDUUI.cjs} +14 -39
  59. package/dist/chunk-XOKUDUUI.cjs.map +1 -0
  60. package/dist/chunk-YQDSN6R6.cjs +86 -0
  61. package/dist/chunk-YQDSN6R6.cjs.map +1 -0
  62. package/dist/chunk-YQVY7CWT.js +51 -0
  63. package/dist/chunk-YQVY7CWT.js.map +1 -0
  64. package/dist/cli/index.cjs +59 -201
  65. package/dist/cli/index.cjs.map +1 -1
  66. package/dist/cli/index.js +53 -198
  67. package/dist/cli/index.js.map +1 -1
  68. package/dist/cost/index.cjs +19 -3
  69. package/dist/cost/index.cjs.map +1 -1
  70. package/dist/cost/index.d.cts +10 -50
  71. package/dist/cost/index.d.ts +10 -50
  72. package/dist/cost/index.js +18 -3
  73. package/dist/index.cjs +36 -14
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.d.cts +15 -13
  76. package/dist/index.d.ts +15 -13
  77. package/dist/index.js +56 -35
  78. package/dist/modelCache-BzRn6t_C.d.ts +113 -0
  79. package/dist/modelCache-CJftI-Ko.d.cts +113 -0
  80. package/dist/{modelNameResolver-DqFt7g6W.d.ts → modelNameResolver-5XkBMctP.d.ts} +2 -6
  81. package/dist/{modelNameResolver-D9V_GfUK.d.cts → modelNameResolver-C5CSTGFF.d.cts} +2 -6
  82. package/dist/models/index.cjs +9 -6
  83. package/dist/models/index.cjs.map +1 -1
  84. package/dist/models/index.d.cts +9 -31
  85. package/dist/models/index.d.ts +9 -31
  86. package/dist/models/index.js +9 -7
  87. package/dist/profiles/index.cjs +18 -0
  88. package/dist/profiles/index.cjs.map +1 -0
  89. package/dist/profiles/index.d.cts +40 -0
  90. package/dist/profiles/index.d.ts +40 -0
  91. package/dist/profiles/index.js +17 -0
  92. package/dist/resolveUsageModel-BFwf80Hz.d.ts +140 -0
  93. package/dist/resolveUsageModel-C_YmGR1M.d.cts +140 -0
  94. package/dist/sync/index.cjs +7 -9
  95. package/dist/sync/index.cjs.map +1 -1
  96. package/dist/sync/index.d.cts +3 -8
  97. package/dist/sync/index.d.ts +3 -8
  98. package/dist/sync/index.js +8 -11
  99. package/dist/toolbox/index.cjs +1 -0
  100. package/dist/toolbox/index.cjs.map +1 -1
  101. package/dist/types-BrzJWsTU.d.cts +277 -0
  102. package/dist/types-BrzJWsTU.d.ts +277 -0
  103. package/package.json +14 -20
  104. package/src/data/models-catalog.json +670 -0
  105. package/src/data/openrouter-models-catalog.json +857 -0
  106. package/dist/AiModelsCatalogClient-4RF5BCDL.cjs +0 -9
  107. package/dist/AiModelsCatalogClient-4RF5BCDL.cjs.map +0 -1
  108. package/dist/AiModelsCatalogClient-CNeqFiFs.d.cts +0 -30
  109. package/dist/AiModelsCatalogClient-NUF3CBLW.js +0 -9
  110. package/dist/AiModelsCatalogClient-nwFoEaqL.d.ts +0 -30
  111. package/dist/catalox/index.cjs +0 -21
  112. package/dist/catalox/index.cjs.map +0 -1
  113. package/dist/catalox/index.d.cts +0 -11
  114. package/dist/catalox/index.d.ts +0 -11
  115. package/dist/catalox/index.js +0 -21
  116. package/dist/chunk-4NAY6HRP.js.map +0 -1
  117. package/dist/chunk-6QGDZTGH.js.map +0 -1
  118. package/dist/chunk-7Q742NI3.cjs.map +0 -1
  119. package/dist/chunk-AJEKEWWB.js.map +0 -1
  120. package/dist/chunk-AV6OE2YQ.cjs.map +0 -1
  121. package/dist/chunk-C3H7RTFR.cjs +0 -1
  122. package/dist/chunk-C3H7RTFR.cjs.map +0 -1
  123. package/dist/chunk-DJ5SWJDY.js.map +0 -1
  124. package/dist/chunk-DKHGWHXP.cjs +0 -169
  125. package/dist/chunk-DKHGWHXP.cjs.map +0 -1
  126. package/dist/chunk-F2F4UEFD.cjs +0 -75
  127. package/dist/chunk-F2F4UEFD.cjs.map +0 -1
  128. package/dist/chunk-FGP3QXWL.cjs +0 -163
  129. package/dist/chunk-FGP3QXWL.cjs.map +0 -1
  130. package/dist/chunk-G2G4KSC5.js +0 -30
  131. package/dist/chunk-G2G4KSC5.js.map +0 -1
  132. package/dist/chunk-HN6UAQAE.cjs +0 -83
  133. package/dist/chunk-HN6UAQAE.cjs.map +0 -1
  134. package/dist/chunk-HS74X2OJ.cjs +0 -172
  135. package/dist/chunk-HS74X2OJ.cjs.map +0 -1
  136. package/dist/chunk-HYGXZY25.js +0 -163
  137. package/dist/chunk-HYGXZY25.js.map +0 -1
  138. package/dist/chunk-KQOALKKX.js +0 -75
  139. package/dist/chunk-KQOALKKX.js.map +0 -1
  140. package/dist/chunk-LYOU7CA2.cjs +0 -30
  141. package/dist/chunk-LYOU7CA2.cjs.map +0 -1
  142. package/dist/chunk-M5TMA73F.js +0 -1
  143. package/dist/chunk-M5TMA73F.js.map +0 -1
  144. package/dist/chunk-MX3AMQFC.js +0 -172
  145. package/dist/chunk-MX3AMQFC.js.map +0 -1
  146. package/dist/chunk-QCRLKVB3.cjs +0 -137
  147. package/dist/chunk-QCRLKVB3.cjs.map +0 -1
  148. package/dist/chunk-TF4L2NEC.cjs.map +0 -1
  149. package/dist/chunk-VRFVF5RH.js +0 -169
  150. package/dist/chunk-VRFVF5RH.js.map +0 -1
  151. package/dist/chunk-YHO57D2V.js +0 -83
  152. package/dist/chunk-YHO57D2V.js.map +0 -1
  153. package/dist/syncAiModelsCatalog-CnXRLm2c.d.cts +0 -32
  154. package/dist/syncAiModelsCatalog-DpkN_w7S.d.ts +0 -32
  155. package/dist/types-BYXnCvKx.d.cts +0 -137
  156. package/dist/types-BYXnCvKx.d.ts +0 -137
  157. package/dist/types-CX6QFNNy.d.cts +0 -144
  158. package/dist/types-CuiPDcVs.d.ts +0 -144
  159. package/dist/upsertAiModelRecord-C831wOIF.d.ts +0 -35
  160. package/dist/upsertAiModelRecord-CjY-sny0.d.cts +0 -35
  161. /package/dist/{AiModelsCatalogClient-NUF3CBLW.js.map → chunk-56R4XA2S.js.map} +0 -0
  162. /package/dist/{catalox → profiles}/index.js.map +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AiModelsCatalogClient
3
- } from "./chunk-KQOALKKX.js";
3
+ } from "./chunk-OPN6BGNH.js";
4
4
 
5
5
  // src/models/filterModels.ts
6
6
  function matchesSearch(record, search) {
@@ -45,23 +45,12 @@ function countModels(models, filters = {}) {
45
45
  // src/models/AiModelsService.ts
46
46
  var AiModelsService = class {
47
47
  client;
48
- catalox;
49
- appId;
50
- catalogId;
51
- constructor(options) {
52
- this.catalox = options.catalox;
48
+ constructor(options = {}) {
53
49
  this.client = new AiModelsCatalogClient(options);
54
- this.appId = options.appId ?? "ai-tools";
55
- this.catalogId = options.catalogId ?? "ai-models";
56
50
  }
57
- context() {
58
- return { appId: this.appId, superAdmin: true };
59
- }
60
- /** Load all models (cached). */
61
51
  async getAllModels() {
62
52
  return this.client.getAllModels();
63
53
  }
64
- /** List models with in-memory filters (fast after cache warm). */
65
54
  async listModels(filters = {}) {
66
55
  const all = await this.getAllModels();
67
56
  const total = countModels(all.values(), filters);
@@ -70,52 +59,12 @@ var AiModelsService = class {
70
59
  const models = filterModels(all.values(), { ...filters, limit, offset });
71
60
  return { models, total, limit, offset };
72
61
  }
73
- /** Count models matching filters. */
74
62
  async countModels(filters = {}) {
75
63
  const all = await this.getAllModels();
76
64
  return countModels(all.values(), filters);
77
65
  }
78
- /**
79
- * Full model record by id or alias (same resolution as cost calculator).
80
- */
81
- async getModelInfo(modelIdOrAlias) {
82
- return this.client.getModel(modelIdOrAlias);
83
- }
84
- /**
85
- * Query via Catalox indexed fields (provider, status, output modality, tools).
86
- * Falls back to in-memory filter when Catalox returns partial pages.
87
- */
88
- async listModelsFromCatalog(filters = {}, options) {
89
- const filter = {};
90
- if (filters.providerId) filter.providerId = filters.providerId;
91
- if (filters.status) filter.status = filters.status;
92
- if (filters.outputModality) filter.primaryOutputModality = filters.outputModality;
93
- if (filters.supportsTools !== void 0) filter.supportsTools = filters.supportsTools;
94
- if (filters.supportsReasoning !== void 0) {
95
- filter.supportsReasoning = filters.supportsReasoning;
96
- }
97
- const limit = filters.limit ?? 50;
98
- const result = await this.catalox.listCatalogItems(this.context(), this.catalogId, {
99
- limit: Math.min(limit, 1e4),
100
- filter,
101
- ...options
102
- });
103
- let models = result.items.map((item) => item.data);
104
- if (filters.supportedParameter) {
105
- models = models.filter((m) => m.supportedParameters?.includes(filters.supportedParameter));
106
- }
107
- if (filters.inputModality) {
108
- models = models.filter((m) => m.inputModalities?.includes(filters.inputModality));
109
- }
110
- if (filters.search) {
111
- models = filterModels(models, { search: filters.search });
112
- }
113
- return {
114
- models,
115
- total: models.length,
116
- limit,
117
- offset: filters.offset ?? 0
118
- };
66
+ async getModelInfo(modelIdOrAlias, provider) {
67
+ return this.client.getModel(modelIdOrAlias, provider);
119
68
  }
120
69
  async resolve(modelIdOrAlias, provider) {
121
70
  return this.client.resolveModel({ model: modelIdOrAlias, provider });
@@ -124,8 +73,8 @@ var AiModelsService = class {
124
73
  await this.client.refresh();
125
74
  }
126
75
  };
127
- async function getModelInfo(service, modelIdOrAlias) {
128
- return service.getModelInfo(modelIdOrAlias);
76
+ async function getModelInfo(modelIdOrAlias, options = {}, provider) {
77
+ return new AiModelsService(options).getModelInfo(modelIdOrAlias, provider);
129
78
  }
130
79
 
131
80
  export {
@@ -134,4 +83,4 @@ export {
134
83
  AiModelsService,
135
84
  getModelInfo
136
85
  };
137
- //# sourceMappingURL=chunk-4NAY6HRP.js.map
86
+ //# sourceMappingURL=chunk-VJHLO2R3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/models/filterModels.ts","../src/models/AiModelsService.ts"],"sourcesContent":["import type { AiModelRecord, ModelListFilters } from \"./types.js\";\n\nfunction matchesSearch(record: AiModelRecord, search: string): boolean {\n const q = search.toLowerCase();\n return (\n record.modelId.toLowerCase().includes(q) ||\n record.name.toLowerCase().includes(q) ||\n record.description.toLowerCase().includes(q) ||\n record.canonicalSlug.toLowerCase().includes(q) ||\n record.aliases.some((a) => a.toLowerCase().includes(q))\n );\n}\n\nexport function filterModels(\n models: Iterable<AiModelRecord>,\n filters: ModelListFilters = {},\n): AiModelRecord[] {\n let list = [...models];\n\n if (filters.providerId) {\n list = list.filter((m) => m.providerId === filters.providerId);\n }\n if (filters.status) {\n list = list.filter((m) => m.status === filters.status);\n }\n if (filters.outputModality) {\n list = list.filter((m) => m.outputModalities.includes(filters.outputModality!));\n }\n if (filters.inputModality) {\n list = list.filter((m) => m.inputModalities.includes(filters.inputModality!));\n }\n if (filters.supportedParameter) {\n list = list.filter((m) => m.supportedParameters.includes(filters.supportedParameter!));\n }\n if (filters.supportsTools !== undefined) {\n list = list.filter((m) => m.supportsTools === filters.supportsTools);\n }\n if (filters.supportsReasoning !== undefined) {\n list = list.filter((m) => m.supportsReasoning === filters.supportsReasoning);\n }\n if (filters.search) {\n list = list.filter((m) => matchesSearch(m, filters.search!));\n }\n\n list.sort((a, b) => a.name.localeCompare(b.name));\n\n const offset = filters.offset ?? 0;\n const limit = filters.limit ?? list.length;\n return list.slice(offset, offset + limit);\n}\n\nexport function countModels(\n models: Iterable<AiModelRecord>,\n filters: Omit<ModelListFilters, \"limit\" | \"offset\"> = {},\n): number {\n return filterModels(models, { ...filters, limit: Number.MAX_SAFE_INTEGER, offset: 0 }).length;\n}\n","import { AiModelsCatalogClient } from \"../catalog/AiModelsCatalogClient.js\";\nimport type { AiModelsCatalogClientOptions } from \"../catalog/AiModelsCatalogClient.js\";\nimport { countModels, filterModels } from \"./filterModels.js\";\nimport type { AiModelRecord, ModelListFilters, ModelListResult } from \"./types.js\";\n\nexport type AiModelsServiceOptions = AiModelsCatalogClientOptions;\n\n/**\n * High-level model catalog API — list, filter, count, and get full model info.\n */\nexport class AiModelsService {\n private readonly client: AiModelsCatalogClient;\n\n constructor(options: AiModelsServiceOptions = {}) {\n this.client = new AiModelsCatalogClient(options);\n }\n\n async getAllModels(): Promise<Map<string, AiModelRecord>> {\n return this.client.getAllModels();\n }\n\n async listModels(filters: ModelListFilters = {}): Promise<ModelListResult> {\n const all = await this.getAllModels();\n const total = countModels(all.values(), filters);\n const limit = filters.limit ?? 50;\n const offset = filters.offset ?? 0;\n const models = filterModels(all.values(), { ...filters, limit, offset });\n return { models, total, limit, offset };\n }\n\n async countModels(filters: Omit<ModelListFilters, \"limit\" | \"offset\"> = {}): Promise<number> {\n const all = await this.getAllModels();\n return countModels(all.values(), filters);\n }\n\n async getModelInfo(modelIdOrAlias: string, provider?: string): Promise<AiModelRecord | null> {\n return this.client.getModel(modelIdOrAlias, provider);\n }\n\n async resolve(\n modelIdOrAlias: string,\n provider?: string,\n ): Promise<import(\"../sync/modelNameResolver/types.js\").ModelResolutionResult> {\n return this.client.resolveModel({ model: modelIdOrAlias, provider });\n }\n\n async refresh(): Promise<void> {\n await this.client.refresh();\n }\n}\n\nexport async function getModelInfo(\n modelIdOrAlias: string,\n options: AiModelsServiceOptions = {},\n provider?: string,\n): Promise<AiModelRecord | null> {\n return new AiModelsService(options).getModelInfo(modelIdOrAlias, provider);\n}\n"],"mappings":"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","names":[]}