fix(config): benchmarks silently got zero tools because of a leftover setting in global.env#126
Merged
Merged
Conversation
…'s registry setting config/global.env has set DYNACONF_ADVANCED_FEATURES__REGISTRY=false since this repo's first commit, contradicting every benchmark's own .env (m3, appworld, bpo, oak_health_insurance all set it to true). This was masked for months by config_loader/loader.py's override=True behavior, which let the benchmark-specific file always win. #114 changed that loader to os.environ.setdefault (for an unrelated port-override use case), which now respects whatever the shell already exported - and load_env.sh's own no-override, global-loads-first order has always resolved that value to false. Net effect: every benchmark silently gets zero tools. - Remove the DYNACONF_ADVANCED_FEATURES__REGISTRY=false line and its stale "tools loaded directly from containers" comment (that direct-load mechanism doesn't exist anywhere in this repo's history) - No replacement default is set here on purpose: each benchmark's own .env already declares the value it wants Fixes #124
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe global environment file no longer disables the registry. Comments now state that registry configuration belongs in each benchmark’s environment file. ChangesRegistry configuration
Estimated code review effort: 1 (Trivial) | ~2 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
10 tasks
offerakrabi
approved these changes
Jul 16, 2026
offerakrabi
left a comment
Collaborator
There was a problem hiding this comment.
this looks fine, however i would add a tests that confirms this
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug Fix Pull Request
Related Issue
Fixes #124
Description
Every benchmark (M3, AppWorld, BPO, Oak) was silently getting zero tools — the agent had nothing to work with, and every task failed looking like the agent made a mistake, when really the environment never gave it anything to call. This fixes it with a one-line removal.
It's an issue of precedence and overriding of settings.
config/global.envhasDYNACONF_ADVANCED_FEATURES__REGISTRY=falsesince this repo's very first commit. Every benchmark's own has, such asm3.envorappworld.envhasDYNACONF_ADVANCED_FEATURES__REGISTRY=true. Until recently, the latter won. A recent, unrelated fix (#114) changed the reading order so the sharedglobal.envwins instead.Type of Changes
Root Cause
config/global.envsetsDYNACONF_ADVANCED_FEATURES__REGISTRY=false. Every benchmark's own.env(m3.env,appworld.env,bpo.env,oak_health_insurance.env) sets it totrue. The bash-side loader (benchmarks/helpers/load_env.sh) loadsglobal.envfirst and uses "no-override" semantics (first value wins) — so it has always resolved this contradiction in favor offalse. This never showed up as a problem because the Python-side loader (config_loader/loader.py) used to apply settings withload_dotenv(file, override=True), so the benchmark-specific file — loaded second — always won there instead, correcting the bash-side mistake.PR #114 (parameterizing hardcoded ports, for an unrelated reason — letting a caller's shell override a port setting before Python loads config) changed that Python loader to merge the files into a dict and apply it with
os.environ.setdefault(key, value).setdefaultonly fills in a key if it isn't already set — and by the time Python runs, bash has already set it (to the wrong value). So the correction Python used to provide silently stopped happening.Confirmed with a controlled before/after: checking out the commit right before #114, with the identical
config/global.envcontent, reliably works (tools bind, task passes). Currentmain, same command, same config file, clean process table (ruling out any timing/concurrency explanation), reliably fails withCombinedToolProvider: Found 0 apps.Solution
Remove the
DYNACONF_ADVANCED_FEATURES__REGISTRY=falseline (and its now-stale comment claiming M3 loads tools "directly from containers" — that mechanism doesn't exist anywhere in this repo's history) fromconfig/global.env. No replacement default is set here, on purpose: every benchmark already declares the value it wants in its own.envfile, so the shared config layer doesn't need an opinion on this key at all.Testing
just lint— only unrelated failure is in an untracked file for a separate, not-yet-committed feature branch/PR)Verification performed:
load_env.sh) and the Python loader (config_loader/loader.py) end-to-end for bothm3andappworldbenchmarks; both now resolveDYNACONF_ADVANCED_FEATURES__REGISTRYtotrue.mainand re-ran the failing M3 task with a clean process table (no concurrent runs) — reliably failed (Found 0 apps). Restored the fix — same task, same clean conditions — reliably passed (Found 1 apps, real tool calls, correct answer).CombinedToolProviderstill reports 0 apps because it checks the same flag before querying the running registry).Checklist
Summary by CodeRabbit
Bug Fixes
Documentation