From bd0186f52245cb7a0a1cc81df2b29ecfe8d7b2e4 Mon Sep 17 00:00:00 2001 From: Simo Lin <25425177+slin1237@users.noreply.github.com> Date: Thu, 20 Aug 2026 13:04:20 -0700 Subject: [PATCH] fix(router): drop external-provider request copies before dispatch Signed-off-by: Simo Lin <25425177+slin1237@users.noreply.github.com> --- model_gateway/src/routers/openai/chat.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/model_gateway/src/routers/openai/chat.rs b/model_gateway/src/routers/openai/chat.rs index 06d2160f3..fbeacafa1 100644 --- a/model_gateway/src/routers/openai/chat.rs +++ b/model_gateway/src/routers/openai/chat.rs @@ -145,12 +145,14 @@ pub(super) async fn route_chat( clippy::expect_used, reason = "payload is set earlier in this function; absence is a logic error" )] - let payload_ref = ctx.payload().expect("Payload not prepared"); - let payload_json = Arc::new(payload_ref.json.clone()); + let payload_json = Arc::new(ctx.take_payload().expect("Payload not prepared").json); let client = ctx.components.client().clone(); let headers_cloned = Arc::new(ctx.headers().cloned()); let worker_api_key = Arc::new(worker.api_key().cloned()); let is_streaming = ctx.is_streaming(); + // The retry loop replays from the serialized payload alone; the parsed + // request and its context must not outlive dispatch. + drop(ctx); let response = RetryExecutor::execute_response_with_retry( deps.retry_config,