[FEATURE]: Add option to disable models.dev fetch for corporate proxy environments
Feature hasn't been suggested before.
- [x] I have verified this feature I'm about to request hasn't been suggested before.
Describe the enhancement you want to request
Problem
Users behind corporate proxies experience issues with OpenCode 1.x.x versions due to a network call made on startup to https://models.dev/api.json. This call happens unconditionally and does not respect HTTP_PROXY/HTTPS_PROXY environment variables since Bun's native fetch() doesn't automatically handle proxy configuration.
Version 0.15.31 worked fine because this fetch behavior was either not present or handled differently.
Current Behavior
In packages/opencode/src/provider/models.ts, the get() function always calls refresh() which makes a network request:
export async function get() {
refresh() // Always calls fetch to models.dev
const file = Bun.file(filepath)
const result = await file.json().catch(() => {})
if (result) return result as Record<string, Provider>
const json = await data()
return JSON.parse(json) as Record<string, Provider>
}
The code does have fallback mechanisms (local cache + bundled data), but the fetch is attempted regardless.
Proposed Solution
Add a configuration option to disable network calls, e.g.:
{
"offline": true
}
Or more granularly:
{
"experimental": {
"disable_models_fetch": true
}
}
When enabled, OpenCode would skip the models.dev fetch and rely on:
- Cached data at
~/.cache/opencode/models.json - Bundled model data (compiled via macro)
Workaround
Currently, users can whitelist models.dev in their corporate proxy, but this isn't always possible in restricted environments.
Environment
- OpenCode version: 1.x.x (works in 0.15.31)
- Issue: Corporate proxy blocking/timing out on
models.devfetch
This issue might be a duplicate of existing issues. Please check:
- #531: Support HTTP_PROXY & HTTPS_PROXY for users behind firewalls and corporate proxies
- #3989: acp-command unhandled rejection when http_proxy is set (similar crash behavior in 1.x.x)
- #4284: Socket connection error with ProxyChains from v1.0.0 (proxy-related networking issues)
- #3053: Stuck After Compaction with long calls to models.dev (related to models.dev fetch blocking)
- #2224: Support for airgapped installation (offline environment support)
Feel free to ignore if none of these address your specific case.
yep this is a good idea i was toying around with it
I think experimental.skip_models_fetch would be a better name. After all, we're not trying to disable the ability to fetch updated model lists (opencode models --refresh should keep working), we're just trying to skip the automatic fetching of the updated list.
We might be able to achieve this simply by not enabling the 60 minute model refresh timer when experimental.skip_models_fetch == true? Need to look into how viable that is, but it sounds like it could work.