osr-mono/packages/osr-code-bot/models/openrouter.js
2025-01-30 00:50:58 +01:00

117 lines
8.1 KiB
JavaScript

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchOpenRouterModels = exports.readFromCache = exports.CACHE_PATH = void 0;
exports.findFreeModels = findFreeModels;
exports.findFreePromptModels = findFreePromptModels;
exports.findFreeCompletionModels = findFreeCompletionModels;
exports.findFreeImageModels = findFreeImageModels;
exports.listModelsAsStrings = listModelsAsStrings;
const axios_1 = __importDefault(require("axios"));
const path = __importStar(require("path"));
const index_1 = require("../index");
const exists_1 = require("@plastichub/fs/exists");
const read_1 = require("@plastichub/fs/read");
const write_1 = require("@plastichub/fs/write");
exports.CACHE_PATH = path.resolve(path.join(path.parse(__filename).dir), 'data', 'openrouter_models.json');
const CACHE_DURATION = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
const readFromCache = (cachePath = exports.CACHE_PATH) => {
try {
if (!(0, exists_1.sync)(cachePath)) {
return null;
}
const cacheData = (0, read_1.sync)(cachePath, 'json');
const now = Date.now();
if (now - cacheData.timestamp > CACHE_DURATION) {
//return null
}
return cacheData.models;
}
catch (error) {
index_1.logger.error('Error reading from cache:', error);
return null;
}
};
exports.readFromCache = readFromCache;
function writeToCache(models, cachePath = exports.CACHE_PATH) {
const cacheData = {
timestamp: Date.now(),
models
};
(0, write_1.sync)(cachePath, cacheData);
}
const fetchOpenRouterModels = async (cachePath = exports.CACHE_PATH) => {
try {
// If no cache or expired, fetch from API
const response = await axios_1.default.get('https://openrouter.ai/api/v1/models', {
params: {
// supported_parameters: 'tools'
}
});
writeToCache(response.data.data);
index_1.logger.debug(`Fetched ${response.data.data.length} OpenRouter models to ${cachePath}`);
return response.data.data;
}
catch (error) {
index_1.logger.error('Error fetching OpenRouter models:', error);
throw error;
}
};
exports.fetchOpenRouterModels = fetchOpenRouterModels;
function findFreeModels(models) {
return models.filter((model) => model.pricing.prompt === 0 &&
model.pricing.completion === 0 &&
model.pricing.image === 0);
}
function findFreePromptModels(models) {
return models.filter((model) => model.pricing.prompt === 0);
}
function findFreeCompletionModels(models) {
return models.filter((model) => model.pricing.completion === 0);
}
function findFreeImageModels(models) {
return models.filter((model) => model.pricing.image === 0);
}
function listModelsAsStrings(models) {
models = models.sort((a, b) => a.name.localeCompare(b.name));
return models.map((model) => {
const isFree = model.name.includes('free');
return `${model.id} | ${isFree ? 'free' : 'paid'}`;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2RlbHMvb3BlbnJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtRkEsd0NBT0M7QUFDRCxvREFFQztBQUVELDREQUVDO0FBRUQsa0RBRUM7QUFDRCxrREFNQztBQTVHRCxrREFBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG9DQUFpQztBQUVqQyxrREFBc0Q7QUFDdEQsOENBQWtEO0FBQ2xELGdEQUFvRDtBQTZCdkMsUUFBQSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUE7QUFFL0csTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsMkJBQTJCO0FBRWhFLE1BQU0sYUFBYSxHQUFHLENBQUMsWUFBb0Isa0JBQVUsRUFBcUMsRUFBRTtJQUNqRyxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBQSxhQUFNLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFpQixDQUFDO1FBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQy9DLGFBQWE7UUFDZixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsTUFBYSxDQUFDO0lBQ2pDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FB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