UNPKG

manifest

Version:

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

121 lines 5.17 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProxyMessageDedup = exports.SUCCESS_END_TIME_GRACE_MS = exports.SUCCESS_SESSION_DEDUP_WINDOW_MS = void 0; const common_1 = require("@nestjs/common"); const agent_message_entity_1 = require("../../entities/agent-message.entity"); exports.SUCCESS_SESSION_DEDUP_WINDOW_MS = 30_000; exports.SUCCESS_END_TIME_GRACE_MS = 5_000; let ProxyMessageDedup = class ProxyMessageDedup { successWriteLocks = new Map(); async findExistingSuccessMessage(messageRepo, ctx, model, usage, traceId, sessionKey) { if (traceId) { const existing = await messageRepo.findOne({ where: { tenant_id: ctx.tenantId, agent_id: ctx.agentId, trace_id: traceId, status: 'ok', }, select: [ 'id', 'timestamp', 'input_tokens', 'output_tokens', 'cache_read_tokens', 'cache_creation_tokens', 'duration_ms', ], order: { timestamp: 'DESC' }, }); if (existing) return existing; } const now = Date.now(); const recentByModel = await messageRepo.find({ where: { tenant_id: ctx.tenantId, agent_id: ctx.agentId, user_id: ctx.userId, model, status: 'ok', ...(sessionKey ? { session_key: sessionKey } : {}), }, select: [ 'id', 'timestamp', 'input_tokens', 'output_tokens', 'cache_read_tokens', 'cache_creation_tokens', 'duration_ms', ], order: { timestamp: 'DESC' }, take: 10, }); return (recentByModel.find((row) => { const rowTime = new Date(row.timestamp).getTime(); const durationMs = row.duration_ms ?? null; if (Number.isNaN(rowTime) || durationMs == null || now - rowTime > exports.SUCCESS_SESSION_DEDUP_WINDOW_MS) { return false; } const totalPromptTokens = (row.input_tokens ?? 0) + (row.cache_read_tokens ?? 0) + (row.cache_creation_tokens ?? 0); const endTimeDelta = Math.abs(now - rowTime - durationMs); return (totalPromptTokens === usage.prompt_tokens && (row.output_tokens ?? 0) === usage.completion_tokens && endTimeDelta <= exports.SUCCESS_END_TIME_GRACE_MS); }) ?? null); } normalizeSessionKey(sessionKey) { if (!sessionKey || sessionKey === 'default') return null; return sessionKey; } getSuccessWriteLockKey(ctx, model, traceId, sessionKey) { if (traceId) return `trace:${ctx.tenantId}:${ctx.agentId}:${traceId}`; return `success:${ctx.tenantId}:${ctx.agentId}:${ctx.userId}:${sessionKey ?? 'no-session'}:${model}`; } async withSuccessWriteLock(key, fn) { const previous = this.successWriteLocks.get(key) ?? Promise.resolve(); let release; const current = new Promise((resolve) => { release = resolve; }); const queued = previous.catch(() => undefined).then(() => current); this.successWriteLocks.set(key, queued); await previous.catch(() => undefined); try { return await fn(); } finally { release(); if (this.successWriteLocks.get(key) === queued) { this.successWriteLocks.delete(key); } } } async withAgentMessageTransaction(messageRepo, ctx, fn) { return messageRepo.manager.transaction(async (manager) => { await this.lockAgentMessageWrites(manager, ctx.agentId); return fn(manager.getRepository(agent_message_entity_1.AgentMessage)); }); } async lockAgentMessageWrites(manager, agentId) { if (manager.connection.options.type !== 'postgres') return; await manager.query('SELECT id FROM agents WHERE id = $1 FOR UPDATE', [agentId]); } }; exports.ProxyMessageDedup = ProxyMessageDedup; exports.ProxyMessageDedup = ProxyMessageDedup = __decorate([ (0, common_1.Injectable)() ], ProxyMessageDedup); //# sourceMappingURL=proxy-message-dedup.js.map