UNPKG

ai.libx.js

Version:

Unified API bridge for various AI models (LLMs, image/video generation, TTS, STT) - stateless, edge-compatible

96 lines 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RequestLogger = void 0; exports.getRequestLogger = getRequestLogger; class RequestLogger { constructor(enabled = false) { this.requests = []; this.enabled = enabled; } startRequest(provider, model, metadata) { return { requestId: this.generateId(), provider, model, timestamp: Date.now(), startTime: Date.now(), metadata, }; } logRequest(tracker, success, tokens, error) { if (!this.enabled) return; const latency = Date.now() - tracker.startTime; this.requests.push({ requestId: tracker.requestId, provider: tracker.provider, model: tracker.model, timestamp: tracker.timestamp, metadata: tracker.metadata, latency, success, tokens, error, }); } getStats() { const successful = this.requests.filter((r) => r.success); const failed = this.requests.filter((r) => !r.success); const totalLatency = this.requests.reduce((sum, r) => sum + r.latency, 0); const totalTokens = this.requests.reduce((sum, r) => sum + (r.tokens || 0), 0); const providerBreakdown = {}; for (const request of this.requests) { if (!providerBreakdown[request.provider]) { providerBreakdown[request.provider] = { requests: 0, avgLatency: 0, tokens: 0, errors: 0, }; } const stats = providerBreakdown[request.provider]; stats.requests++; stats.tokens += request.tokens || 0; if (!request.success) stats.errors++; } for (const provider in providerBreakdown) { const providerRequests = this.requests.filter((r) => r.provider === provider); const providerLatency = providerRequests.reduce((sum, r) => sum + r.latency, 0); providerBreakdown[provider].avgLatency = providerRequests.length > 0 ? providerLatency / providerRequests.length : 0; } return { totalRequests: this.requests.length, successfulRequests: successful.length, failedRequests: failed.length, averageLatency: this.requests.length > 0 ? totalLatency / this.requests.length : 0, totalTokensUsed: totalTokens, providerBreakdown, }; } getRequests() { return [...this.requests]; } clear() { this.requests = []; } setEnabled(enabled) { this.enabled = enabled; } generateId() { return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; } } exports.RequestLogger = RequestLogger; let globalLogger = null; function getRequestLogger(enabled = false) { if (!globalLogger) { globalLogger = new RequestLogger(enabled); } else { globalLogger.setEnabled(enabled); } return globalLogger; } //# sourceMappingURL=request-logger.js.map