diff --git a/src/hooks/bundled/session-memory/handler.ts b/src/hooks/bundled/session-memory/handler.ts index 32fc36b23f0..992334d65ae 100644 --- a/src/hooks/bundled/session-memory/handler.ts +++ b/src/hooks/bundled/session-memory/handler.ts @@ -276,6 +276,10 @@ const saveSessionToMemory: HookHandler = async (event) => { typeof hookConfig?.messages === "number" && hookConfig.messages > 0 ? hookConfig.messages : 15; + const slugTimeoutMs = + typeof hookConfig?.slugTimeoutMs === "number" && hookConfig.slugTimeoutMs > 0 + ? hookConfig.slugTimeoutMs + : undefined; let slug: string | null = null; let sessionContent: string | null = null; @@ -299,7 +303,7 @@ const saveSessionToMemory: HookHandler = async (event) => { if (sessionContent && cfg && allowLlmSlug) { log.debug("Calling generateSlugViaLLM..."); // Use LLM to generate a descriptive slug - slug = await generateSlugViaLLM({ sessionContent, cfg }); + slug = await generateSlugViaLLM({ sessionContent, cfg, timeoutMs: slugTimeoutMs }); log.debug("Generated slug", { slug }); } } diff --git a/src/hooks/llm-slug-generator.ts b/src/hooks/llm-slug-generator.ts index eb355fc3289..8ae642dcce7 100644 --- a/src/hooks/llm-slug-generator.ts +++ b/src/hooks/llm-slug-generator.ts @@ -25,6 +25,7 @@ const log = createSubsystemLogger("llm-slug-generator"); export async function generateSlugViaLLM(params: { sessionContent: string; cfg: OpenClawConfig; + timeoutMs?: number; }): Promise { let tempSessionFile: string | null = null; @@ -61,7 +62,7 @@ Reply with ONLY the slug, nothing else. Examples: "vendor-pitch", "api-design", prompt, provider, model, - timeoutMs: 15_000, // 15 second timeout + timeoutMs: params.timeoutMs ?? 15_000, runId: `slug-gen-${Date.now()}`, });