RGZingYang opened a new issue, #13501:
URL: https://github.com/apache/apisix/issues/13501

   ### Current Behavior
   
   When the upstream LLM provider returns HTTP 429 or 5xx with a JSON error 
body, ai-proxy currently returns only the status code and closes the HTTP 
connection before reading res.body_reader.
   
   As a result, the provider-side error details are discarded and cannot be 
captured by logs or observability pipelines. This is especially problematic for 
monitoring upstream 5xx errors, because users need the actual error body 
returned by the LLM provider to investigate the root cause, distinguish between 
provider failures, quota/rate-limit conditions, request validation errors, and 
other provider-specific diagnostics.
   
   
   
   ### Expected Behavior
   
   When the upstream LLM provider returns HTTP 429 or 5xx with an error 
response body, ai-proxy should read the body up to a configurable maximum size 
before closing the connection. The captured body should either be exposed 
through logging/observability fields such as `llm_response_text`, or be 
preserved and returned to the client together with the upstream status code, 
while respecting response size limits and the upstream `Content-Type`.
   
   
   ### Error Logs
   
   _No response_
   
   ### Steps to Reproduce
   
      ```
    local res, err = httpc:request(params)
       if not res then
           core.log.warn("failed to send request to LLM server: ", err)
           return handle_error(err)
       end
   
       -- handling this error separately is needed for retries
       if res.status == 429 or (res.status >= 500 and res.status < 600 )then
           return res.status
       end
   
       local code, body = read_response(extra_opts.conf, ctx, res, 
self.response_filter)
   
       if conf.keepalive then
           local ok, err = httpc:set_keepalive(conf.keepalive_timeout, 
conf.keepalive_pool)
           if not ok then
               core.log.warn("failed to keepalive connection: ", err)
           end
       end
   
   ```
   
   ### Environment
   
   - APISIX version (run `apisix version`):
   - Operating system (run `uname -a`):
   - OpenResty / Nginx version (run `openresty -V` or `nginx -V`):
   - etcd version, if relevant (run `curl 
http://127.0.0.1:9090/v1/server_info`):
   - APISIX Dashboard version, if relevant:
   - Plugin runner version, for issues related to plugin runners:
   - LuaRocks version, for installation issues (run `luarocks --version`):
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to