@funkai/models 0.2.1 → 0.3.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 (90) hide show
  1. package/.turbo/turbo-build.log +35 -36
  2. package/CHANGELOG.md +18 -0
  3. package/dist/alibaba-B6q4Ng1R.mjs.map +1 -1
  4. package/dist/amazon-bedrock-Cv9AHQBH.mjs.map +1 -1
  5. package/dist/anthropic-yB7ST97_.mjs.map +1 -1
  6. package/dist/cerebras-COfl7XM-.mjs.map +1 -1
  7. package/dist/cohere-B7TgO0hT.mjs.map +1 -1
  8. package/dist/deepinfra-B0GxUwCG.mjs.map +1 -1
  9. package/dist/deepseek-D64ZEsvS.mjs.map +1 -1
  10. package/dist/fireworks-ai-DJYvdAi_.mjs.map +1 -1
  11. package/dist/google-BypRl349.mjs.map +1 -1
  12. package/dist/google-vertex-DbS-zTGD.mjs.map +1 -1
  13. package/dist/groq-ei_PerYi.mjs.map +1 -1
  14. package/dist/huggingface-DaM1EeLP.mjs.map +1 -1
  15. package/dist/inception-CspEzqNV.mjs.map +1 -1
  16. package/dist/index.d.mts +41 -87
  17. package/dist/index.d.mts.map +1 -1
  18. package/dist/index.mjs +20 -115
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/llama-Cf3-koap.mjs.map +1 -1
  21. package/dist/mistral-BI9MdAO4.mjs.map +1 -1
  22. package/dist/nvidia-COHacuoa.mjs.map +1 -1
  23. package/dist/openai-C0nCfZUq.mjs.map +1 -1
  24. package/dist/openrouter-DSFzxKQb.mjs.map +1 -1
  25. package/dist/perplexity-zeZ2WlBU.mjs.map +1 -1
  26. package/dist/providers/alibaba.d.mts +1 -1
  27. package/dist/providers/amazon-bedrock.d.mts +1 -1
  28. package/dist/providers/anthropic.d.mts +1 -1
  29. package/dist/providers/cerebras.d.mts +1 -1
  30. package/dist/providers/cohere.d.mts +1 -1
  31. package/dist/providers/deepinfra.d.mts +1 -1
  32. package/dist/providers/deepseek.d.mts +1 -1
  33. package/dist/providers/fireworks-ai.d.mts +1 -1
  34. package/dist/providers/google-vertex.d.mts +1 -1
  35. package/dist/providers/google.d.mts +1 -1
  36. package/dist/providers/groq.d.mts +1 -1
  37. package/dist/providers/huggingface.d.mts +1 -1
  38. package/dist/providers/inception.d.mts +1 -1
  39. package/dist/providers/llama.d.mts +1 -1
  40. package/dist/providers/mistral.d.mts +1 -1
  41. package/dist/providers/nvidia.d.mts +1 -1
  42. package/dist/providers/openai.d.mts +1 -1
  43. package/dist/providers/openrouter.d.mts +1 -1
  44. package/dist/providers/perplexity.d.mts +1 -1
  45. package/dist/providers/togetherai.d.mts +1 -1
  46. package/dist/providers/xai.d.mts +1 -1
  47. package/dist/togetherai-BvcxUfPE.mjs.map +1 -1
  48. package/dist/{types-DjdaZckF.d.mts → types-DIzolT_s.d.mts} +61 -21
  49. package/dist/types-DIzolT_s.d.mts.map +1 -0
  50. package/dist/xai-fSuAkQJo.mjs.map +1 -1
  51. package/package.json +7 -6
  52. package/scripts/generate-models.ts +152 -83
  53. package/src/catalog/index.test.ts +8 -20
  54. package/src/catalog/index.ts +4 -1
  55. package/src/catalog/providers/alibaba.ts +91 -91
  56. package/src/catalog/providers/amazon-bedrock.ts +205 -185
  57. package/src/catalog/providers/anthropic.ts +87 -62
  58. package/src/catalog/providers/cerebras.ts +9 -9
  59. package/src/catalog/providers/cohere.ts +16 -16
  60. package/src/catalog/providers/deepinfra.ts +71 -71
  61. package/src/catalog/providers/deepseek.ts +3 -3
  62. package/src/catalog/providers/fireworks-ai.ts +36 -36
  63. package/src/catalog/providers/google-vertex.ts +62 -62
  64. package/src/catalog/providers/google.ts +69 -69
  65. package/src/catalog/providers/groq.ts +24 -24
  66. package/src/catalog/providers/huggingface.ts +52 -52
  67. package/src/catalog/providers/inception.ts +9 -9
  68. package/src/catalog/providers/index.ts +1 -0
  69. package/src/catalog/providers/llama.ts +7 -7
  70. package/src/catalog/providers/mistral.ts +60 -60
  71. package/src/catalog/providers/nvidia.ts +84 -84
  72. package/src/catalog/providers/openai.ts +115 -115
  73. package/src/catalog/providers/openrouter.ts +448 -433
  74. package/src/catalog/providers/perplexity.ts +9 -9
  75. package/src/catalog/providers/togetherai.ts +47 -47
  76. package/src/catalog/providers/xai.ts +49 -49
  77. package/src/catalog/types.ts +60 -20
  78. package/src/cost/calculate.test.ts +11 -19
  79. package/src/index.ts +2 -8
  80. package/src/provider/index.ts +2 -8
  81. package/src/provider/registry.test.ts +87 -0
  82. package/src/provider/registry.ts +93 -0
  83. package/src/provider/types.ts +1 -1
  84. package/tsconfig.json +2 -1
  85. package/tsdown.config.ts +7 -4
  86. package/dist/types-DjdaZckF.d.mts.map +0 -1
  87. package/src/provider/openrouter.test.ts +0 -125
  88. package/src/provider/openrouter.ts +0 -110
  89. package/src/provider/resolver.test.ts +0 -138
  90. package/src/provider/resolver.ts +0 -125
@@ -1,125 +0,0 @@
1
- import type { ModelId } from "@/catalog/index.js";
2
- import type { LanguageModel } from "@/provider/types.js";
3
-
4
- /**
5
- * A function that resolves a provider-specific model name to a {@link LanguageModel}.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { createOpenAI } from '@ai-sdk/openai'
10
- *
11
- * const factory: ProviderFactory = createOpenAI({ apiKey: '...' })
12
- * const model = factory('gpt-4.1')
13
- * ```
14
- */
15
- export type ProviderFactory = (modelName: string) => LanguageModel;
16
-
17
- /**
18
- * Mapping from provider prefix (e.g. `"openai"`, `"anthropic"`) to a factory
19
- * that creates {@link LanguageModel} instances for that provider.
20
- */
21
- export type ProviderMap = Readonly<Record<string, ProviderFactory>>;
22
-
23
- /**
24
- * Configuration for {@link createModelResolver}.
25
- */
26
- export interface ModelResolverConfig {
27
- /**
28
- * Direct AI SDK provider mappings by prefix.
29
- *
30
- * When a model ID like `"openai/gpt-4.1"` is resolved, the prefix
31
- * `"openai"` is extracted and looked up in this map. If found, the
32
- * factory receives the model portion (`"gpt-4.1"`).
33
- */
34
- readonly providers?: ProviderMap;
35
-
36
- /**
37
- * A fallback factory used when no mapped provider matches.
38
- *
39
- * Receives the full model ID string. Useful for routing unmapped
40
- * providers through an aggregator like OpenRouter.
41
- *
42
- * @example
43
- * ```typescript
44
- * import { openrouter } from '@funkai/models'
45
- *
46
- * const resolve = createModelResolver({
47
- * providers: { openai: createOpenAI({ apiKey: '...' }) },
48
- * fallback: openrouter,
49
- * })
50
- * ```
51
- */
52
- readonly fallback?: (modelId: string) => LanguageModel;
53
- }
54
-
55
- /**
56
- * A function that resolves a model ID to a {@link LanguageModel} instance.
57
- */
58
- export type ModelResolver = (modelId: ModelId) => LanguageModel;
59
-
60
- /**
61
- * Create a model resolver with configurable provider mappings.
62
- *
63
- * When a model ID like `"openai/gpt-4.1"` is resolved:
64
- * 1. The provider prefix (`"openai"`) is extracted
65
- * 2. If a direct provider is mapped for that prefix, it receives the model portion (`"gpt-4.1"`)
66
- * 3. Otherwise, the fallback is called with the full ID (if configured)
67
- * 4. If no fallback, an error is thrown
68
- *
69
- * @param config - Provider mappings and fallback configuration.
70
- * @returns A resolver function that maps model IDs to {@link LanguageModel} instances.
71
- *
72
- * @example
73
- * ```typescript
74
- * import { createOpenAI } from '@ai-sdk/openai'
75
- * import { createAnthropic } from '@ai-sdk/anthropic'
76
- *
77
- * const resolve = createModelResolver({
78
- * providers: {
79
- * openai: createOpenAI({ apiKey: '...' }),
80
- * anthropic: createAnthropic({ apiKey: '...' }),
81
- * },
82
- * })
83
- *
84
- * const m1 = resolve('openai/gpt-4.1') // uses @ai-sdk/openai directly
85
- * const m2 = resolve('anthropic/claude-sonnet-4') // uses @ai-sdk/anthropic directly
86
- * ```
87
- */
88
- export function createModelResolver(config?: ModelResolverConfig): ModelResolver {
89
- const providers = config?.providers ?? {};
90
- const fallback = config?.fallback;
91
-
92
- return (modelId: ModelId): LanguageModel => {
93
- if (!modelId.trim()) {
94
- throw new Error("Cannot resolve model: model ID is empty");
95
- }
96
-
97
- const slashIndex = modelId.indexOf("/");
98
-
99
- if (slashIndex === -1) {
100
- if (fallback) {
101
- return fallback(modelId);
102
- }
103
- throw new Error(
104
- `Cannot resolve model "${modelId}": no provider prefix and no fallback configured`,
105
- );
106
- }
107
-
108
- const prefix = modelId.slice(0, slashIndex);
109
- // eslint-disable-next-line security/detect-object-injection -- Prefix extracted from user model ID, used as record key lookup
110
- const factory = providers[prefix];
111
-
112
- if (factory) {
113
- const modelName = modelId.slice(slashIndex + 1);
114
- return factory(modelName);
115
- }
116
-
117
- if (fallback) {
118
- return fallback(modelId);
119
- }
120
-
121
- throw new Error(
122
- `Cannot resolve model "${modelId}": no provider mapped for "${prefix}" and no fallback configured`,
123
- );
124
- };
125
- }