Files
tg-chat-bot/src/logging/ai-logger.ts
T
2026-05-13 13:36:51 +03:00

70 lines
2.1 KiB
TypeScript

import {Message} from "typescript-telegram-bot-api";
import {createLogger, formatDuration, LogDetails, LogLevel} from "./logger";
export type AiRunnerLogLevel = LogLevel;
export type AiRunnerLogDetails = LogDetails;
export type AiLogToolCallLike = {
id: string;
name: string;
argumentsText: string;
};
const aiRunnerLogger = createLogger("unified-ai-runner", {
envPrefix: "AI",
defaultLevel: "debug",
enabledEnvNames: ["AI_RUNNER_LOGS", "AI_LOG_ENABLED"],
colorsEnvNames: ["AI_RUNNER_LOG_COLORS", "AI_LOG_COLORS"],
});
function safeJsonParseObject(value?: string): Record<string, unknown> {
if (!value?.trim()) return {};
try {
const parsed: unknown = JSON.parse(value);
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
? parsed as Record<string, unknown>
: {};
} catch {
return {};
}
}
export function aiLog(level: AiRunnerLogLevel, event: string, details?: AiRunnerLogDetails): void {
aiRunnerLogger[level](event, details);
}
export function aiLogDuration(startedAt: number): string {
return formatDuration(startedAt);
}
export function aiLogToolCall(toolCall: AiLogToolCallLike): Record<string, unknown> {
return {
id: toolCall.id,
name: toolCall.name,
arguments: safeJsonParseObject(toolCall.argumentsText),
};
}
export function aiLogMessageIdentity(msg: Message | undefined): Record<string, unknown> | undefined {
if (!msg) return undefined;
return {
chatId: msg.chat?.id,
chatType: msg.chat?.type,
messageId: msg.message_id,
fromId: msg.from?.id,
username: msg.from?.username,
};
}
export function aiLogProviderTarget(target: {provider: string; purpose?: string; model?: string; baseUrl?: string; apiKey?: string} | undefined): Record<string, unknown> | undefined {
if (!target) return undefined;
return {
provider: target.provider,
purpose: target.purpose,
model: target.model,
baseUrl: target.baseUrl,
apiKey: target.apiKey,
};
}