fix: delist UA-gated free models from opencode-free — big-pickle and mimo-v2.5-free 429 every non-opencode client

Live verification (2026-08-21): big-pickle and mimo-v2.5-free return 429
FreeUsageLimitError for ANY User-Agent except the opencode CLI's own
'opencode/latest' — same IP, no cooldown effect, while the other six free
models serve our honest HermesAgent UA freely. Hermes sends deliberate
attribution headers and does not impersonate other clients, so these two
models are broken for our users by policy on OpenCode's side; delist them
rather than ship dead picker entries.

- opencode-free catalog: 8 -> 6 models (both curated lists)
- plugin default_aux_model: big-pickle -> laguna-s-2.1-free (fastest
  non-gated free model)
- keyless predicate keeps big-pickle (it IS free-tier; correct routing if
  a user enters it manually — they get the relay's own 429, not our 401)

E2E: picker shows 6, laguna aux default completes a keyless agent turn.
This commit is contained in:
Teknium
2026-08-21 03:47:49 -07:00
parent a9ac2c6fc8
commit 30ccd01ba2
3 changed files with 8 additions and 4 deletions
+4 -2
View File
@@ -559,12 +559,14 @@ _PROVIDER_MODELS: dict[str, list[str]] = {
# OpenCode free tier — keyless (no OpenCode account needed). Synced
# against live GET /zen/v1/models + anonymous probes (2026-08-21);
# deepseek-v4-flash-free delisted (promo ended, now 401s).
# big-pickle + mimo-v2.5-free delisted (UA-gated: the relay 429s
# FreeUsageLimitError for every client except User-Agent
# "opencode/latest"; we send honest Hermes attribution and don't
# impersonate other clients — verified 2026-08-21).
"opencode-free": [
"x-preview-f-free", # "Ox Alpha" stealth model — free, 1M ctx, ZDR
"big-pickle",
"hy3-free",
"laguna-s-2.1-free",
"mimo-v2.5-free",
"nemotron-3-ultra-free",
"nemotron-3.5-lightning-free",
"muse-spark-1.2-contributor-free",
+1 -1
View File
@@ -109,7 +109,7 @@ _DEFAULT_PROVIDER_MODELS = {
"ai-gateway": ["anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", "openai/gpt-5", "google/gemini-3-flash"],
"kilocode": ["anthropic/claude-sonnet-5", "anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", "openai/gpt-5.4", "google/gemini-3-pro-preview", "google/gemini-3-flash-preview"],
"opencode-zen": ["x-preview-f-free", "gpt-5.6-sol", "gpt-5.4", "gpt-5.3-codex", "claude-opus-5", "claude-sonnet-5", "gemini-3.7-flash", "glm-5.2", "kimi-k3", "minimax-m3"],
"opencode-free": ["x-preview-f-free", "big-pickle", "hy3-free", "laguna-s-2.1-free", "mimo-v2.5-free", "nemotron-3-ultra-free", "nemotron-3.5-lightning-free", "muse-spark-1.2-contributor-free"],
"opencode-free": ["x-preview-f-free", "hy3-free", "laguna-s-2.1-free", "nemotron-3-ultra-free", "nemotron-3.5-lightning-free", "muse-spark-1.2-contributor-free"],
"opencode-go": ["kimi-k3", "kimi-k2.7-code", "kimi-k2.6", "gpt-5.6-luna", "grok-4.5", "glm-5.3", "glm-5.2", "mimo-v2.5-pro", "mimo-v2.5", "minimax-m3", "minimax-m2.7", "qwen3.8-max", "qwen3.7-max", "deepseek-v4-pro", "hy3"],
"huggingface": [
"Qwen/Qwen3.5-397B-A17B", "Qwen/Qwen3-235B-A22B-Thinking-2507",
@@ -59,7 +59,9 @@ opencode_free = OpenCodeFreeProfile(
display_name="OpenCode Free",
description="OpenCode free models — keyless, no account needed",
default_headers=dict(_KEYLESS_HEADERS),
default_aux_model="big-pickle",
# laguna is the fastest non-UA-gated free model; big-pickle 429s every
# client except the opencode CLI's own User-Agent (verified 2026-08-21).
default_aux_model="laguna-s-2.1-free",
)
register_provider(opencode_free)