Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Gateway loses model-request events for malformed or non-object upstream JSON

Open
#655 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

@JianhaoYu-AI is already working on this.

Since Oct 26, 2026.

  • #658 by @JianhaoYu-AI — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
20/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
fastapi, python
Domain
api, backend, testing

Research direction

Read agentlightning.server.proxy.forward_request and the existing endpoint cases in tests/server/test_proxy_response.py and tests/server/test_endpoints.py. Start by reproducing the malformed JSON and non-object response cases using the offline setup described in the issue. Done means these responses return a gateway error, record a model-request event, preserve upstream HTTP error statuses, and release the in-flight counter; linked PR #658 is already open.

Written by the indexing model from the issue text.

Description

Problem

On main at 05c7fe133175653e48c990546a3509e52dc56512, forward_request assumes the upstream response is a JSON object:

  • malformed JSON with Content-Type: application/json raises during response.json();
  • JSON arrays, strings, numbers and null reach _pop_routed_experts and fail before _capture_event;
  • a non-JSON HTTP 200 response becomes {} and is recorded as a successful model request.

The first two paths lose the model-request event, making a failed rollout harder to diagnose.

Offline reproduction

Replace agentlightning.server.proxy._send_upstream_with_retries with an async function returning httpx.Response(200, text="null", headers={"content-type": "application/json"}). Register a rollout and model, then POST a normal chat-completion request through the gateway. The request raises instead of returning a gateway error, and no model-request event is recorded. A response containing { reproduces the JSON parsing failure; HTTP 200 with HTML reproduces the empty successful response.

Proposed scope

I have a focused local patch and eight endpoint regression cases. The patch returns a structured upstream-response error for malformed/non-object/non-JSON responses, maps invalid responses below HTTP 400 to 502, and preserves existing upstream HTTP error statuses. It records the error and retry count and releases the in-flight counter. Valid object responses keep their current path.

Would this error/status contract be appropriate for a PR?

Validation

Windows, Python 3.12.14; FastAPI 0.162.0, HTTPX 0.28.1, pytest 9.1.1. Dependencies were installed from the declared ranges, not the frozen lockfile. No model calls or GPU use.

  • Eight new cases: 8 failed before the patch.
  • python -m pytest -q tests/server/test_proxy_response.py tests/server/test_endpoints.py tests/test_client.py --tb=short: 51 passed after the patch.
  • Server/controller/examples/client tests: patched 101 passed, 9 failed; unchanged upstream 93 passed, the same 9 failed. These failures reference POSIX os.killpg, unavailable on Windows.
  • Ruff lint/format and git diff --check: passed.

I searched open PRs for upstream JSON response handling and non-JSON handling. #587 concerns request bodies; #574 concerns stored triplet export. Neither handles this response-ingestion path. AI assistance was used for investigation, the local patch and test execution.

Dominant language
Python
Stars
18.8k
Forks
1.7k
Avg merge
3d 13h
Merged PRs (30d)
10

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/agent-lightning

All issues in microsoft/agent-lightning

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.