diff --git a/src/functions/summarize.ts b/src/functions/summarize.ts index 4c501ca8c..6bb2cad61 100644 --- a/src/functions/summarize.ts +++ b/src/functions/summarize.ts @@ -260,7 +260,8 @@ export function registerSummarizeFunction( return { success: false, error: "no_observations" }; } - if (provider.name === "noop") { + const baseProviderName = provider.name.replace(/^resilient\((.+)\)$/, "$1"); + if (baseProviderName === "noop") { logger.info("Summarize skipped — no LLM provider configured", { sessionId, }); diff --git a/test/summarize.test.ts b/test/summarize.test.ts index 4723da878..dda811d60 100644 --- a/test/summarize.test.ts +++ b/test/summarize.test.ts @@ -479,4 +479,27 @@ describe("mem::summarize chunking", () => { expect(result.success).toBe(false); expect(result.error).toBe("parse_failed"); }); + + it("ResilientProvider-wrapped noop provider returns no_provider without calling summarize (#1020)", async () => { + const calls: Array<{ system: string; user: string }> = []; + const wrappedNoop: MemoryProvider = { + name: "resilient(noop)", + compress: async () => "", + summarize: async (system: string, user: string) => { + calls.push({ system, user }); + return ""; + }, + }; + const { handler } = await setupHandler({ + sessionId: "ses_noop", + obsCount: 3, + provider: wrappedNoop, + }); + + const result: any = await handler({ sessionId: "ses_noop" }); + + expect(result.success).toBe(false); + expect(result.error).toBe("no_provider"); + expect(calls).toHaveLength(0); + }); });