summaryrefslogtreecommitdiff
path: root/libpanto/src/provider_anthropic_messages.zig
diff options
context:
space:
mode:
Diffstat (limited to 'libpanto/src/provider_anthropic_messages.zig')
-rw-r--r--libpanto/src/provider_anthropic_messages.zig6
1 files changed, 5 insertions, 1 deletions
diff --git a/libpanto/src/provider_anthropic_messages.zig b/libpanto/src/provider_anthropic_messages.zig
index 37ce818..9740c0e 100644
--- a/libpanto/src/provider_anthropic_messages.zig
+++ b/libpanto/src/provider_anthropic_messages.zig
@@ -124,6 +124,10 @@ pub const AnthropicMessagesRequest = struct {
rr.response = try rr.req.receiveHead(&redirect_buf);
if (@intFromEnum(rr.response.head.status) >= 400) {
+ // `head.bytes` (which `iterateHeaders` walks) points into the
+ // connection read buffer and is invalidated the moment the body
+ // stream is initialized below. Capture Retry-After first.
+ const retry_after_ms = provider_mod.retryAfterFromHead(rr.response.head);
const body_reader = rr.response.reader(&rr.transfer_buf);
var err_buf: std.ArrayList(u8) = .empty;
defer err_buf.deinit(self.allocator);
@@ -143,7 +147,7 @@ pub const AnthropicMessagesRequest = struct {
const classified = provider_mod.classifyHttpStatus(status, err_buf.items);
if (self.diag) |d| {
d.status_code = status;
- d.retry_after_ms = provider_mod.retryAfterFromHead(rr.response.head);
+ d.retry_after_ms = retry_after_ms;
}
return classified;
}