Skip to content

Neon: add claude-fable-5-1, glm-5-3-flash and grok-4-6 - #6284

Open
andrelandgraf wants to merge 5 commits into
anomalyco:devfrom
andrelandgraf:neon-add-fable-glm-grok
Open

Neon: add claude-fable-5-1, glm-5-3-flash and grok-4-6#6284
andrelandgraf wants to merge 5 commits into
anomalyco:devfrom
andrelandgraf:neon-add-fable-glm-grok

Conversation

@andrelandgraf

@andrelandgraf andrelandgraf commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Problem

Neon's AI Gateway serves claude-fable-5-1, glm-5-3-flash and grok-4-6. All three are published at https://neon.com/models and in https://neon.com/models.json, and the Neon provider on models.dev does not list them yet. The lab entries (models/anthropic/claude-fable-5-1.toml, models/zhipuai/glm-5.3-flash.toml, models/xai/grok-4.6.toml) already exist.

Change

Three override-only provider files under providers/neon/models/, each pointing base_model at the existing lab entry. Each file carries only the provider-authored fields (cost, reasoning_options, request shape) and the values where the Neon host measurably differs from the lab. Sources and measurement dates are in leading TOML comments, per the repo's comment policy.

claude-fable-5-1

  • base_model = "anthropic/claude-fable-5-1"
  • structured_output = false. json_schema on /v1/chat/completions is translated via forced tool use and this model rejects that with INVALID_PARAMETER_VALUE.
  • Effort low | medium | high | xhigh | max, driven by the Anthropic Messages control. No toggle: thinking.type = disabled is rejected. Chat Completions reasoning_effort is also rejected, so effort is the only control.
  • Cost 10 / 50 / cache_read 0.25 / cache_write 12.5, matching neon.com/models for this id. The sibling Neon claude-fable-5 file lists cache_read = 1; this id publishes 0.25 and the file follows the published rate.

glm-5-3-flash

  • base_model = "zhipuai/glm-5.3-flash", display name = "GLM-5.3 Flash"
  • Effort low | high | max, the lab/peer baseline. none is rejected. thinking.type = disabled returns 200 but still emits reasoning_content, so the file has no toggle: the control does not turn reasoning off.
  • Cost 0.15 / 0.5 / cache_read 0.03. These are list rates; first-party zhipuai currently publishes a 50% promo that Neon does not apply.
  • limit.context = 1_048_576 per neon.com/models. The lab entry has 1_000_000.

grok-4-6

  • base_model = "xai/grok-4.6"
  • Effort low | medium | high | xhigh, the lab/peer baseline. max is rejected.
  • No [cost]. Neon has not published a rate for this id and the first-party xAI prices are a different host's rates.
  • limit.output = 524_288. The gateway names the number itself: 'max_tokens' (100000000) exceeds model maximum (524288).
  • [provider] overrides: npm = "@ai-sdk/openai", api = "${NEON_AI_GATEWAY_BASE_URL}/openai/v1", shape = "responses". POST /openai/v1/responses returns 200. Chat Completions also returns 200 and accepts reasoning_effort.

Sources

Verification

bun validate passes on this branch.

For your attention

  • grok-4-6 ships without a price. Neon has not published a rate for it yet. The file gains [cost] when neon.com/models does.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/neon/models/grok-4-6.toml:5 - Check: Reasoning options must not pair toggle with effort that already includes none. Why: reasoning_options has both { type = "toggle" } and effort values including "none", which AGENTS.md forbids (off is either effort=none or a separate toggle, not both). First-party xAI and peers use effort-only low|medium|high|xhigh with no disable. Action: Drop toggle and "none"/"minimal" unless Neon-specific live evidence shows a separate on/off control and those extra levels; match lab/peers (low|medium|high|xhigh) or document verified host-only deltas without dual off semantics.
  • [high] [violation] providers/neon/models/glm-5-3-flash.toml:6 - Check: Every toggle needs a leading top-of-file wire-path comment. Why: toggle is present but there is no leading comment documenting the exact request field (mid-line # API: … comments are not the required top-of-file form and can be stripped on sync). Action: Add a leading header such as # Toggle: thinking.type = enabled|disabled (and the effort wire path) above the first key.
  • [high] [violation] providers/neon/models/grok-4-6.toml:5 - Check: Every toggle needs a leading top-of-file wire-path comment. Why: Same as above: toggle without a leading wire comment. Action: If a real toggle remains after fixing the none+toggle rule, add a leading # Toggle: … comment; otherwise remove toggle entirely.
  • [medium] [violation] providers/neon/models/glm-5-3-flash.toml:3 - Check: After base_model, keep only provider-specific fields and real deltas — do not restate or invent lab identity facts. Why: open_weights = true overrides lab models/zhipuai/glm-5.3-flash.toml (open_weights = false). Open-weights is a model fact, not a Neon serving detail; release_date/last_updated (2026-08-28) also diverge from the lab (2026-08-26) without a host-specific reason. Action: Remove open_weights, release_date, and last_updated from the Neon file (keep inheritance). If the weights are actually open, fix the lab entry instead. Keep name only if Neon’s display string must differ.
  • [medium] [violation] providers/neon/models/grok-4-6.toml:2 - Check: Override-only provider files must not restate lab dates. Why: release_date/last_updated (2026-08-24) differ from lab xai/grok-4.6 (2026-08-12) and are not Neon-specific serving metadata. Action: Remove both date fields and inherit from base_model.
  • [medium] [possible mistake] providers/neon/models/glm-5-3-flash.toml:7 - Check: Relay reasoning baseline = lab + same-surface peers; extra levels need host proof. Why: First-party zhipuai/zai and common relays use effort low|high|max (often no toggle / always-on). This entry adds toggle plus minimal|medium|xhigh, which is a much wider set than the lab baseline. Action: Confirm each accepted value and the disable path on Neon; if unproven, narrow to the lab/peer set (low|high|max, and toggle only if disable truly works on this host).

Mirror the neon.com/models entries. Grok has no Neon [cost] yet. Fable 5.1 structured_output is false; GLM list prices are not the first-party promo.
Grok off is effort=none, so the thinking toggle cannot sit beside it. GLM keeps toggle plus the measured effort list, with the wire path at the top of the file.
@andrelandgraf
andrelandgraf force-pushed the neon-add-fable-glm-grok branch from 1f3ab47 to 460acac Compare September 4, 2026 17:42
…ranslator

The public PR body already uses "the gateway"; keep the file comment matched.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/neon/models/glm-5-3-flash.toml:1 - Check: Reasoning options must match this host’s real controls and the lab/same-surface baseline; toggle only when on/off is a separate wire control. Why: The file claims both a thinking.type toggle and that the model is “thinking-only” (none rejected). Lab + first-party peers (providers/zhipuai, providers/zai, OpenRouter, DeepInfra, Nebius, Ofox) use effort low|high|max with no toggle because thinking cannot be disabled. Neon also invents minimal/medium/xhigh beyond that baseline. Action: Resolve the contradiction: if Neon cannot disable thinking, drop toggle and author the lab effort set (or only extra levels proven to select a distinct tier on Neon). If Neon truly exposes on/off, keep toggle + graded effort (no none), document the wire path, and cite live evidence that off works and each extra effort value is meaningful—not merely accepted.
  • [high] [possible mistake] providers/neon/models/grok-4-6.toml:1 - Check: Relay reasoning options = lab + same-surface peers; do not mix chat-completions and Responses control surfaces. Why: First-party xAI and peers use effort low|medium|high|xhigh with no none/minimal (reasoning cannot be turned off). Neon adds none and minimal, while the leading comment describes chat-completions reasoning_effort but [provider] sets shape = "responses" (Neon’s Responses path is otherwise only on GPT entries). Action: Align options with the actual Neon route for this model. If Responses is correct, document the Responses wire field and only levels that route accepts with real effect. If chat completions is correct, drop shape = "responses" (unless proven) and justify any none/minimal beyond lab/peers with host evidence—not acceptance alone.
  • [medium] [violation] providers/neon/models/glm-5-3-flash.toml:3 - Check: After base_model, only real host deltas; lab-owned facts stay on the lab entry. Why: open_weights = true overrides models/zhipuai/glm-5.3-flash.toml (open_weights = false). Weight openness is a model property, not a Neon hosting delta; other Neon open_weights overrides are on models whose lab entry is already open-weight. Action: Remove the provider override. If GLM-5.3-Flash weights are public, fix models/zhipuai/glm-5.3-flash.toml (and peers) instead of a Neon-only flip.
  • [medium] [violation] providers/neon/models/claude-fable-5-1.toml:14 - Check: base_model_omit only drops keys that should not apply after merge on this host. Why: Omitting knowledge because neon.com/models does not republish a cutoff strips lab metadata. Knowledge is about the model, not Neon’s catalog. Sibling providers/neon/models/claude-fable-5.toml does not omit it. Same pattern on providers/neon/models/grok-4-6.toml. Action: Remove base_model_omit = ["knowledge"] from both files so the lab cutoff is inherited.
  • [low] [possible mistake] providers/neon/models/glm-5-3-flash.toml:20 - Check: Modality overrides must reflect real host support, not untested assumptions. Why: Lab input is text/image/video/pdf. The file narrows to text/image while the comment says video and pdf “were not measured,” so unsupported status is unproven. Action: Either measure and keep the narrower list only if video/pdf fail on Neon, or drop the [modalities] override and inherit the lab set until disproven.

glm-5-3-flash thinking.type=disabled still returns reasoning_content.
Grok off is effort=none. Inherit lab knowledge and modalities.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/neon/models/glm-5-3-flash.toml:7 - Check: Reasoning options must follow the lab + same-surface peer baseline; extra effort values need host proof of meaningful effect, not a near-full enum dump. Why: First-party providers/zhipuai/models/glm-5.3-flash.toml and established relays (OpenRouter, DeepInfra, Ofox, Vercel) use ["low", "high", "max"] for this always-on thinker. The Neon entry lists minimal/medium/xhigh as well—values the lab generation treats as aliases or does not expose—so callers may be offered controls that do not actually change behavior. Action: Either narrow reasoning_options to ["low", "high", "max"], or keep the wider list only with concrete Neon evidence that each extra level is accepted and changes reasoning (not mere HTTP 200 / alias collapse), and document that in the leading comment.
  • [medium] [possible mistake] providers/neon/models/grok-4-6.toml:6 - Check: Relay effort must match lab/peer controls unless this host truly exposes additional levels with real effect. Why: First-party xAI and peers (OpenRouter, Ofox) author ["low", "medium", "high", "xhigh"] and treat Grok 4.6 as not disableable. This file adds none and minimal. If none is only accepted on the wire (or does not turn reasoning off), the catalog will advertise a false off control; if minimal is an inert alias, it is the same full-enum anti-pattern. Action: Verify on Neon that reasoning_effort=none actually disables reasoning and that minimal is a distinct graded level; otherwise drop them and match ["low", "medium", "high", "xhigh"] (keeping any measured host rejection of max in the comment).
  • [low] [possible mistake] providers/neon/models/grok-4-6.toml:16 - Check: Per-model [provider] / shape = "responses" must match how Neon actually serves the model. Why: On Neon, npm = "@ai-sdk/openai" + shape = "responses" is used only for OpenAI GPT entries today; default provider API is chat-completions. Forcing Grok onto the Responses dialect will mis-route clients if the gateway still serves it on /v1/chat/completions only. Action: Confirm Grok 4.6 is natively available on ${NEON_AI_GATEWAY_BASE_URL}/openai/v1 Responses; if not, remove the [provider] block (or set the dialect that Neon documents for this model).
  • [low] [possible mistake] providers/neon/models/claude-fable-5-1.toml:15 - Check: Neon cost must come from Neon pricing, not a first-party copy. Why: cache_read = 0.25 matches Anthropic’s first-party Fable 5.1 file, while the existing Neon claude-fable-5 peer uses cache_read = 1. If Neon’s catalog still prices Fable cache reads like 5.0, this understates cost. Action: Confirm input/output/cache_read/cache_write against neon.com/models (or Neon pricing docs) for claude-fable-5-1 and adjust if the peer-style cache read applies.

…d effect.

Keep grok on Responses; keep Fable cache_read at the neon.com/models rate.
@github-actions

github-actions Bot commented Sep 5, 2026

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 5, 2026
@andrelandgraf andrelandgraf changed the title Neon: add claude-fable-5-1, glm-5-3-flash, grok-4-6 Neon: add claude-fable-5-1, glm-5-3-flash and grok-4-6 Sep 5, 2026
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.

1 participant