@funkai/models 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 (213) hide show
  1. package/.generated/entries.json +23 -0
  2. package/.generated/req.txt +1 -0
  3. package/.turbo/turbo-build.log +145 -0
  4. package/.turbo/turbo-typecheck.log +4 -0
  5. package/CHANGELOG.md +23 -0
  6. package/README.md +95 -0
  7. package/dist/alibaba-B6q4Ng1R.mjs +957 -0
  8. package/dist/alibaba-B6q4Ng1R.mjs.map +1 -0
  9. package/dist/amazon-bedrock-Cv9AHQBH.mjs +2070 -0
  10. package/dist/amazon-bedrock-Cv9AHQBH.mjs.map +1 -0
  11. package/dist/anthropic-yB7ST97_.mjs +651 -0
  12. package/dist/anthropic-yB7ST97_.mjs.map +1 -0
  13. package/dist/cerebras-COfl7XM-.mjs +95 -0
  14. package/dist/cerebras-COfl7XM-.mjs.map +1 -0
  15. package/dist/cohere-B7TgO0hT.mjs +271 -0
  16. package/dist/cohere-B7TgO0hT.mjs.map +1 -0
  17. package/dist/deepinfra-B0GxUwCG.mjs +636 -0
  18. package/dist/deepinfra-B0GxUwCG.mjs.map +1 -0
  19. package/dist/deepseek-D64ZEsvS.mjs +50 -0
  20. package/dist/deepseek-D64ZEsvS.mjs.map +1 -0
  21. package/dist/fireworks-ai-DJYvdAi_.mjs +304 -0
  22. package/dist/fireworks-ai-DJYvdAi_.mjs.map +1 -0
  23. package/dist/google-BypRl349.mjs +833 -0
  24. package/dist/google-BypRl349.mjs.map +1 -0
  25. package/dist/google-vertex-DbS-zTGD.mjs +730 -0
  26. package/dist/google-vertex-DbS-zTGD.mjs.map +1 -0
  27. package/dist/groq-ei_PerYi.mjs +381 -0
  28. package/dist/groq-ei_PerYi.mjs.map +1 -0
  29. package/dist/huggingface-DaM1EeLP.mjs +456 -0
  30. package/dist/huggingface-DaM1EeLP.mjs.map +1 -0
  31. package/dist/inception-CspEzqNV.mjs +101 -0
  32. package/dist/inception-CspEzqNV.mjs.map +1 -0
  33. package/dist/index.d.mts +30314 -0
  34. package/dist/index.d.mts.map +1 -0
  35. package/dist/index.mjs +271 -0
  36. package/dist/index.mjs.map +1 -0
  37. package/dist/llama-Cf3-koap.mjs +161 -0
  38. package/dist/llama-Cf3-koap.mjs.map +1 -0
  39. package/dist/mistral-BI9MdAO4.mjs +579 -0
  40. package/dist/mistral-BI9MdAO4.mjs.map +1 -0
  41. package/dist/nvidia-COHacuoa.mjs +1625 -0
  42. package/dist/nvidia-COHacuoa.mjs.map +1 -0
  43. package/dist/openai-C0nCfZUq.mjs +1023 -0
  44. package/dist/openai-C0nCfZUq.mjs.map +1 -0
  45. package/dist/openrouter-DSFzxKQb.mjs +4608 -0
  46. package/dist/openrouter-DSFzxKQb.mjs.map +1 -0
  47. package/dist/perplexity-zeZ2WlBU.mjs +96 -0
  48. package/dist/perplexity-zeZ2WlBU.mjs.map +1 -0
  49. package/dist/providers/alibaba.d.mts +1795 -0
  50. package/dist/providers/alibaba.d.mts.map +1 -0
  51. package/dist/providers/alibaba.mjs +39 -0
  52. package/dist/providers/alibaba.mjs.map +1 -0
  53. package/dist/providers/amazon-bedrock.d.mts +3713 -0
  54. package/dist/providers/amazon-bedrock.d.mts.map +1 -0
  55. package/dist/providers/amazon-bedrock.mjs +39 -0
  56. package/dist/providers/amazon-bedrock.mjs.map +1 -0
  57. package/dist/providers/anthropic.d.mts +1109 -0
  58. package/dist/providers/anthropic.d.mts.map +1 -0
  59. package/dist/providers/anthropic.mjs +39 -0
  60. package/dist/providers/anthropic.mjs.map +1 -0
  61. package/dist/providers/cerebras.d.mts +219 -0
  62. package/dist/providers/cerebras.d.mts.map +1 -0
  63. package/dist/providers/cerebras.mjs +39 -0
  64. package/dist/providers/cerebras.mjs.map +1 -0
  65. package/dist/providers/cohere.d.mts +555 -0
  66. package/dist/providers/cohere.d.mts.map +1 -0
  67. package/dist/providers/cohere.mjs +39 -0
  68. package/dist/providers/cohere.mjs.map +1 -0
  69. package/dist/providers/deepinfra.d.mts +1245 -0
  70. package/dist/providers/deepinfra.d.mts.map +1 -0
  71. package/dist/providers/deepinfra.mjs +39 -0
  72. package/dist/providers/deepinfra.mjs.map +1 -0
  73. package/dist/providers/deepseek.d.mts +139 -0
  74. package/dist/providers/deepseek.d.mts.map +1 -0
  75. package/dist/providers/deepseek.mjs +39 -0
  76. package/dist/providers/deepseek.mjs.map +1 -0
  77. package/dist/providers/fireworks-ai.d.mts +611 -0
  78. package/dist/providers/fireworks-ai.d.mts.map +1 -0
  79. package/dist/providers/fireworks-ai.mjs +39 -0
  80. package/dist/providers/fireworks-ai.mjs.map +1 -0
  81. package/dist/providers/google-vertex.d.mts +1227 -0
  82. package/dist/providers/google-vertex.d.mts.map +1 -0
  83. package/dist/providers/google-vertex.mjs +39 -0
  84. package/dist/providers/google-vertex.mjs.map +1 -0
  85. package/dist/providers/google.d.mts +1359 -0
  86. package/dist/providers/google.d.mts.map +1 -0
  87. package/dist/providers/google.mjs +39 -0
  88. package/dist/providers/google.mjs.map +1 -0
  89. package/dist/providers/groq.d.mts +765 -0
  90. package/dist/providers/groq.d.mts.map +1 -0
  91. package/dist/providers/groq.mjs +39 -0
  92. package/dist/providers/groq.mjs.map +1 -0
  93. package/dist/providers/huggingface.d.mts +901 -0
  94. package/dist/providers/huggingface.d.mts.map +1 -0
  95. package/dist/providers/huggingface.mjs +39 -0
  96. package/dist/providers/huggingface.mjs.map +1 -0
  97. package/dist/providers/inception.d.mts +231 -0
  98. package/dist/providers/inception.d.mts.map +1 -0
  99. package/dist/providers/inception.mjs +39 -0
  100. package/dist/providers/inception.mjs.map +1 -0
  101. package/dist/providers/llama.d.mts +345 -0
  102. package/dist/providers/llama.d.mts.map +1 -0
  103. package/dist/providers/llama.mjs +39 -0
  104. package/dist/providers/llama.mjs.map +1 -0
  105. package/dist/providers/mistral.d.mts +1143 -0
  106. package/dist/providers/mistral.d.mts.map +1 -0
  107. package/dist/providers/mistral.mjs +39 -0
  108. package/dist/providers/mistral.mjs.map +1 -0
  109. package/dist/providers/nvidia.d.mts +3117 -0
  110. package/dist/providers/nvidia.d.mts.map +1 -0
  111. package/dist/providers/nvidia.mjs +39 -0
  112. package/dist/providers/nvidia.mjs.map +1 -0
  113. package/dist/providers/openai.d.mts +1963 -0
  114. package/dist/providers/openai.d.mts.map +1 -0
  115. package/dist/providers/openai.mjs +39 -0
  116. package/dist/providers/openai.mjs.map +1 -0
  117. package/dist/providers/openrouter.d.mts +8531 -0
  118. package/dist/providers/openrouter.d.mts.map +1 -0
  119. package/dist/providers/openrouter.mjs +39 -0
  120. package/dist/providers/openrouter.mjs.map +1 -0
  121. package/dist/providers/perplexity.d.mts +221 -0
  122. package/dist/providers/perplexity.d.mts.map +1 -0
  123. package/dist/providers/perplexity.mjs +39 -0
  124. package/dist/providers/perplexity.mjs.map +1 -0
  125. package/dist/providers/togetherai.d.mts +767 -0
  126. package/dist/providers/togetherai.d.mts.map +1 -0
  127. package/dist/providers/togetherai.mjs +39 -0
  128. package/dist/providers/togetherai.mjs.map +1 -0
  129. package/dist/providers/xai.d.mts +1161 -0
  130. package/dist/providers/xai.d.mts.map +1 -0
  131. package/dist/providers/xai.mjs +39 -0
  132. package/dist/providers/xai.mjs.map +1 -0
  133. package/dist/togetherai-BvcxUfPE.mjs +382 -0
  134. package/dist/togetherai-BvcxUfPE.mjs.map +1 -0
  135. package/dist/types-DjdaZckF.d.mts +71 -0
  136. package/dist/types-DjdaZckF.d.mts.map +1 -0
  137. package/dist/xai-fSuAkQJo.mjs +587 -0
  138. package/dist/xai-fSuAkQJo.mjs.map +1 -0
  139. package/docs/catalog/filtering.md +102 -0
  140. package/docs/catalog/overview.md +168 -0
  141. package/docs/catalog/providers.md +73 -0
  142. package/docs/cost/overview.md +125 -0
  143. package/docs/guides/filter-models.md +113 -0
  144. package/docs/guides/setup-resolver.md +106 -0
  145. package/docs/guides/track-costs.md +133 -0
  146. package/docs/overview.md +139 -0
  147. package/docs/provider/configuration.md +100 -0
  148. package/docs/provider/openrouter.md +105 -0
  149. package/docs/provider/overview.md +131 -0
  150. package/docs/troubleshooting.md +100 -0
  151. package/package.json +142 -0
  152. package/providers.json +39 -0
  153. package/scripts/generate-models.ts +392 -0
  154. package/src/catalog/index.test.ts +124 -0
  155. package/src/catalog/index.ts +65 -0
  156. package/src/catalog/providers/alibaba.ts +468 -0
  157. package/src/catalog/providers/amazon-bedrock.ts +941 -0
  158. package/src/catalog/providers/anthropic.ts +270 -0
  159. package/src/catalog/providers/cerebras.ts +61 -0
  160. package/src/catalog/providers/cohere.ts +149 -0
  161. package/src/catalog/providers/deepinfra.ts +325 -0
  162. package/src/catalog/providers/deepseek.ts +39 -0
  163. package/src/catalog/providers/fireworks-ai.ts +160 -0
  164. package/src/catalog/providers/google-vertex.ts +314 -0
  165. package/src/catalog/providers/google.ts +347 -0
  166. package/src/catalog/providers/groq.ts +204 -0
  167. package/src/catalog/providers/huggingface.ts +237 -0
  168. package/src/catalog/providers/inception.ts +61 -0
  169. package/src/catalog/providers/index.ts +59 -0
  170. package/src/catalog/providers/llama.ts +94 -0
  171. package/src/catalog/providers/mistral.ts +303 -0
  172. package/src/catalog/providers/nvidia.ts +820 -0
  173. package/src/catalog/providers/openai.ts +501 -0
  174. package/src/catalog/providers/openrouter.ts +2201 -0
  175. package/src/catalog/providers/perplexity.ts +61 -0
  176. package/src/catalog/providers/togetherai.ts +204 -0
  177. package/src/catalog/providers/xai.ts +292 -0
  178. package/src/catalog/types.ts +86 -0
  179. package/src/cost/calculate.test.ts +157 -0
  180. package/src/cost/calculate.ts +43 -0
  181. package/src/cost/index.ts +2 -0
  182. package/src/cost/types.ts +25 -0
  183. package/src/index.ts +25 -0
  184. package/src/provider/index.ts +9 -0
  185. package/src/provider/openrouter.test.ts +125 -0
  186. package/src/provider/openrouter.ts +110 -0
  187. package/src/provider/resolver.test.ts +138 -0
  188. package/src/provider/resolver.ts +125 -0
  189. package/src/provider/types.ts +39 -0
  190. package/src/providers/alibaba.ts +65 -0
  191. package/src/providers/amazon-bedrock.ts +67 -0
  192. package/src/providers/anthropic.ts +65 -0
  193. package/src/providers/cerebras.ts +65 -0
  194. package/src/providers/cohere.ts +65 -0
  195. package/src/providers/deepinfra.ts +65 -0
  196. package/src/providers/deepseek.ts +65 -0
  197. package/src/providers/fireworks-ai.ts +65 -0
  198. package/src/providers/google-vertex.ts +67 -0
  199. package/src/providers/google.ts +65 -0
  200. package/src/providers/groq.ts +65 -0
  201. package/src/providers/huggingface.ts +67 -0
  202. package/src/providers/inception.ts +65 -0
  203. package/src/providers/llama.ts +65 -0
  204. package/src/providers/mistral.ts +65 -0
  205. package/src/providers/nvidia.ts +65 -0
  206. package/src/providers/openai.ts +65 -0
  207. package/src/providers/openrouter.ts +67 -0
  208. package/src/providers/perplexity.ts +67 -0
  209. package/src/providers/togetherai.ts +65 -0
  210. package/src/providers/xai.ts +65 -0
  211. package/tsconfig.json +25 -0
  212. package/tsdown.config.ts +23 -0
  213. package/vitest.config.ts +29 -0
@@ -0,0 +1,67 @@
1
+ // ──────────────────────────────────────────────────────────────
2
+ // ███████╗██╗ ██╗███╗ ██╗██╗ ██╗ █████╗ ██╗
3
+ // ██╔════╝██║ ██║████╗ ██║██║ ██╔╝██╔══██╗██║
4
+ // █████╗ ██║ ██║██╔██╗ ██║█████╔╝ ███████║██║
5
+ // ██╔══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══██║██║
6
+ // ██║ ╚██████╔╝██║ ╚████║██║ ██╗██║ ██║██║
7
+ // ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝
8
+ //
9
+ // AUTO-GENERATED — DO NOT EDIT
10
+ // Source: https://models.dev
11
+ // Update: pnpm --filter=@funkai/models generate:models
12
+ // ──────────────────────────────────────────────────────────────
13
+
14
+ import type { LiteralUnion } from "type-fest";
15
+
16
+ import { OPENROUTER_MODELS } from "../catalog/providers/openrouter.js";
17
+ import type { ModelDefinition } from "../catalog/types.js";
18
+
19
+ /**
20
+ * Known model identifiers for OpenRouter.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import type { OpenRouterModelId } from '@funkai/models/openrouter'
25
+ *
26
+ * const id: OpenRouterModelId = 'prime-intellect/intellect-3'
27
+ * ```
28
+ */
29
+ export type OpenRouterModelId = (typeof OPENROUTER_MODELS)[number]["id"];
30
+
31
+ /**
32
+ * All OpenRouter models in the catalog.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { openRouterModels } from '@funkai/models/openrouter'
37
+ *
38
+ * for (const m of openRouterModels) {
39
+ * console.log(m.id, m.pricing.input)
40
+ * }
41
+ * ```
42
+ */
43
+ export const openRouterModels = OPENROUTER_MODELS;
44
+
45
+ const MODEL_INDEX = new Map<string, ModelDefinition>(OPENROUTER_MODELS.map((m) => [m.id, m]));
46
+
47
+ /**
48
+ * Look up an OpenRouter model by ID.
49
+ *
50
+ * @param id - The provider-native model identifier.
51
+ * @returns The matching model definition, or `null`.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * import { openRouterModel } from '@funkai/models/openrouter'
56
+ *
57
+ * const m = openRouterModel('prime-intellect/intellect-3')
58
+ * if (m) {
59
+ * console.log(m.pricing.input)
60
+ * }
61
+ * ```
62
+ */
63
+ export function openRouterModel(
64
+ id: LiteralUnion<OpenRouterModelId, string>,
65
+ ): ModelDefinition | null {
66
+ return MODEL_INDEX.get(id) ?? null;
67
+ }
@@ -0,0 +1,67 @@
1
+ // ──────────────────────────────────────────────────────────────
2
+ // ███████╗██╗ ██╗███╗ ██╗██╗ ██╗ █████╗ ██╗
3
+ // ██╔════╝██║ ██║████╗ ██║██║ ██╔╝██╔══██╗██║
4
+ // █████╗ ██║ ██║██╔██╗ ██║█████╔╝ ███████║██║
5
+ // ██╔══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══██║██║
6
+ // ██║ ╚██████╔╝██║ ╚████║██║ ██╗██║ ██║██║
7
+ // ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝
8
+ //
9
+ // AUTO-GENERATED — DO NOT EDIT
10
+ // Source: https://models.dev
11
+ // Update: pnpm --filter=@funkai/models generate:models
12
+ // ──────────────────────────────────────────────────────────────
13
+
14
+ import type { LiteralUnion } from "type-fest";
15
+
16
+ import { PERPLEXITY_MODELS } from "../catalog/providers/perplexity.js";
17
+ import type { ModelDefinition } from "../catalog/types.js";
18
+
19
+ /**
20
+ * Known model identifiers for Perplexity.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import type { PerplexityModelId } from '@funkai/models/perplexity'
25
+ *
26
+ * const id: PerplexityModelId = 'sonar-reasoning-pro'
27
+ * ```
28
+ */
29
+ export type PerplexityModelId = (typeof PERPLEXITY_MODELS)[number]["id"];
30
+
31
+ /**
32
+ * All Perplexity models in the catalog.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { perplexityModels } from '@funkai/models/perplexity'
37
+ *
38
+ * for (const m of perplexityModels) {
39
+ * console.log(m.id, m.pricing.input)
40
+ * }
41
+ * ```
42
+ */
43
+ export const perplexityModels = PERPLEXITY_MODELS;
44
+
45
+ const MODEL_INDEX = new Map<string, ModelDefinition>(PERPLEXITY_MODELS.map((m) => [m.id, m]));
46
+
47
+ /**
48
+ * Look up a Perplexity model by ID.
49
+ *
50
+ * @param id - The provider-native model identifier.
51
+ * @returns The matching model definition, or `null`.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * import { perplexityModel } from '@funkai/models/perplexity'
56
+ *
57
+ * const m = perplexityModel('sonar-reasoning-pro')
58
+ * if (m) {
59
+ * console.log(m.pricing.input)
60
+ * }
61
+ * ```
62
+ */
63
+ export function perplexityModel(
64
+ id: LiteralUnion<PerplexityModelId, string>,
65
+ ): ModelDefinition | null {
66
+ return MODEL_INDEX.get(id) ?? null;
67
+ }
@@ -0,0 +1,65 @@
1
+ // ──────────────────────────────────────────────────────────────
2
+ // ███████╗██╗ ██╗███╗ ██╗██╗ ██╗ █████╗ ██╗
3
+ // ██╔════╝██║ ██║████╗ ██║██║ ██╔╝██╔══██╗██║
4
+ // █████╗ ██║ ██║██╔██╗ ██║█████╔╝ ███████║██║
5
+ // ██╔══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══██║██║
6
+ // ██║ ╚██████╔╝██║ ╚████║██║ ██╗██║ ██║██║
7
+ // ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝
8
+ //
9
+ // AUTO-GENERATED — DO NOT EDIT
10
+ // Source: https://models.dev
11
+ // Update: pnpm --filter=@funkai/models generate:models
12
+ // ──────────────────────────────────────────────────────────────
13
+
14
+ import type { LiteralUnion } from "type-fest";
15
+
16
+ import { TOGETHERAI_MODELS } from "../catalog/providers/togetherai.js";
17
+ import type { ModelDefinition } from "../catalog/types.js";
18
+
19
+ /**
20
+ * Known model identifiers for Together AI.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import type { TogetherModelId } from '@funkai/models/togetherai'
25
+ *
26
+ * const id: TogetherModelId = 'zai-org/GLM-4.6'
27
+ * ```
28
+ */
29
+ export type TogetherModelId = (typeof TOGETHERAI_MODELS)[number]["id"];
30
+
31
+ /**
32
+ * All Together AI models in the catalog.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { togetherModels } from '@funkai/models/togetherai'
37
+ *
38
+ * for (const m of togetherModels) {
39
+ * console.log(m.id, m.pricing.input)
40
+ * }
41
+ * ```
42
+ */
43
+ export const togetherModels = TOGETHERAI_MODELS;
44
+
45
+ const MODEL_INDEX = new Map<string, ModelDefinition>(TOGETHERAI_MODELS.map((m) => [m.id, m]));
46
+
47
+ /**
48
+ * Look up a Together AI model by ID.
49
+ *
50
+ * @param id - The provider-native model identifier.
51
+ * @returns The matching model definition, or `null`.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * import { togetherModel } from '@funkai/models/togetherai'
56
+ *
57
+ * const m = togetherModel('zai-org/GLM-4.6')
58
+ * if (m) {
59
+ * console.log(m.pricing.input)
60
+ * }
61
+ * ```
62
+ */
63
+ export function togetherModel(id: LiteralUnion<TogetherModelId, string>): ModelDefinition | null {
64
+ return MODEL_INDEX.get(id) ?? null;
65
+ }
@@ -0,0 +1,65 @@
1
+ // ──────────────────────────────────────────────────────────────
2
+ // ███████╗██╗ ██╗███╗ ██╗██╗ ██╗ █████╗ ██╗
3
+ // ██╔════╝██║ ██║████╗ ██║██║ ██╔╝██╔══██╗██║
4
+ // █████╗ ██║ ██║██╔██╗ ██║█████╔╝ ███████║██║
5
+ // ██╔══╝ ██║ ██║██║╚██╗██║██╔═██╗ ██╔══██║██║
6
+ // ██║ ╚██████╔╝██║ ╚████║██║ ██╗██║ ██║██║
7
+ // ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝
8
+ //
9
+ // AUTO-GENERATED — DO NOT EDIT
10
+ // Source: https://models.dev
11
+ // Update: pnpm --filter=@funkai/models generate:models
12
+ // ──────────────────────────────────────────────────────────────
13
+
14
+ import type { LiteralUnion } from "type-fest";
15
+
16
+ import { XAI_MODELS } from "../catalog/providers/xai.js";
17
+ import type { ModelDefinition } from "../catalog/types.js";
18
+
19
+ /**
20
+ * Known model identifiers for xAI.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import type { XAIModelId } from '@funkai/models/xai'
25
+ *
26
+ * const id: XAIModelId = 'grok-2-1212'
27
+ * ```
28
+ */
29
+ export type XAIModelId = (typeof XAI_MODELS)[number]["id"];
30
+
31
+ /**
32
+ * All xAI models in the catalog.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { xAIModels } from '@funkai/models/xai'
37
+ *
38
+ * for (const m of xAIModels) {
39
+ * console.log(m.id, m.pricing.input)
40
+ * }
41
+ * ```
42
+ */
43
+ export const xAIModels = XAI_MODELS;
44
+
45
+ const MODEL_INDEX = new Map<string, ModelDefinition>(XAI_MODELS.map((m) => [m.id, m]));
46
+
47
+ /**
48
+ * Look up a xAI model by ID.
49
+ *
50
+ * @param id - The provider-native model identifier.
51
+ * @returns The matching model definition, or `null`.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * import { xAIModel } from '@funkai/models/xai'
56
+ *
57
+ * const m = xAIModel('grok-2-1212')
58
+ * if (m) {
59
+ * console.log(m.pricing.input)
60
+ * }
61
+ * ```
62
+ */
63
+ export function xAIModel(id: LiteralUnion<XAIModelId, string>): ModelDefinition | null {
64
+ return MODEL_INDEX.get(id) ?? null;
65
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "ES2024",
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
7
+ "lib": ["ES2024"],
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "declaration": true,
15
+ "declarationMap": true,
16
+ "sourceMap": true,
17
+ "outDir": "./dist",
18
+ "rootDir": ".",
19
+ "paths": {
20
+ "@/*": ["./src/*"]
21
+ }
22
+ },
23
+ "include": ["src"],
24
+ "exclude": ["node_modules", "dist"]
25
+ }
@@ -0,0 +1,23 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ import { defineConfig } from "tsdown";
5
+
6
+ // Read generated entry points (created by generate-models script)
7
+ const entriesPath = join(import.meta.dirname, ".generated", "entries.json");
8
+ const generatedEntries: string[] = existsSync(entriesPath)
9
+ ? JSON.parse(readFileSync(entriesPath, "utf-8"))
10
+ : [];
11
+
12
+ export default defineConfig([
13
+ {
14
+ entry: ["src/index.ts", ...generatedEntries],
15
+ outDir: "dist",
16
+ format: ["esm"],
17
+ dts: true,
18
+ clean: true,
19
+ unbundle: false,
20
+ platform: "node",
21
+ target: "node22",
22
+ },
23
+ ]);
@@ -0,0 +1,29 @@
1
+ import { resolve } from "node:path";
2
+
3
+ import { defineConfig } from "vitest/config";
4
+
5
+ export default defineConfig({
6
+ test: {
7
+ include: ["src/**/*.test.{ts,tsx}"],
8
+ passWithNoTests: true,
9
+ typecheck: {
10
+ include: ["src/**/*.test-d.{ts,tsx}"],
11
+ },
12
+ coverage: {
13
+ provider: "v8",
14
+ include: ["src/**/*.ts"],
15
+ exclude: [
16
+ "src/**/*.test.ts",
17
+ "src/**/*.test-d.ts",
18
+ "src/**/index.ts",
19
+ "src/catalog/providers/**",
20
+ ],
21
+ reporter: ["text", "lcov"],
22
+ },
23
+ },
24
+ resolve: {
25
+ alias: {
26
+ "@": resolve(__dirname, "./src"),
27
+ },
28
+ },
29
+ });