


























@@ -176,6 +176,68 @@ describe("runMemoryFlushIfNeeded", () => {
176176expect(persisted.main.memoryFlushAt).toBe(1_700_000_000_000);
177177});
178178179+it("runs memory flush on the configured maintenance model without active fallbacks", async () => {
180+registerMemoryFlushPlanResolver(() => ({
181+softThresholdTokens: 4_000,
182+forceFlushTranscriptBytes: 1_000_000_000,
183+reserveTokensFloor: 20_000,
184+model: "ollama/qwen3:8b",
185+prompt: "Pre-compaction memory flush.\nNO_REPLY",
186+systemPrompt: "Write memory to memory/YYYY-MM-DD.md.",
187+relativePath: "memory/2023-11-14.md",
188+}));
189+const sessionEntry: SessionEntry = {
190+sessionId: "session",
191+updatedAt: Date.now(),
192+totalTokens: 80_000,
193+compactionCount: 1,
194+};
195+196+await runMemoryFlushIfNeeded({
197+cfg: {
198+agents: {
199+defaults: {
200+model: {
201+primary: "anthropic/claude",
202+fallbacks: ["openai/gpt-5.4"],
203+},
204+compaction: {
205+memoryFlush: {
206+model: "ollama/qwen3:8b",
207+},
208+},
209+},
210+},
211+},
212+followupRun: createTestFollowupRun({ provider: "anthropic", model: "claude" }),
213+sessionCtx: { Provider: "whatsapp" } as unknown as TemplateContext,
214+defaultModel: "anthropic/claude",
215+agentCfgContextTokens: 100_000,
216+resolvedVerboseLevel: "off",
217+ sessionEntry,
218+sessionStore: { main: sessionEntry },
219+sessionKey: "main",
220+isHeartbeat: false,
221+replyOperation: createReplyOperation(),
222+});
223+224+expect(runWithModelFallbackMock).toHaveBeenCalledWith(
225+expect.objectContaining({
226+provider: "ollama",
227+model: "qwen3:8b",
228+fallbacksOverride: [],
229+}),
230+);
231+expect(runEmbeddedPiAgentMock).toHaveBeenCalledWith(
232+expect.objectContaining({
233+provider: "ollama",
234+model: "qwen3:8b",
235+authProfileId: undefined,
236+authProfileIdSource: undefined,
237+}),
238+);
239+});
240+179241it("skips memory flush for CLI providers", async () => {
180242const sessionEntry: SessionEntry = {
181243sessionId: "session",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。