UNPKG

i18n-llm-translate

Version:

Automatically translates namespace-based JSON translation files across multiple languages from any source language

95 lines (94 loc) 4.24 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createOpenRouterEstimateEngine = createOpenRouterEstimateEngine; function createOpenRouterEstimateEngine(config) { const modelId = toOpenRouterModelId(config.provider, config.model); let inputCostPerToken = 0; let outputCostPerToken = 0; let initialized = false; let fetchError; return { name: `OpenRouter (${modelId})`, initialize() { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; try { const response = yield fetch('https://openrouter.ai/api/v1/models'); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const data = yield response.json(); const model = (_a = data.data) === null || _a === void 0 ? void 0 : _a.find(item => item.id === modelId); if (!model) { throw new Error(`Model "${modelId}" not found`); } inputCostPerToken = Number(((_b = model.pricing) === null || _b === void 0 ? void 0 : _b.prompt) || 0); outputCostPerToken = Number(((_c = model.pricing) === null || _c === void 0 ? void 0 : _c.completion) || 0); initialized = true; fetchError = undefined; return { ok: true, message: `pricing: input ${formatCostPerMillionTokens(inputCostPerToken)}, output ${formatCostPerMillionTokens(outputCostPerToken)}` }; } catch (error) { fetchError = error instanceof Error ? error.message : String(error); inputCostPerToken = 0; outputCostPerToken = 0; initialized = false; return { ok: false, message: `could not fetch pricing: ${fetchError}` }; } }); }, estimatePrice(usage) { if (!('inputTokens' in usage)) { return zeroPrice('OpenRouter pricing requires token usage'); } const inputCost = usage.inputTokens * inputCostPerToken; const outputCost = usage.outputTokens * outputCostPerToken; const totalCost = inputCost + outputCost; return { available: initialized && !fetchError, inputCost, outputCost, totalCost, currency: 'USD', formatted: `$${totalCost.toFixed(6)} (input: $${inputCost.toFixed(6)}, output: $${outputCost.toFixed(6)})`, message: fetchError ? `OpenRouter pricing was not fetched: ${fetchError}` : initialized ? undefined : 'OpenRouter pricing was not initialized' }; } }; } function toOpenRouterModelId(provider, model) { if (model.includes('/')) return model; return `${provider}/${model}`; } function formatCostPerMillionTokens(costPerToken) { return `$${(costPerToken * 1000000).toFixed(4)}/1M tokens`; } function zeroPrice(message) { return { available: false, inputCost: 0, outputCost: 0, totalCost: 0, currency: 'USD', formatted: '? (input: ?, output: ?)', message }; }