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
JavaScript
;
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