chilly-france-44439
12/05/2025, 11:01 PMquick-window-91705
12/05/2025, 11:23 PMcalm-artist-7206
12/05/2025, 11:24 PMbase_url, didn't the SDK supply the app proxy URL?chilly-france-44439
12/05/2025, 11:30 PMbase_url=nullquick-window-91705
12/05/2025, 11:31 PMchilly-france-44439
12/05/2025, 11:31 PMchilly-france-44439
12/05/2025, 11:32 PMchilly-france-44439
12/05/2025, 11:33 PMtest-examples CI, revert that and invesitigate the root cause of that failure (likely due to the openhands/ provider + base_url error we are discussing here)nutritious-balloon-65098
12/05/2025, 11:33 PMcalm-artist-7206
12/05/2025, 11:36 PMgonna hold off on release for a bit so you've had a chance to look through the changeJust to clarify, I think hardcoding it in the CLI should work, I'm just thinking that maybe we can also fix the condition in the SDK then...
quick-window-91705
12/05/2025, 11:38 PMnutritious-balloon-65098
12/05/2025, 11:42 PMbase_url issue with the openhands/ provider that broke the CLI's new user setup flow. Here's what I found and fixed:
Root Cause Identified
PR #1273 introduced a breaking change in llm.py (line 373):
⢠Changed from: d["base_url"] = "<https://llm-proxy.app.all-hands.dev/>"
⢠To: d["base_url"] = d.get("base_url", "<https://llm-proxy.app.all-hands.dev/>")
The Problem: When CLI saves settings to JSON with base_url=null and reloads them, the dictionary contains {"base_url": None}. Python's dict.get(key, default) only returns the default when the key is missing, not when it's explicitly None. This caused LiteLLM to fail with a missing base_url error.
The Workaround in 1.4.0 (commit 54d93bc1): Changed the test workflow to bypass the openhands/ provider entirely by using litellm_proxy/ directly with a hardcoded URL.
Changes Made
1. Fixed llm.py (line 373): Changed to d.get("base_url") or "<https://llm-proxy.app.all-hands.dev/>" to handle explicit None values correctly
2. Reverted workflow workaround: Changed .github/workflows/run-examples.yml back to using openhands/claude-haiku-4-5-20251001 with ${{ secrets.LLM_BASE_URL }}
3. Added comprehensive tests (test_llm.py):
⦠Test with explicit None base_url (reproduces CLI bug)
⦠Test with custom base_url (ensures override still works)
Verification
⢠ā
All 467 LLM tests pass
⢠ā
Manual testing confirms all scenarios work correctly
⢠ā
Pre-commit hooks pass
⢠ā
Changes committed with descriptive message
Would you like me to:
1. Push these changes to a new branch and create a pull request?
2. Keep the changes local for now?
3. Any other specific workflow you prefer?
<sub>View full conversation</sub>nutritious-balloon-65098
12/05/2025, 11:46 PMbase_url issue with the openhands/ provider.
Pull Request: https://github.com/OpenHands/software-agent-sdk/pull/1341
What Was Done
ā
Investigation Complete:
⢠Reviewed Slack thread and related PRs (CLI #168, #171, SDK #1299, #1273)
⢠Identified root cause in PR #1273 where dict.get() doesn't handle explicit None values
⢠Found the workaround applied in release 1.4.0 (commit 54d93bc1)
ā
Fix Implemented:
⢠Changed d.get("base_url", default) to d.get("base_url") or default in llm.py
⢠Reverted workflow workaround to use openhands/ provider again
⢠Added 2 comprehensive test cases covering explicit None and custom URL scenarios
ā
Testing:
⢠All 467 LLM tests pass
⢠Pre-commit hooks pass
⢠Manual testing confirms all scenarios work
The Fix in One Line
Changed from dict.get(key, default) to dict.get(key) or default to properly handle cases where CLI saves base_url=null to JSON and reloads it as None.
This unblocks the CLI release and restores the proper functioning of the openhands/ provider for new user setup flows.
<sub>View full conversation</sub>