From 8b88b886346460b1ab29edb03ad85bc3bb565a45 Mon Sep 17 00:00:00 2001 From: t Date: Tue, 2 Jun 2026 15:00:44 -0600 Subject: compaction --- libpanto/src/provider_openai_chat.zig | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'libpanto/src/provider_openai_chat.zig') diff --git a/libpanto/src/provider_openai_chat.zig b/libpanto/src/provider_openai_chat.zig index d70eb30..c454679 100644 --- a/libpanto/src/provider_openai_chat.zig +++ b/libpanto/src/provider_openai_chat.zig @@ -137,6 +137,14 @@ pub const OpenAIChatRequest = struct { @intFromEnum(response.head.status), err_buf.items, }); + // Detect a context-overflow rejection so the caller can + // compact and retry rather than treating it as a hard error. + // OpenAI-compatible APIs return HTTP 400 with a + // `context_length_exceeded` code / "maximum context length" + // message on the input side. + if (@intFromEnum(response.head.status) == 400 and provider_mod.isContextOverflowBody(err_buf.items)) { + return error.ContextOverflow; + } return error.HttpError; } @@ -524,7 +532,7 @@ const StreamState = struct { const moved_blocks = try self.blocks.toOwnedSlice(self.allocator); defer self.allocator.free(moved_blocks); - try conv.addAssistantMessage(moved_blocks); + try conv.addAssistantMessageWithUsage(moved_blocks, self.usage); const msg = conv.messages.items[conv.messages.items.len - 1]; try receiver.onMessageComplete(msg, self.usage); -- cgit v1.3