fix(opencode): respect disabled auto compaction on overflow (#30749)
This commit is contained in:
@@ -909,6 +909,13 @@ export const layer = Layer.effect(
|
|||||||
const error = parse(e)
|
const error = parse(e)
|
||||||
yield* flushV2Fragments()
|
yield* flushV2Fragments()
|
||||||
if (SessionV1.ContextOverflowError.isInstance(error)) {
|
if (SessionV1.ContextOverflowError.isInstance(error)) {
|
||||||
|
if ((yield* config.get()).compaction?.auto === false && !ctx.assistantMessage.summary) {
|
||||||
|
ctx.assistantMessage.error = error
|
||||||
|
ctx.assistantMessage.finish = "error"
|
||||||
|
yield* events.publish(Session.Event.Error, { sessionID: ctx.sessionID, error })
|
||||||
|
yield* status.set(ctx.sessionID, { type: "idle" })
|
||||||
|
return
|
||||||
|
}
|
||||||
ctx.needsCompaction = true
|
ctx.needsCompaction = true
|
||||||
yield* events.publish(Session.Event.Error, { sessionID: ctx.sessionID, error })
|
yield* events.publish(Session.Event.Error, { sessionID: ctx.sessionID, error })
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -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(
|
noLLMServer.instance.skip(
|
||||||
"prompt emits v2 prompted and synthetic events (v2 projector disabled)",
|
"prompt emits v2 prompted and synthetic events (v2 projector disabled)",
|
||||||
() =>
|
() =>
|
||||||
|
|||||||
Reference in New Issue
Block a user