Skip to content

Dev - #7400

Open
wynandhuizinga wants to merge 3 commits into
anomalyco:devfrom
NEBUL-AI:dev
Open

Dev#7400
wynandhuizinga wants to merge 3 commits into
anomalyco:devfrom
NEBUL-AI:dev

Conversation

@wynandhuizinga

Copy link
Copy Markdown

Add https://nebul.com as a provider with its in-scope chat models (12 today), plus an hourly sync module.

Supersedes #6876 (rebased cleanly onto current dev; resolves its remaining review items). The Ministral 3 14B lab file landed upstream in the meantime, so the only new lab entry is Alibaba's Qwen3 30B A3B Instruct.

Closes #6879.

Sources

Data Verified against
Reasoning effort values live GET https://api.inference.nebul.io/model/info "reasoning_efforts" is the per-model source of truth (GLM-5.3-Flash: low|high|max; GLM-5.3: empty list; Mistral Medium 3.5: low|medium|high|max)
gpt-oss-120b high/medium/low via reasoning_effort Nebul docs (only model the docs demonstrate)
Wire fields Nebul docs: reasoning_effort param, no toggle, no budget; traces in message.reasoning
Lifecycle model_info.superseded_by_model_name in /model/info (GLM-5.1/5.2-FP8 → GLM-5.3; Qwen3-VL-235B-A22B-Thinking → Qwen3.5-397B-A17B)

Catalog scope

  • General chat models only: embeddings and rerankers (by mode/model_type), specialized document-OCR models (name-scoped), entries the host flags via display_tags (Guard Model / Content Safety / Private / Internal), and server-side-superseded entries all skip silently. No name lists beyond the OCR scope rule exist in the module.
  • Private/Internal-tagged entries (e.g. the approval-gated Google and Ministral IDs dropped during review) are excluded durably by this tag filter, independent of server-side timing. Two early-access models dropped during review carry no tag, so their durable exclusion still depends on server-side removal.

Reasoning controls policy

  • Effort-only where the host advertises values in /model/info or the docs demonstrate them (the models listed above). All other reasoners use reasoning_options = [] with a sourced comment; no toggles, no budgets.
  • Sync preserves authored [] exactly; if nothing is advertised and nothing authored, new syncs fail closed with a missing-reasoning-controls error instead of inventing values.

Sync deletion safety

  • Deletes only happen when the host still serves enough entries (deleteDropped ≥10 live models / ≥50% retention), preserving existing catalog models otherwise.
  • Whole-catalog faults (empty response, or no entry matching the chat-model filter) fail closed in parseModels before any file is written or deleted.

…odule

- 12 served chat models with live costs/limits and per-model reasoning
  controls; effort values only where the live catalog
  (https://api.inference.nebul.io/model/info) reasoning_efforts or
  Nebul docs establish accepted values, empty otherwise; no toggles or
  budgets (undocumented)
- missing lab metadata for models/alibaba/qwen3-30b-a3b-instruct-2507
- hourly sync: endpoint-authoritative deletes with ratio safety,
  whole-catalog fail-closed parse guards, base_model alias autodiscovery
- catalog scope is endpoint-driven: superseded entries follow
  model_info.superseded_by_model_name; specialized document-OCR models
  (name-scoped) and display_tags-flagged entries (Guard Model, Content
  Safety, Private, Internal) skip silently
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] providers/nebul/models/moonshotai/Kimi-K3.toml:4 - Check: Provider reasoning / reasoning_options / interleaved must match this host’s actual reasoning surface. Why: The leading comment states Nebul marks this ID with supports_reasoning = false, but the entry still inherits reasoning = true from moonshotai/kimi-k3, sets reasoning_options = [], and declares [interleaved] field = "reasoning_content". That combination claims an always-on reasoner with a reasoning side channel while the same file asserts the host does not support reasoning. Action: Verify the live /model/info flags and chat behavior for moonshotai/Kimi-K3. If the host truly does not reason, set reasoning = false and remove reasoning_options and interleaved. If it does reason (always-on, no controls), drop the supports_reasoning = false claim and keep [] only with accurate evidence.
  • [medium] [violation] packages/core/src/sync/providers/nebul.ts:144 - Check: Skipped remote IDs and skippedNotice must describe the real skip reason. Why: sourceID returns every in-scope chat model that translateModel skips, including brand-new entries missing price or max_input_tokens, not only unresolved base_model targets. skippedNotice always blames missing lab metadata (need hand-authored base_model targets), so pricing/limit gaps are misreported and any future missing-model issue wiring would open the wrong class of issues. Action: Split skip reasons (unresolvable base vs incomplete serving data) in sourceID / notices, and only route true missing-lab cases through the base_model hand-author path (optionally via missingModelID like other multi-lab relays).

Resolve conflict in packages/core/src/sync/index.ts by keeping the
upstream 'aiand', 'fireworks-ai', and 'friendli' direct-group entries
alongside this branch's 'nebul' registration.
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/nebul/models/moonshotai/Kimi-K3.toml:11 - Check: reasoning_options = [] means the model reasons with no caller control; do not mark a non-reasoner that way, and do not attach an interleaved reasoning side-channel unless traces are actually returned. Why: The leading comment states the live catalog marks this ID supports_reasoning = false, but the file still inherits reasoning = true from moonshotai/kimi-k3, sets reasoning_options = [], and declares [interleaved] field = "reasoning_content". Those three claims cannot all be true: either Nebul does not reason here (override reasoning = false and drop reasoning_options + interleaved) or it does reason (remove the supports_reasoning = false claim and keep only controls/trace fields that match the host). Action: Reconcile against Nebul /model/info + a live completion for this ID; author the matching override set and fix the header comment so it no longer contradicts the TOML.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Adding Nebul as provider for opencode

1 participant