UNPKG

taskforce-aiagent

Version:

TaskForce is a modular, open-source, production-ready TypeScript agent framework for orchestrating AI agents, LLM-powered autonomous agents, task pipelines, dynamic toolchains, RAG workflows and memory/retrieval systems.

98 lines (97 loc) 3.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.recordLLMCall = recordLLMCall; exports.exportTelemetry = exportTelemetry; exports.resetTelemetry = resetTelemetry; exports.saveTelemetryToFile = saveTelemetryToFile; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const log_helper_js_1 = require("./log.helper.js"); const TELEMETRY_PATH = path_1.default.join(log_helper_js_1.logDir, "telemetry.json"); const telemetry = {}; function recordLLMCall(agent, tokens, durationMs, modelName) { const current = telemetry[agent] || { callCount: 0, totalTokens: 0, totalTimeMs: 0, lastCall: null, models: [], }; current.models = current.models || []; let modelEntry = current.models.find((m) => m.model === modelName); if (!modelEntry) { modelEntry = { model: modelName, totalTokens: 0, durationMs: 0 }; current.models.push(modelEntry); } modelEntry.totalTokens += tokens; modelEntry.durationMs += durationMs; telemetry[agent] = { callCount: current.callCount + 1, totalTokens: current.totalTokens + tokens, totalTimeMs: current.totalTimeMs + durationMs, lastCall: { timestamp: new Date().toISOString(), model: modelName, totalTokens: tokens, durationMs, }, models: current.models, }; if (process.env.TELEMETRY_MODE !== "none") { saveTelemetryToFile(); } } function exportTelemetry() { return telemetry; } function resetTelemetry() { for (const key in telemetry) delete telemetry[key]; } function saveTelemetryToFile() { if (!fs_1.default.existsSync(log_helper_js_1.logDir)) { fs_1.default.mkdirSync(log_helper_js_1.logDir, { recursive: true }); } let existing = {}; const mode = process.env.TELEMETRY_MODE || "append"; if (mode === "append" && fs_1.default.existsSync(TELEMETRY_PATH)) { try { const raw = fs_1.default.readFileSync(TELEMETRY_PATH, "utf-8"); existing = JSON.parse(raw); } catch (err) { console.warn("⚠️ Failed to read existing telemetry. Overwriting."); } } for (const agent of Object.keys(telemetry)) { const current = telemetry[agent]; const previous = existing[agent]; if (!previous || mode === "overwrite") { existing[agent] = current; continue; } previous.callCount += current.callCount; previous.totalTokens += current.totalTokens; previous.totalTimeMs += current.totalTimeMs; previous.lastCall = current.lastCall; const modelMap = {}; for (const entry of previous.models || []) { modelMap[entry.model] = entry; } for (const entry of current.models || []) { if (modelMap[entry.model]) { modelMap[entry.model].totalTokens += entry.totalTokens; modelMap[entry.model].durationMs += entry.durationMs; } else { modelMap[entry.model] = { ...entry }; } } previous.models = Object.values(modelMap); existing[agent] = previous; } fs_1.default.writeFileSync(TELEMETRY_PATH, JSON.stringify(existing, null, 2), "utf-8"); }