Skip to content

feat(melious): add Melious provider with the GLM, DeepSeek and Kimi families - #7046

Merged
rekram1-node merged 2 commits into
anomalyco:devfrom
jope35:feat/melious-provider
Sep 14, 2026
Merged

rekram1-node merged 2 commits into
anomalyco:devfrom
jope35:feat/melious-provider

Conversation

@jope35

@jope35 jope35 commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Adds Melious (Melious AI GmbH), a European OpenAI-compatible
relay of open-weight models, with an endpoint at https://api.melious.ai/v1.

Melious is a multi-model relay, not a lab — it did not build any model it serves —
so every entry uses base_model and is override-only.

Scope: first of two PRs

This PR is deliberately narrow: the provider plus the GLM, DeepSeek and Kimi
families
(15 models), all of which already have lab metadata under models/.

It touches providers/melious/ only — no models/, no labs/, no
packages/web/src/render.tsx. A second PR adds the rest of the catalog, including the
11 models that need new lab entries (BAAI, intfloat, sentence-transformers, NousResearch,
H Company and two Qwen ids). Splitting it this way keeps the shared-metadata discussion
out of the provider's own review.

Data provenance

Primary source is the authenticated catalog, GET https://api.melious.ai/v1/models?include_meta=true,
cross-checked against the per-model hub pages (https://melious.ai/hub/models/<id>),
both accessed 2026-09-14.

Prices are the balanced route: a bare chat model ID resolves to balanced
(routing docs), so that is what a caller of
model="glm-5.3" is billed. Only bare IDs are published — no :suffix variants.

Converted at 1.1592 USD/EUR, the ECB euro reference rate for 2026-09-11.
One rate for the whole PR; every file's leading comment records its EUR figures, the rate
and the date, so the arithmetic is checkable from the diff without leaving the page.

model base_model context EUR in/out/cache USD in/out/cache
deepseek-r1-0528 deepseek/deepseek-r1 164,000 0.6 / 2.4 / 0.16 0.69552 / 2.78208 / 0.185472
deepseek-v3.2 deepseek/deepseek-v3.2 164,000 0.3 / 0.5 / 0.08 0.34776 / 0.5796 / 0.092736
deepseek-v4-flash-0731 deepseek/deepseek-v4-flash-0731 1,000,000 0.1 / 0.25 / 0.02 0.11592 / 0.2898 / 0.023184
deepseek-v4-pro deepseek/deepseek-v4-pro 1,000,000 1.6 / 3.2 / 0.4 1.85472 / 3.70944 / 0.46368
deepseek-v4-pro-0813 deepseek/deepseek-v4-pro-0813 1,000,000 1.0 / 3.0 / 0.1 1.1592 / 3.4776 / 0.11592
deepseek-v4.1-flash deepseek/deepseek-v4.1-flash 1,000,000 0.2 / 1.0 / 0.01 0.23184 / 1.1592 / 0.011592
glm-5 zhipuai/glm-5 203,000 0.95 / 2.9 / 0.23 1.10124 / 3.36168 / 0.266616
glm-5.1 zhipuai/glm-5.1 203,000 1.3 / 4.0 / 0.32 1.50696 / 4.6368 / 0.370944
glm-5.2 zhipuai/glm-5.2 1,000,000 1.0 / 4.0 / 0.25 1.1592 / 4.6368 / 0.2898
glm-5.3 zhipuai/glm-5.3 1,000,000 1.0 / 3.0 / 0.2 1.1592 / 3.4776 / 0.23184
glm-5.3-flash zhipuai/glm-5.3-flash 1,000,000 0.1 / 0.4 / 0.02 0.11592 / 0.46368 / 0.023184
kimi-k2.5 moonshotai/kimi-k2.5 262,000 0.5 / 2.55 / 0.12 0.5796 / 2.95596 / 0.139104
kimi-k2.6 moonshotai/kimi-k2.6 256,000 0.7 / 3.5 / 0.23 0.81144 / 4.0572 / 0.266616
kimi-k2.7-code moonshotai/kimi-k2.7-code 262,144 0.7 / 3.0 / 0.19 0.81144 / 3.4776 / 0.220248
kimi-k3 moonshotai/kimi-k3 1,000,000 2.75 / 13.75 / 0.68 3.1878 / 15.939 / 0.788256
Worth noting for reviewers: the hub's rendered pages disagree with the catalog endpoint on
six of these — kimi-k2.7-code output is EUR 3.00 in the catalog but EUR 3.50 on the hub,
kimi-k2.5 context is 262 000 not 256 000, and four cache rates are rounded in the hub UI.
The catalog figures are used throughout.

Reasoning options

reasoning_effort is the only reasoning control this host exposes. It forwards no
lab-native thinking field — no thinking.type, no enable_thinking, no reasoning budget —
so no entry uses toggle or budget_tokens.

The host accepts any effort string without a 4xx, including minimal, xhigh and
max, so acceptance alone proves nothing. The authored set is therefore the documented
ladder plus one measured value:

reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }]

  • none is a real off state — measured, not assumed. reasoning_effort="none" returns
    usage.reasoning_tokens = 0 and no reasoning_content, reproduced on glm-5.3,
    deepseek-v4-pro and kimi-k2.7-code (2026-09-14, against
    api.melious.ai/v1/chat/completions). Per AGENTS.md, because none is reachable this
    is an effort list containing none, not a toggle.
  • low/medium/high are the ladder Melious documents in the
    chat-completions reference.
  • minimal/xhigh/max are accepted but undocumented, and produced no behaviour
    distinguishable from high, so they are not authored — no full-enum dump.

On divergence from the lab enums: several of these models expose low|high|max or a
toggle on their first-party host, and those controls are simply not reachable through this
API. Per AGENTS.md → Reasoning options, a relay's options describe its own request
surface. There is merged precedent for exactly this on same-surface relays, e.g.
providers/cortecs/models/deepseek-v4-pro.toml,
providers/cortecs/models/deepseek-v4-flash-0731.toml,
providers/digitalocean/models/deepseek-v4-flash-0731.toml and
providers/nebius/models/zai-org/GLM-5.2.toml.

[interleaved] field = "reasoning_content" is set from observed live responses, not assumed.

Overrides

Inherited from the lab entries unless Melious genuinely differs. Real deltas only:

  • limit.context where the served window differs: glm-5/glm-5.1 (203 000),
    deepseek-r1-0528/deepseek-v3.2 (164 000), kimi-k2.5 (262 000), kimi-k2.6 (256 000),
    kimi-k3 (1 000 000 vs the lab's 1 048 576).
  • limit.output only where the lab's output exceeds Melious's served context
    (kimi-k2.5, kimi-k2.6). max_output_tokens is null for all 15, so output is otherwise
    inherited rather than invented.
  • modalities.input where this host routes less than the lab supports: glm-5.3-flash
    (no PDF) and kimi-k2.5 (no video).

Names, descriptions, dates, tool_call, open_weights and matching limits/modalities are
not restated.

Prior art

#5047 and
#5221 both propose this provider and
are both currently blocked. Their published data also contradicts each other and the live
catalog, so nothing here is ported from either — every value was re-sourced on 2026-09-14.
Two concrete corrections that came out of that: #5221 states an explicit
reasoning_effort: "none" still returns reasoning and therefore omits it — measurement above
shows it does reach an off state; and mistral/voxtral-small-2507, used as a base_model
target in #5047, does not exist (models/mistral/voxtral-small-24b-2507.toml does).

Test plan

  • bun validate — exits 0
  • bun run test in packages/sdk — 23 pass, 0 fail
  • cd packages/web && bun run builddist/_api.json contains melious with 15 models; dist/logos/melious.svg emitted; the provider page renders
  • Every entry uses base_model; no restated-identical fields; no id key; no context_over_200k
  • All comments sit above the first key, so sync re-serialization preserves them
  • No limit.output > limit.context; no cache_read >= input; every resolved model has limit.context + limit.output
  • Cost arithmetic reproduces from the EUR figures and rate stated in each file
  • logo.svg — square viewBox, currentColor, no fixed width/height, no hardcoded colors

Happy to add a sync module if maintainers want to add a MELIOUS_API_KEY secret to
sync-models.yml — the catalog endpoint is rich enough to drive one.

🤖 Generated with Claude Code

…amilies

Melious AI GmbH is a European OpenAI-compatible relay of open-weight models.
This is the first of two PRs: it adds the provider and the 15 models whose lab
metadata already exists under models/, so it touches providers/melious/ only --
no models/, labs/ or render.tsx changes. The remaining catalog follows once this
lands.

Every entry uses base_model and is override-only.

Data: GET https://api.melious.ai/v1/models?include_meta=true, cross-checked against
the per-model hub pages. Prices are the default `balanced` route (a bare chat model
ID resolves to `balanced`), converted at 1.1592 USD/EUR (ECB euro reference rate,
2026-09-11). Each file records its EUR figures, the rate and the date so the
arithmetic is checkable from the diff.

Reasoning: reasoning_effort is the only control this host exposes -- no lab-native
thinking field, no reasoning budget, so no toggle or budget_tokens. The host accepts
any effort string without a 4xx, so the authored values are the documented ladder
(low|medium|high) plus none, which was measured to be a real off state: it returns
usage.reasoning_tokens = 0 and no reasoning_content on glm-5.3, deepseek-v4-pro and
kimi-k2.7-code. Because none is reachable this is an effort list containing none,
not a toggle. Reasoning text is returned in message.reasoning_content.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/melious/models/deepseek-v4-pro.toml:22 - Check: Relay reasoning_options must follow the lab/same-surface peer baseline for each model, not a universal GPT low/medium/high ladder (AGENTS.md → Reasoning options; audit-reasoning-options). Why: Melious is a multi-model openai-compatible relay, but every one of the 15 models is authored as effort = ["none", "low", "medium", "high"]. That is the GPT-gateway default and conflicts with established baselines the PR itself cites: DeepSeek V4 lab/peers use high/max (or low/high/max), not L/M/H; GLM-5.3 peers use low/high/max; GLM-5.2 is high/max; GLM-5/5.1 and several Kimi/DeepSeek peers are toggle-only or []. The files admit the host accepts any effort string without 4xx (so acceptance is not evidence), that max/xhigh/minimal showed no distinct behavior, and that live checks covered only glm-5.3, deepseek-v4-pro, and kimi-k2.7-code—mainly proving none turns reasoning off. Publishing a single invented L/M/H set misrepresents caller controls for non-GPT families. Action: Author per-model (or per-family) reasoning_options from this host’s real effective controls, starting from lab + peer sets: e.g. DeepSeek V4 → none + high (add max only if it is distinct here); GLM-5.3/5.3-flash → none + low/high/max if those grade here; toggle-only peers → none plus only levels that actually change behavior (not a full L/M/H dump); peer-[] models → only levels with host evidence. Drop medium (and any other value) unless Melious docs or measurements show a real graded effect on that model. Keep the effort+none shape (no toggle) only where off is truly reasoning_effort="none".

Replaces the uniform effort ["none","low","medium","high"] on all 15 entries,
which asserted a graded ladder this host does not implement.

Every model was probed against api.melious.ai/v1/chat/completions on 2026-09-14
at temperature 0 with the same prompt, comparing emitted reasoning_content across
none/low/medium/high (repeat samples where the result was load-bearing):

- 12 models: reasoning_effort="none" is a real off state (reasoning_tokens = 0,
  no reasoning_content) while low/medium/high all reason with no ordered
  difference in depth -> effort ["none", "high"]. An effort list containing none
  rather than a toggle, since off is reachable through this field.
- glm-5, deepseek-r1-0528, kimi-k2.5: "none" does not suppress reasoning and no
  level grades -> reasoning_options = []. An affirmative measurement of no caller
  control, not an untested default.

No model showed graded effort, so no graded levels are published. The host accepts
any effort string without a 4xx, so acceptance was not treated as evidence. The
catalog's reasoning_type is not a reliable guide either: glm-5.3-flash is typed
always-on yet honours "none", glm-5 is typed hybrid yet ignores it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jope35

jope35 commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

Fixed in 6180a3c — the finding was right, and the uniform ladder is gone.

You were correct on the substance: acceptance was not evidence, the live checks covered
only three models, and publishing one L/M/H set across DeepSeek, GLM and Kimi asserted a
control that was never demonstrated. Rather than re-derive from the lab/peer enums, I
measured every model on this host, because those enums are not reachable through this API
and AGENTS.md → Reasoning options asks for the host's own surface.

Method. Each of the 15 models, same prompt, temperature: 0, max_tokens: 3000 (large
enough that nothing truncated mid-trace), comparing emitted reasoning_content across
none/low/medium/high, with repeat samples wherever the result was load-bearing.
Measured 2026-09-14 against api.melious.ai/v1/chat/completions. reasoning_content
length was used rather than usage.reasoning_tokens, because the latter is unreliable here
glm-5.2 reports reasoning_tokens: 0 while returning 2 546 characters of reasoning.

Result — two behaviours, neither of them a graded ladder.

model none low medium high authored
glm-5 2444 / 2239 / 686 / 3907 4130 4130 2155 []
deepseek-r1-0528 2786 / 3010 3379 4383 2918 []
kimi-k2.5 1177 / 1714 / 1100 959 983 1265 []
glm-5.1 0 2573 2670 2591 ["none","high"]
glm-5.2 0 2843 2546 1073 ["none","high"]
glm-5.3 0 88 621 174 ["none","high"]
glm-5.3-flash 0 79 886 174 ["none","high"]
deepseek-v3.2 0 / 0 838 836 965 / 950 ["none","high"]
deepseek-v4-flash-0731 0 831 641 574 ["none","high"]
deepseek-v4-pro 0 682 619 614 ["none","high"]
deepseek-v4-pro-0813 0 805 678 590 ["none","high"]
deepseek-v4.1-flash 0 298 277 319 ["none","high"]
kimi-k2.6 0 889 936 808 ["none","high"]
kimi-k2.7-code 0 297 387 295 ["none","high"]
kimi-k3 0 418 301 499 ["none","high"]

(reasoning_content characters; / separates repeat samples.)

  • No model grades. low/medium/high is non-monotonic everywhere and mostly within
    run-to-run noise. On glm-5, low and medium returned byte-identical output at
    temperature 0 — the two values collapse to the same backend setting. So no graded levels
    are published anywhere, exactly as you asked.
  • 12 models → effort ["none", "high"], the shape you proposed for DeepSeek V4.
    "none" is a verified off state; one on-level is published because only one is
    distinguishable.
  • 3 models → []. On glm-5, deepseek-r1-0528 and kimi-k2.5, "none" does not
    suppress reasoning across repeat samples and nothing grades, so there is no caller
    control at all. This is an affirmative measurement rather than an untested default.

Two things worth recording for future syncs, both now in the file comments:

  • My earlier none claim was generalised from three models and is simply false on three
    others
    — it is per-model, which is why this is now measured per model.
  • The catalog's own reasoning_type does not predict behaviour: glm-5.3-flash is typed
    reasoning (always-on) yet honours "none", while glm-5 is typed hybrid yet ignores
    it. Neither vendor docs, catalog metadata, nor peer baselines were reliable here.

bun validate, packages/sdk tests and the packages/web build all still pass.

@github-actions

Copy link
Copy Markdown
Contributor

No actionable findings.

@github-actions github-actions Bot added the reviewer: ready Automated review found no actionable items label Sep 14, 2026
@rekram1-node
rekram1-node merged commit 88b37f3 into anomalyco:dev Sep 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

reviewer: ready Automated review found no actionable items

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants