@llmgateway/models 1.1.0 → 1.1.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.
- package/dist/get-cheapest-from-available-providers.d.ts +30 -0
- package/dist/get-cheapest-from-available-providers.js +183 -0
- package/dist/get-cheapest-from-available-providers.js.map +1 -0
- package/dist/get-cheapest-model-for-provider.d.ts +2 -0
- package/dist/get-cheapest-model-for-provider.js +49 -0
- package/dist/get-cheapest-model-for-provider.js.map +1 -0
- package/dist/get-provider-endpoint.d.ts +3 -0
- package/dist/get-provider-endpoint.js +243 -0
- package/dist/get-provider-endpoint.js.map +1 -0
- package/dist/get-provider-headers.d.ts +5 -0
- package/dist/get-provider-headers.js +45 -0
- package/dist/get-provider-headers.js.map +1 -0
- package/dist/models.spec.d.ts +1 -0
- package/dist/models.spec.js +263 -0
- package/dist/models.spec.js.map +1 -0
- package/dist/prepare-request-body.d.ts +10 -0
- package/dist/prepare-request-body.js +1081 -0
- package/dist/prepare-request-body.js.map +1 -0
- package/dist/prepare-request-body.spec.d.ts +1 -0
- package/dist/prepare-request-body.spec.js +231 -0
- package/dist/prepare-request-body.spec.js.map +1 -0
- package/dist/process-image-url.d.ts +4 -0
- package/dist/process-image-url.js +121 -0
- package/dist/process-image-url.js.map +1 -0
- package/dist/transform-anthropic-messages.d.ts +2 -0
- package/dist/transform-anthropic-messages.js +185 -0
- package/dist/transform-anthropic-messages.js.map +1 -0
- package/dist/transform-google-messages.d.ts +25 -0
- package/dist/transform-google-messages.js +122 -0
- package/dist/transform-google-messages.js.map +1 -0
- package/dist/validate-provider-key.d.ts +4 -0
- package/dist/validate-provider-key.js +113 -0
- package/dist/validate-provider-key.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { getCheapestFromAvailableProviders } from "./get-cheapest-from-available-providers.js";
|
|
3
|
+
import { getCheapestModelForProvider } from "./get-cheapest-model-for-provider.js";
|
|
4
|
+
import { models } from "./models.js";
|
|
5
|
+
import { prepareRequestBody } from "./prepare-request-body.js";
|
|
6
|
+
import { getProviderDefinition } from "./providers.js";
|
|
7
|
+
describe("Models", () => {
|
|
8
|
+
it("should not have duplicate model IDs", () => {
|
|
9
|
+
const modelIds = models.map((model) => model.id);
|
|
10
|
+
const uniqueModelIds = new Set(modelIds);
|
|
11
|
+
expect(uniqueModelIds.size).toBe(modelIds.length);
|
|
12
|
+
if (uniqueModelIds.size !== modelIds.length) {
|
|
13
|
+
const duplicates = modelIds.filter((id, index) => modelIds.indexOf(id) !== index);
|
|
14
|
+
throw new Error(`Duplicate model IDs found: ${duplicates.join(", ")}`);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
it("should include o1-mini model", () => {
|
|
18
|
+
const o1MiniModel = models.find((model) => model.id === "o1-mini");
|
|
19
|
+
expect(o1MiniModel).toBeDefined();
|
|
20
|
+
expect(o1MiniModel?.supportsSystemRole).toBe(false);
|
|
21
|
+
expect(o1MiniModel?.family).toBe("openai");
|
|
22
|
+
});
|
|
23
|
+
it("should have free: true when provider mapping has zero pricing", () => {
|
|
24
|
+
const modelsWithZeroPricing = models.filter((model) => model.providers.some((provider) => (provider.inputPrice === 0 || provider.outputPrice === 0) &&
|
|
25
|
+
!provider.requestPrice));
|
|
26
|
+
const modelsWithoutFreeFlag = modelsWithZeroPricing.filter((model) => model.free !== true);
|
|
27
|
+
if (modelsWithoutFreeFlag.length > 0) {
|
|
28
|
+
const errorDetails = modelsWithoutFreeFlag.map((model) => {
|
|
29
|
+
const zeroPricedProviders = model.providers.filter((p) => (p.inputPrice === 0 || p.outputPrice === 0) &&
|
|
30
|
+
!p.requestPrice);
|
|
31
|
+
return `${model.id}: providers ${zeroPricedProviders.map((p) => `${p.providerId}/${p.modelName} (input: ${p.inputPrice}, output: ${p.outputPrice})`).join(", ")}`;
|
|
32
|
+
});
|
|
33
|
+
throw new Error(`Models with zero pricing must have free: true:\n${errorDetails.join("\n")}`);
|
|
34
|
+
}
|
|
35
|
+
expect(modelsWithoutFreeFlag.length).toBe(0);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("System Role Handling", () => {
|
|
39
|
+
it("should transform system messages to user messages for o1-mini", async () => {
|
|
40
|
+
const messages = [
|
|
41
|
+
{ role: "system", content: "You are a helpful assistant." },
|
|
42
|
+
{ role: "user", content: "Hello" },
|
|
43
|
+
];
|
|
44
|
+
const requestBody = await prepareRequestBody("openai", "o1-mini", messages, false, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true, false);
|
|
45
|
+
const openAIBody = requestBody;
|
|
46
|
+
expect(openAIBody.messages).toHaveLength(2);
|
|
47
|
+
expect(openAIBody.messages[0].role).toBe("user");
|
|
48
|
+
expect(openAIBody.messages[0].content).toBe("You are a helpful assistant.");
|
|
49
|
+
expect(openAIBody.messages[1].role).toBe("user");
|
|
50
|
+
expect(openAIBody.messages[1].content).toBe("Hello");
|
|
51
|
+
});
|
|
52
|
+
it("should preserve system messages for models that support them", async () => {
|
|
53
|
+
const messages = [
|
|
54
|
+
{ role: "system", content: "You are a helpful assistant." },
|
|
55
|
+
{ role: "user", content: "Hello" },
|
|
56
|
+
];
|
|
57
|
+
const requestBody = await prepareRequestBody("openai", "gpt-4o-mini", messages, false, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
58
|
+
const openAIBody2 = requestBody;
|
|
59
|
+
expect(openAIBody2.messages).toHaveLength(2);
|
|
60
|
+
expect(openAIBody2.messages[0].role).toBe("system");
|
|
61
|
+
expect(openAIBody2.messages[0].content).toBe("You are a helpful assistant.");
|
|
62
|
+
expect(openAIBody2.messages[1].role).toBe("user");
|
|
63
|
+
expect(openAIBody2.messages[1].content).toBe("Hello");
|
|
64
|
+
});
|
|
65
|
+
it("should handle array content in system messages", async () => {
|
|
66
|
+
const messages = [
|
|
67
|
+
{
|
|
68
|
+
role: "system",
|
|
69
|
+
content: [
|
|
70
|
+
{ type: "text", text: "You are a helpful" },
|
|
71
|
+
{ type: "text", text: "assistant." },
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
{ role: "user", content: "Hello" },
|
|
75
|
+
];
|
|
76
|
+
const requestBody = await prepareRequestBody("openai", "o1-mini", messages, false, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true, false);
|
|
77
|
+
const openAIBody3 = requestBody;
|
|
78
|
+
expect(openAIBody3.messages).toHaveLength(2);
|
|
79
|
+
expect(openAIBody3.messages[0].role).toBe("user");
|
|
80
|
+
expect(openAIBody3.messages[0].content).toEqual([
|
|
81
|
+
{ type: "text", text: "You are a helpful" },
|
|
82
|
+
{ type: "text", text: "assistant." },
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe("prepareRequestBody", () => {
|
|
87
|
+
const messages = [{ role: "user", content: "Hello" }];
|
|
88
|
+
describe("OpenAI provider", () => {
|
|
89
|
+
it("should override temperature to 1 for gpt-5 models", async () => {
|
|
90
|
+
const body = await prepareRequestBody("openai", "gpt-5", messages, false, 0.7, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
91
|
+
expect(body.temperature).toBe(1);
|
|
92
|
+
});
|
|
93
|
+
it("should override temperature to 1 for gpt-5-mini models", async () => {
|
|
94
|
+
const body = await prepareRequestBody("openai", "gpt-5-mini", messages, false, 0.3, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
95
|
+
expect(body.temperature).toBe(1);
|
|
96
|
+
});
|
|
97
|
+
it("should override temperature to 1 for gpt-5-nano models", async () => {
|
|
98
|
+
const body = await prepareRequestBody("openai", "gpt-5-nano", messages, false, 0.9, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
99
|
+
expect(body.temperature).toBe(1);
|
|
100
|
+
});
|
|
101
|
+
it("should override temperature to 1 for gpt-5-chat-latest models", async () => {
|
|
102
|
+
const body = await prepareRequestBody("openai", "gpt-5-chat-latest", messages, false, 0.5, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
103
|
+
expect(body.temperature).toBe(1);
|
|
104
|
+
});
|
|
105
|
+
it("should not override temperature for non-gpt-5 models", async () => {
|
|
106
|
+
const body = await prepareRequestBody("openai", "gpt-4o-mini", messages, false, 0.7, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, false, false);
|
|
107
|
+
expect(body.temperature).toBe(0.7);
|
|
108
|
+
});
|
|
109
|
+
it("should override temperature to 1 for gpt-5 models with reasoning enabled", async () => {
|
|
110
|
+
const body = await prepareRequestBody("openai", "gpt-5", messages, false, 0.8, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "medium", true, false);
|
|
111
|
+
expect(body.temperature).toBe(1);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("getCheapestModelForProvider", () => {
|
|
116
|
+
it("should return cheapest model for openai provider", () => {
|
|
117
|
+
const cheapestModel = getCheapestModelForProvider("openai");
|
|
118
|
+
expect(cheapestModel).toBeDefined();
|
|
119
|
+
expect(typeof cheapestModel).toBe("string");
|
|
120
|
+
});
|
|
121
|
+
it("should return cheapest model for anthropic provider", () => {
|
|
122
|
+
const cheapestModel = getCheapestModelForProvider("anthropic");
|
|
123
|
+
expect(cheapestModel).toBeDefined();
|
|
124
|
+
expect(typeof cheapestModel).toBe("string");
|
|
125
|
+
});
|
|
126
|
+
it("should return null for non-existent provider", () => {
|
|
127
|
+
const cheapestModel = getCheapestModelForProvider("non-existent");
|
|
128
|
+
expect(cheapestModel).toBe(null);
|
|
129
|
+
});
|
|
130
|
+
it("should only consider models with pricing information", () => {
|
|
131
|
+
const cheapestModel = getCheapestModelForProvider("openai");
|
|
132
|
+
expect(cheapestModel).toBeDefined();
|
|
133
|
+
if (cheapestModel) {
|
|
134
|
+
const modelWithProvider = models.find((model) => model.providers.some((p) => p.providerId === "openai" &&
|
|
135
|
+
p.modelName === cheapestModel &&
|
|
136
|
+
p.inputPrice !== undefined &&
|
|
137
|
+
p.outputPrice !== undefined));
|
|
138
|
+
expect(modelWithProvider).toBeDefined();
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
it("should exclude deprecated models", () => {
|
|
142
|
+
const cheapestModel = getCheapestModelForProvider("openai");
|
|
143
|
+
if (cheapestModel) {
|
|
144
|
+
const modelWithProvider = models.find((model) => model.providers.some((p) => p.providerId === "openai" && p.modelName === cheapestModel));
|
|
145
|
+
if (modelWithProvider) {
|
|
146
|
+
const providerMapping = modelWithProvider.providers.find((p) => p.providerId === "openai" && p.modelName === cheapestModel);
|
|
147
|
+
if (providerMapping?.deprecatedAt) {
|
|
148
|
+
expect(new Date() <= providerMapping.deprecatedAt).toBe(true);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
it("should account for discount when calculating cheapest model", () => {
|
|
154
|
+
const modelsWithDiscountProviders = models.filter((model) => model.providers.some((p) => p.discount !== undefined &&
|
|
155
|
+
p.discount < 1));
|
|
156
|
+
if (modelsWithDiscountProviders.length > 0) {
|
|
157
|
+
const testModel = modelsWithDiscountProviders.find((model) => {
|
|
158
|
+
const regularProvider = model.providers.find((p) => !p.discount ||
|
|
159
|
+
p.discount === 1);
|
|
160
|
+
const discountProvider = model.providers.find((p) => p.discount &&
|
|
161
|
+
p.discount < 1);
|
|
162
|
+
return regularProvider && discountProvider;
|
|
163
|
+
});
|
|
164
|
+
if (testModel) {
|
|
165
|
+
const regularProvider = testModel.providers.find((p) => !p.discount ||
|
|
166
|
+
p.discount === 1);
|
|
167
|
+
const discountProvider = testModel.providers.find((p) => p.discount &&
|
|
168
|
+
p.discount < 1);
|
|
169
|
+
if (regularProvider &&
|
|
170
|
+
discountProvider &&
|
|
171
|
+
regularProvider.inputPrice &&
|
|
172
|
+
discountProvider.inputPrice) {
|
|
173
|
+
const regularPrice = (regularProvider.inputPrice + (regularProvider.outputPrice || 0)) /
|
|
174
|
+
2;
|
|
175
|
+
const discountPrice = ((discountProvider.inputPrice +
|
|
176
|
+
(discountProvider.outputPrice || 0)) /
|
|
177
|
+
2) *
|
|
178
|
+
discountProvider.discount;
|
|
179
|
+
expect(discountPrice).toBeLessThan(regularPrice);
|
|
180
|
+
const cheapestForDiscountProvider = getCheapestModelForProvider(discountProvider.providerId);
|
|
181
|
+
const cheapestForRegularProvider = getCheapestModelForProvider(regularProvider.providerId);
|
|
182
|
+
expect(cheapestForDiscountProvider).toBeDefined();
|
|
183
|
+
expect(cheapestForRegularProvider).toBeDefined();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe("getCheapestFromAvailableProviders", () => {
|
|
190
|
+
it("should return cheapest provider from available providers", () => {
|
|
191
|
+
const modelWithMultipleProviders = models.find((model) => model.providers.length > 1 &&
|
|
192
|
+
model.providers.some((p) => p.inputPrice !== undefined && p.outputPrice !== undefined));
|
|
193
|
+
if (modelWithMultipleProviders) {
|
|
194
|
+
const availableProviders = modelWithMultipleProviders.providers.filter((p) => p.inputPrice !== undefined && p.outputPrice !== undefined);
|
|
195
|
+
if (availableProviders.length > 1) {
|
|
196
|
+
const cheapestProvider = getCheapestFromAvailableProviders(availableProviders, modelWithMultipleProviders);
|
|
197
|
+
expect(cheapestProvider).toBeDefined();
|
|
198
|
+
expect(cheapestProvider?.provider).toMatchObject({
|
|
199
|
+
providerId: expect.any(String),
|
|
200
|
+
modelName: expect.any(String),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
it("should account for discounts when selecting cheapest provider", () => {
|
|
206
|
+
const modelWithDiscountProvider = models.find((model) => {
|
|
207
|
+
const hasRegularProvider = model.providers.some((p) => (!p.discount ||
|
|
208
|
+
p.discount === 1) &&
|
|
209
|
+
p.inputPrice !== undefined &&
|
|
210
|
+
p.outputPrice !== undefined);
|
|
211
|
+
const hasDiscountProvider = model.providers.some((p) => p.discount !== undefined &&
|
|
212
|
+
p.discount < 1 &&
|
|
213
|
+
p.inputPrice !== undefined &&
|
|
214
|
+
p.outputPrice !== undefined);
|
|
215
|
+
return hasRegularProvider && hasDiscountProvider;
|
|
216
|
+
});
|
|
217
|
+
if (modelWithDiscountProvider) {
|
|
218
|
+
const regularProvider = modelWithDiscountProvider.providers.find((p) => (!p.discount ||
|
|
219
|
+
p.discount === 1) &&
|
|
220
|
+
p.stability !== "experimental" &&
|
|
221
|
+
p.stability !== "unstable" &&
|
|
222
|
+
p.inputPrice !== undefined &&
|
|
223
|
+
p.outputPrice !== undefined);
|
|
224
|
+
const discountProvider = modelWithDiscountProvider.providers.find((p) => p.discount !== undefined &&
|
|
225
|
+
p.discount < 1 &&
|
|
226
|
+
p.stability !== "experimental" &&
|
|
227
|
+
p.stability !== "unstable" &&
|
|
228
|
+
p.inputPrice !== undefined &&
|
|
229
|
+
p.outputPrice !== undefined);
|
|
230
|
+
if (regularProvider && discountProvider) {
|
|
231
|
+
const availableProviders = [regularProvider, discountProvider];
|
|
232
|
+
const cheapestProvider = getCheapestFromAvailableProviders(availableProviders, modelWithDiscountProvider);
|
|
233
|
+
const regularProviderDef = getProviderDefinition(regularProvider.providerId);
|
|
234
|
+
const discountProviderDef = getProviderDefinition(discountProvider.providerId);
|
|
235
|
+
const regularPriority = regularProviderDef?.priority ?? 1;
|
|
236
|
+
const discountPriority = discountProviderDef?.priority ?? 1;
|
|
237
|
+
const regularBasePrice = (regularProvider.inputPrice + regularProvider.outputPrice) / 2;
|
|
238
|
+
const regularEffectivePrice = regularPriority > 0
|
|
239
|
+
? regularBasePrice / regularPriority
|
|
240
|
+
: regularBasePrice;
|
|
241
|
+
const discount = discountProvider.discount;
|
|
242
|
+
const discountMultiplier = 1 - discount;
|
|
243
|
+
const discountBasePrice = ((discountProvider.inputPrice + discountProvider.outputPrice) / 2) *
|
|
244
|
+
discountMultiplier;
|
|
245
|
+
const discountEffectivePrice = discountPriority > 0
|
|
246
|
+
? discountBasePrice / discountPriority
|
|
247
|
+
: discountBasePrice;
|
|
248
|
+
if (discountEffectivePrice < regularEffectivePrice) {
|
|
249
|
+
expect(cheapestProvider?.provider.providerId).toBe(discountProvider.providerId);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
expect(cheapestProvider?.provider.providerId).toBe(regularProvider.providerId);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
it("should return null for empty provider list", () => {
|
|
258
|
+
const testModel = models[0];
|
|
259
|
+
const result = getCheapestFromAvailableProviders([], testModel);
|
|
260
|
+
expect(result).toBe(null);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
//# sourceMappingURL=models.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.spec.js","sourceRoot":"","sources":["../src/models.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProviderId } from "./providers.js";
|
|
2
|
+
import type { BaseMessage, OpenAIRequestBody, OpenAIToolInput, ProviderRequestBody, ToolChoiceType, WebSearchTool } from "./types.js";
|
|
3
|
+
export declare function prepareRequestBody(usedProvider: ProviderId, usedModel: string, messages: BaseMessage[], stream: boolean, temperature: number | undefined, max_tokens: number | undefined, top_p: number | undefined, frequency_penalty: number | undefined, presence_penalty: number | undefined, response_format: OpenAIRequestBody["response_format"], tools?: OpenAIToolInput[], tool_choice?: ToolChoiceType, reasoning_effort?: "minimal" | "low" | "medium" | "high", supportsReasoning?: boolean, isProd?: boolean, maxImageSizeMB?: number, userPlan?: "free" | "pro" | null, sensitive_word_check?: {
|
|
4
|
+
status: "DISABLE" | "ENABLE";
|
|
5
|
+
}, image_config?: {
|
|
6
|
+
aspect_ratio?: string;
|
|
7
|
+
image_size?: string;
|
|
8
|
+
n?: number;
|
|
9
|
+
seed?: number;
|
|
10
|
+
}, effort?: "low" | "medium" | "high", imageGenerations?: boolean, webSearchTool?: WebSearchTool): Promise<ProviderRequestBody>;
|