UNPKG

manifest

Version:

Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard

141 lines 5.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var PublicStatsController_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.PublicStatsController = void 0; const common_1 = require("@nestjs/common"); const public_decorator_1 = require("../common/decorators/public.decorator"); const cache_constants_1 = require("../common/constants/cache.constants"); const public_stats_service_1 = require("./public-stats.service"); let cachedUsage = null; let usageTimestamp = 0; let usageInflight = null; let cachedFree = null; let freeTimestamp = 0; let freeInflight = null; let cachedProviderTokens = null; let providerTokensTimestamp = 0; let providerTokensInflight = null; let PublicStatsController = PublicStatsController_1 = class PublicStatsController { service; logger = new common_1.Logger(PublicStatsController_1.name); constructor(service) { this.service = service; } async getUsage() { if (cachedUsage && Date.now() - usageTimestamp < cache_constants_1.PUBLIC_STATS_CACHE_TTL_MS) { return cachedUsage; } if (!usageInflight) { usageInflight = this.refreshUsage().finally(() => { usageInflight = null; }); } return usageInflight; } async getFreeModels() { if (cachedFree && Date.now() - freeTimestamp < cache_constants_1.PUBLIC_STATS_CACHE_TTL_MS) { return cachedFree; } if (!freeInflight) { freeInflight = this.refreshFreeModels().finally(() => { freeInflight = null; }); } return freeInflight; } async getProviderTokens() { if (cachedProviderTokens && Date.now() - providerTokensTimestamp < cache_constants_1.PUBLIC_STATS_CACHE_TTL_MS) { return cachedProviderTokens; } if (!providerTokensInflight) { providerTokensInflight = this.refreshProviderTokens().finally(() => { providerTokensInflight = null; }); } return providerTokensInflight; } async refreshUsage() { try { const stats = await this.service.getUsageStats(); cachedUsage = { total_messages: stats.total_messages, top_models: stats.top_models, cached_at: new Date().toISOString(), }; usageTimestamp = Date.now(); } catch (err) { const msg = err instanceof Error ? err.message : String(err); this.logger.error(`Failed to fetch usage stats: ${msg}`); } return (cachedUsage ?? { total_messages: 0, top_models: [], cached_at: new Date().toISOString() }); } async refreshFreeModels() { try { const stats = await this.service.getUsageStats(); const models = this.service.getFreeModels(stats.token_map); cachedFree = { models, total_models: models.length, cached_at: new Date().toISOString(), }; freeTimestamp = Date.now(); } catch (err) { const msg = err instanceof Error ? err.message : String(err); this.logger.error(`Failed to fetch free models: ${msg}`); } return cachedFree ?? { models: [], total_models: 0, cached_at: new Date().toISOString() }; } async refreshProviderTokens() { try { const providers = await this.service.getProviderDailyTokens(); cachedProviderTokens = { providers, cached_at: new Date().toISOString(), }; providerTokensTimestamp = Date.now(); } catch (err) { const msg = err instanceof Error ? err.message : String(err); this.logger.error(`Failed to fetch provider tokens: ${msg}`); } return cachedProviderTokens ?? { providers: [], cached_at: new Date().toISOString() }; } }; exports.PublicStatsController = PublicStatsController; __decorate([ (0, public_decorator_1.Public)(), (0, common_1.Get)('usage'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Promise) ], PublicStatsController.prototype, "getUsage", null); __decorate([ (0, public_decorator_1.Public)(), (0, common_1.Get)('free-models'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Promise) ], PublicStatsController.prototype, "getFreeModels", null); __decorate([ (0, public_decorator_1.Public)(), (0, common_1.Get)('provider-tokens'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Promise) ], PublicStatsController.prototype, "getProviderTokens", null); exports.PublicStatsController = PublicStatsController = PublicStatsController_1 = __decorate([ (0, common_1.Controller)('api/v1/public'), __metadata("design:paramtypes", [public_stats_service_1.PublicStatsService]) ], PublicStatsController); //# sourceMappingURL=public-stats.controller.js.map