|
|
@@ -513,6 +513,36 @@ it.instance("loop calls LLM and returns assistant message", () =>
|
|
|
}),
|
|
|
)
|
|
|
|
|
|
+it.instance("loop stops provider overflow instead of auto-compacting when disabled", () =>
|
|
|
+ Effect.gen(function* () {
|
|
|
+ const { llm } = yield* useServerConfig((url) => ({
|
|
|
+ ...providerCfg(url),
|
|
|
+ compaction: { auto: false },
|
|
|
+ }))
|
|
|
+ const prompt = yield* SessionPrompt.Service
|
|
|
+ const sessions = yield* Session.Service
|
|
|
+ const chat = yield* sessions.create({ title: "Pinned" })
|
|
|
+
|
|
|
+ yield* llm.error(413, { error: { message: "request entity too large" } })
|
|
|
+ yield* prompt.prompt({
|
|
|
+ sessionID: chat.id,
|
|
|
+ agent: "build",
|
|
|
+ noReply: true,
|
|
|
+ parts: [{ type: "text", text: "hello" }],
|
|
|
+ })
|
|
|
+
|
|
|
+ const result = yield* prompt.loop({ sessionID: chat.id })
|
|
|
+ const messages = yield* sessions.messages({ sessionID: chat.id })
|
|
|
+
|
|
|
+ expect(result.info.role).toBe("assistant")
|
|
|
+ if (result.info.role === "assistant") {
|
|
|
+ expect(result.info.error?.name).toBe("ContextOverflowError")
|
|
|
+ expect(result.info.finish).toBe("error")
|
|
|
+ }
|
|
|
+ expect(messages.some((message) => message.parts.some((part) => part.type === "compaction"))).toBe(false)
|
|
|
+ }),
|
|
|
+)
|
|
|
+
|
|
|
noLLMServer.instance.skip(
|
|
|
"prompt emits v2 prompted and synthetic events (v2 projector disabled)",
|
|
|
() =>
|