feat(nebul): add Nebul provider with 16 models and hourly sync module - #6876
wynandhuizinga wants to merge 13 commits into
Conversation
Action items
|
Action items
|
Action items
|
Action items
|
Nebul's docs map each family to a trace channel: reasoning_content for OpenAI-style models, the Nemotron family, Qwen3 thinking variants (plus DeepSeek-V4.1-Flash, Kimi-K3, Mistral-Medium-3.5 and muse-glimmer-30b, confirmed against the serving stack), message.reasoning for GLM-5.x and inline <thinking> for Gemma. Author interleaved on all 13 reasoners (interleaved = true where the schema has no named field) and carry existing?.interleaved through translateModel so sync never drops it.
…efforts Nebul's API has no toggle or budget control, so lab-style options must not be merged back into a rewritten entry — that would claim wire fields Nebul does not accept. When reasoning_efforts is advertised, the effort entry is the whole set; when it is not, authored options are kept.
Action items
|
…asoners Nebul's docs state reasoning_effort is accepted for reasoning-capable models and ignored only by non-reasoning models, so an empty option set would falsely claim no caller control. Author effort options from same-surface peers intersected with Nebul's documented value set: Kimi-K3 low|high|max (Tinfoil), muse-glimmer-30b low|medium|high (Fireworks/Vercel, xhigh undocumented on Nebul), Qwen3.8-27B low|medium (OpenRouter, toggle absent on Nebul).
Action items
|
Action items
|
1 — on the five remaining [] reasoners: |
Action items
|
|
superseeded by #6961 |
closes #6879
Adding Nebul as provider of models for opencode.
Nebul provider
Adds Nebul's Inference API —
https://api.inference.nebul.io/v1(OpenAI-compatible) — with 16 chat models and an hourly sync module driven by their public catalog endpoint.Sources
/v1, endpoints,NEBUL_API_KEYreasoning_effort(low/medium/high/max) is the only documented reasoning control; traces returned viareasoning_content(OpenAI-style, Nemotron, Qwen3 thinking),reasoning(GLM-5.x), or inline<thinking>(some Gemma)cache_read,max_input_tokens, advertisedreasoning_efforts(incl. Mistral-Medium-3.5'slow|medium|high|max)models/alibaba/qwen3-30b-a3b-instruct-2507.tomldates, license, weightsmodels/mistral/ministral-3-14b-instruct-2512.toml(open weights, Apache 2.0, 256k usage example)Reasoning controls policy
reasoning_effortsin/model/info(DeepSeek-V4.1-Flashlow|high|max, GLM-5.3-Flashlow|high|max, Mistral-Medium-3.5low|medium|high|max— the advertised set supersedes the lab'snone|high) or where the docs demonstrate it (gpt-oss-120b; GLM-5.3 uses the lab's always-on setlow|high|max).reasoning_options = []with a leading source comment.toggle,budget_tokens) and replaces only theeffortentry, matching the DigitalOcean pattern; covered by tests.Sync deletion safety
base_modeland falls back to existingcost/limitwhen/model/infotransiently returns nulls, so hourly sync never deletes hand-authored files over temporary gaps (DeepInfra/Baseten pattern).Review fixes included
models/mistral/ministral-3-14b-instruct-2512.toml: correctedopen_weightstotrue, addedlicense = "Apache 2.0"and the HF weights link (the same checkpoint is published on Hugging Face and marked open by NVIDIA/Infomaniak catalog entries);limit.output = 262_144is sourced from the HF card's own usage example (max_tokens = 262144).