46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
import { MODELS } from "./models.generated.js";
|
|
const modelRegistry = new Map();
|
|
// Initialize registry from MODELS on module load
|
|
for (const [provider, models] of Object.entries(MODELS)) {
|
|
const providerModels = new Map();
|
|
for (const [id, model] of Object.entries(models)) {
|
|
providerModels.set(id, model);
|
|
}
|
|
modelRegistry.set(provider, providerModels);
|
|
}
|
|
export function getModel(provider, modelId) {
|
|
const providerModels = modelRegistry.get(provider);
|
|
return providerModels?.get(modelId);
|
|
}
|
|
export function getProviders() {
|
|
return Array.from(modelRegistry.keys());
|
|
}
|
|
export function getModels(provider) {
|
|
const models = modelRegistry.get(provider);
|
|
return models ? Array.from(models.values()) : [];
|
|
}
|
|
export function calculateCost(model, usage) {
|
|
usage.cost.input = (model.cost.input / 1000000) * usage.input;
|
|
usage.cost.output = (model.cost.output / 1000000) * usage.output;
|
|
usage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;
|
|
usage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;
|
|
usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
|
|
return usage.cost;
|
|
}
|
|
/**
|
|
* Check if a model supports xhigh thinking level.
|
|
* Currently only certain OpenAI Codex models support this.
|
|
*/
|
|
export function supportsXhigh(model) {
|
|
return model.id.includes("gpt-5.2");
|
|
}
|
|
/**
|
|
* Check if two models are equal by comparing both their id and provider.
|
|
* Returns false if either model is null or undefined.
|
|
*/
|
|
export function modelsAreEqual(a, b) {
|
|
if (!a || !b)
|
|
return false;
|
|
return a.id === b.id && a.provider === b.provider;
|
|
}
|
|
//# sourceMappingURL=models.js.map
|