feat(melious): add Melious provider with 56 models - #4438
Conversation
Melious AI GmbH is a European relay for open-weight models, exposing an OpenAI-compatible endpoint at https://api.melious.ai/v1. - providers/melious: provider.toml, currentColor logo.svg, and 56 model entries (49 chat + 7 embedding), all override-only via base_model. - models/: 16 new lab metadata entries required as base_model targets, under new labs nousresearch, hcompany, baai, intfloat and sentence-transformers. - labs/: descriptions for those five labs, logos for baai, nousresearch and hcompany, plus LAB_NAME_OVERRIDES so they render as "Nous Research", "H Company", "BAAI" and "intfloat" rather than a title-cased directory id. Only models listed on https://melious.ai/hub/models are included. Costs are converted from Melious's EUR list price for the default `balanced` route at 1.1535 USD/EUR (ECB euro reference rate, 2026-08-07). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Checking Mistral/Nemotron peers and whether the PR documents Melious reasoning wire format. |
Action items
|
The API reference for this host documents exactly one reasoning control: `reasoning_effort` accepting low|medium|high for reasoning models, ignored by non-reasoning models. There is no thinking/toggle field and no reasoning budget field, so the previous per-model effort enums invented values this API does not accept (`none`, `max`) and narrowed others without evidence. - All 34 reasoning models now use the documented low|medium|high enum. - provider.toml records the wire field and the reference URL. - Drop the context overrides on bge-large-en-v1.5 and qwen3-embedding-8b: the hub reports 8192 and 41000, above the models' architectural maxima of 512 and 32768, so the lab limits are kept. Ref: https://melious.ai/docs/reference/chat-completions Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Thanks — the "no mapped evidence for the effort enums" item (the The missing evidenceI had been reasoning from the prose in
That is the complete reasoning surface. The page has zero occurrences of What I fixedYou were right that I invented values. reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
Where I don't think the suggested fix holdsMost action items ask for
The relay guidance to "copy the underlying model's controls" is about granularity, not about pasting the lab's field names onto a host that doesn't expose them. On this surface the graded enum is the whole control, which is why it comes out uniform: the flattening is a real property of the host, not a gap in research. Two knock-on points:
If a maintainer would rather this host report
|
…r-integration-ad54cf # Conflicts: # models/alibaba/qwen3-vl-235b-a22b-instruct.toml
dev's canonical models/alibaba/qwen3-vl-235b-a22b-instruct.toml (taken over mine in the merge) states a 131072 context and text+image modalities, and 06f44f5 set meta/llama-3.1-8b-instruct context to 128000. Both now match what Melious serves, so the provider entries no longer need to restate them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Inspecting base models for suspicious overrides and whether new lab entries collide with existing files. |
…r-integration-ad54cf
Action items
|
Melious only forwards `reasoning_effort` (low|medium|high), so authoring that enum for models with no upstream effort concept overstated caller control. Set [] for the always-on reasoners and the prompt-steered hybrids, each with a leading comment citing the baseline: - deepseek-r1-0528, minimax-m2.5, minimax-m2.7, kimi-k2.7-code: the first-party lab host authors [] (deepseek-reasoner, MiniMax-M2.5/M2.7, kimi-k2.7-code). - qwen3-next-80b-a3b-thinking: Alibaba exposes only a reasoning budget, which Melious has no field for; OpenRouter authors []. - hermes-4-405b, hermes-4-70b: thinking is system-prompt steered; OpenRouter models it as a toggle, which Melious has no wire field for. The other 27 keep low|medium|high: their underlying models have a real on/off or graded thinking control, and effort is the only dial this host exposes. Also revert the [[links]] addition to models/meta/llama-3.1-8b-instruct.toml so this PR no longer modifies shared lab metadata that already exists on dev. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
This round landed — all six reasoning items were right, and I've adopted them plus one more the sweep turned up. Pushed in 56a1aea. Reasoning optionsMy previous blanket
If the lab that built the model offers no effort control on its own API, a relay cannot invent one —
Each of the seven carries a leading comment naming the baseline it follows. Why the other 27 keep
|
…r-integration-ad54cf
|
Checking which new lab files already exist on base and reviewing more potential issues. |
Action items
|
The hub payload's `parameters` block carries a `max_tokens` alongside `context_window`; the earlier scrape only read the latter, so limit.output was a mechanical clamp to the served context instead of the host's real cap. - devstral-2-123b-instruct-2512: output 200_000 -> 8_192 - nemotron-3-nano-30b-a3b: output 128_000 -> 8_192 - kimi-k2.5, mistral-medium-3.5-128b: the hub publishes no max_tokens for these, so the cap at the served context stays, now with a comment saying so. - qwen3-coder-next: cite capabilities.structured_output = false behind the flip. Cross-checked the whole provider against a fresh scrape: all 18 structured_output overrides and all 24 context overrides match the hub exactly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Applied the limit and capability items in 3197444. The two
|
| model | was | now | source |
|---|---|---|---|
devstral-2-123b-instruct-2512 |
200 000 | 8 192 | parameters.max_tokens |
nemotron-3-nano-30b-a3b |
128 000 | 8 192 | parameters.max_tokens |
Only 4 of 56 models publish the field. The other two are the E5 embedders, where it just echoes context and output = 1 is the repo convention (matching providers/google/models/gemini-embedding-001.toml), so those are unchanged.
kimi-k2.5 is a fourth instance of the same pattern that the review did not flag. It shipped output = 256_000 from the same clamp. It and mistral-medium-3.5-128b publish no max_tokens, so capping at the served context remains the only defensible value — both now carry a leading comment saying exactly that, so it no longer reads as a hub figure.
qwen3-coder-next structured_output
The flip is correct — the hub reports capabilities.structured_output = false for this ID against the lab's true — and the file now cites that flag in its leading comment.
While confirming it I re-scraped all 56 hub pages and cross-checked the whole provider:
- 18/18
structured_outputoverrides match the hub exactly, no mismatches. - 24/24
contextoverrides match the hub's served deployment context exactly.
bun validate passes, and no resolved model has limit.output exceeding limit.context.
The two [high] lab-metadata items
These are already resolved on the branch; both files are byte-identical to base:
models/meta/llama-3.1-8b-instruct.toml base=ff2584e0 head=ff2584e0
models/alibaba/qwen3-vl-235b-a22b-instruct.toml base=f6d7739a head=f6d7739a
Neither path appears in git diff origin/dev...HEAD, and models/ in this PR is additions only — 14 new files, zero modifications. models/meta/llama-3.1-8b-instruct.toml was reverted to base's exact blob in 56a1aea, and models/alibaba/qwen3-vl-235b-a22b-instruct.toml was resolved to base's version when the merge in 699125c hit an add/add conflict.
The values quoted in the finding (context = 131_072 plus a license for Llama; video and context = 262_144 for Qwen-VL) come from the first commit in the series, which later commits reverted. The review appears to be reading the cumulative patch series rather than the net diff — consistent with the phrasing "Patch 3 already assumes the base 128k lab entry." So there is no path left to drop; the requested end state is what the branch already ships.
Happy to squash the branch if you'd prefer no intermediate commit to have touched shared lab metadata at all — just say so and I'll force-push a cleaned history.
Action items
|
|
Superseded by #5047 — closing this one. Same final content, squashed onto current All review feedback from this thread is carried over — the |
Adds Melious (Melious AI GmbH), a European relay for open-weight models with an OpenAI-compatible endpoint at
https://api.melious.ai/v1.What's here
providers/melious/provider.toml,logo.svg, and 56 model entries — 49 chat + 7 embeddingmodels/base_modeltargetslabs/Every provider entry uses
base_modeland is override-only. New labs:nousresearch,hcompany,baai,intfloat,sentence-transformers.Sources
https://melious.ai/hub/models/<id>(SSR payload), accessed 2026-08-10Pricing: which figure I used
Melious publishes two prices per model, and they disagree for 8 of 49 chat models. I used the hub
balanced-route price, because a bare model ID resolves tobalanced— that is what you are billed when you callmodel="gpt-oss-120b". The/pricingrate card agrees for the other 41.The sharpest divergence is
gpt-oss-120b: rate card €0.04/€0.20 vsbalanced€0.22/€0.66. Happy to switch these 8 to the rate card if maintainers prefer the published table as the canonical figure.All costs are USD/MTok, converted from EUR at 1.1535 USD/EUR — the ECB euro reference rate for 2026-08-07 (last publication before 2026-08-10; ECB publishes on working days only). Rate and date are recorded in a leading comment in every model file.
cost.cache_readis set where Melious charges a discounted cached-prompt rate. Note their docs say prompt caching is billed but not user-controllable — there is no cache-control knob in the API.Scope
Only models listed on https://melious.ai/hub/models are included.
apertus-70bappears on the/pricingrate card but has no hub page (404, and absent from all 64 hub listings), so it is left out. Image and audio models are excluded — they price per-image and per-minute, which thecostschema does not express.models/swiss-ai/apertus-70b.tomlis untouched.Reasoning options
Melious documents exactly one reasoning control:
reasoning_effort("Usereasoning_effort: highwhen you want them to think harder,lowto keep it quick"). There is no reasoning on/off field and no reasoning budget field, so no entry usestoggleorbudget_tokens. For hybrid models,nonein the effort list carries "thinking disabled". Granularity per model follows the underlying model plus same-surface OpenAI-compatible relays already in this repo (greenpt,cortecs,scaleway).[]is used only where peer entries agree there is no caller-side control — never as a stand-in for uncertainty.preset: reasoning|non_reasoningis a routing control, not a reasoning control, so it is not modelled as areasoning_option.Lab logos
baaiandnousresearchcome from lobe-icons (MIT);hcompanyis the official mark fromhcompany.ai. All normalised tocurrentColor, no fixedwidth/height, square viewBox.intfloatandsentence-transformersship no logo:intfloatis an individual's Hugging Face handle with no brand mark, andsentence-transformershas no SVG anywhere (only_static/logo.pngon sbert.net). Both fall back to the default logo, matching the existing behaviour of 10 other logo-less labs. I did not want to trace bitmaps into fake vectors.LAB_NAME_OVERRIDESinpackages/web/src/render.tsxgains 4 entries — without themlabName()title-cases the directory id and the pages render "Nousresearch", "Hcompany", "Baai", "Intfloat".Test plan
bun validate— exits 0bun test— 164 pass, 4 fail; all 4 fail identically on a cleandevcheckout (2 DeepInfra sync assertions, 2 missingpackages/sdk/src/snapshot.jsbuild artifact). Unrelated to this change.cd packages/web && bun run build— exits 0;/providers/meliousrenders, all 5/labs/<id>pages render with correct display names,dist/logos/melious.svgand the 3 lab logos are emitted_api.jsoncontains 56 Melious models; everybase_modelresolves; every resolved model haslimit.context+limit.output, and nolimit.output/limit.inputexceeds itscontextreasoning = truehasreasoning_options; none set it withreasoning = falseReviewer notes
Two judgement calls worth a look:
labs/nousresearch/logo.svgis 19.7 KB — 5× the largest existing lab logo. It is their real mark from the MIT icon set, but densely traced: legible at 48 px+, muddy at 24 px. Easy to drop for the fallback if that is preferred.structured_output = trueon 18 entries where the lab metadata is silent and Melious reports support. These are additions rather than restatements of base values, but say the word if provider files should stay quieter.🤖 Generated with Claude Code