diff --git a/apps/open-swe/src/utils/logger.ts b/apps/open-swe/src/utils/logger.ts index b52836ef..25a2a6a3 100644 --- a/apps/open-swe/src/utils/logger.ts +++ b/apps/open-swe/src/utils/logger.ts @@ -1,4 +1,5 @@ /* eslint-disable no-console */ +import { getConfig } from "@langchain/langgraph"; export enum LogLevel { DEBUG = "debug", @@ -41,6 +42,35 @@ function simpleHash(str: string): number { return Math.abs(hash); // Ensure positive for modulo index } +// Helper function to safely extract thread_id and run_id from LangGraph config +function getThreadAndRunIds(): { thread_id?: string; run_id?: string } { + try { + const config = getConfig(); + return { + thread_id: config.configurable?.thread_id, + run_id: config.configurable?.run_id, + }; + } catch { + // If getConfig throws an error or config.configurable is undefined, + // return empty object and proceed as normal + return {}; + } +} + +function logWithOptionalIds(styledPrefix: string, message: string, data?: any) { + const ids = getThreadAndRunIds(); + if (Object.keys(ids).length > 0) { + const logData = data !== undefined ? { ...data, ...ids } : ids; + console.log(`${styledPrefix} ${message}`, logData); + } else { + if (data !== undefined) { + console.log(`${styledPrefix} ${message}`, data); + } else { + console.log(`${styledPrefix} ${message}`); + } + } +} + export function createLogger(level: LogLevel, prefix: string) { const hash = simpleHash(prefix); const color = COLORS[hash % COLORS.length]; @@ -49,20 +79,12 @@ export function createLogger(level: LogLevel, prefix: string) { return { debug: (message: string, data?: any) => { if (level === LogLevel.DEBUG) { - if (data !== undefined) { - console.log(`${styledPrefix} ${message}`, data); - } else { - console.log(`${styledPrefix} ${message}`); - } + logWithOptionalIds(styledPrefix, message, data); } }, info: (message: string, data?: any) => { if (level === LogLevel.INFO || level === LogLevel.DEBUG) { - if (data !== undefined) { - console.log(`${styledPrefix} ${message}`, data); - } else { - console.log(`${styledPrefix} ${message}`); - } + logWithOptionalIds(styledPrefix, message, data); } }, warn: (message: string, data?: any) => { @@ -71,11 +93,7 @@ export function createLogger(level: LogLevel, prefix: string) { level === LogLevel.INFO || level === LogLevel.DEBUG ) { - if (data !== undefined) { - console.log(`${styledPrefix} ${message}`, data); - } else { - console.log(`${styledPrefix} ${message}`); - } + logWithOptionalIds(styledPrefix, message, data); } }, error: (message: string, data?: any) => { @@ -85,11 +103,7 @@ export function createLogger(level: LogLevel, prefix: string) { level === LogLevel.INFO || level === LogLevel.DEBUG ) { - if (data !== undefined) { - console.log(`${styledPrefix} ${message}`, data); - } else { - console.log(`${styledPrefix} ${message}`); - } + logWithOptionalIds(styledPrefix, message, data); } }, };