* feat(requesty): provider sync script to get models from /v1/models/managed
Requesty has "managed" models, which are provider agnostic.
* feat(requesty): syncing all models from requesty
* fix(chutes): declare reasoning toggles instead of empty options
Every Chutes model with `reasoning = true` carried
`reasoning_options = []`, which asserts that the host exposes no
caller-facing reasoning control. That is not the case: Chutes serves
these models on vLLM and forwards `chat_template_kwargs`, so the
underlying chat templates' thinking switches are reachable over the
wire.
Ten models are switched to `[{ type = "toggle" }]`; each one is
verified twice, against the model's published chat template and
against a live request to this host. `Qwen3-235B-A22B-Thinking-2507-TEE`
keeps `[]`: its chat template exposes no thinking switch and the live
request confirms reasoning cannot be turned off.
* fix(chutes): keep authored reasoning options across sync
The toggles added in the previous commit were not durable. `buildChutesModel`
always emitted `reasoning_options: []`, and `preserveReasoningOptions` returns
early whenever the synced model defines the field at all, so the branch that
restores authored options was unreachable for this provider. The next
`bun chutes:sync` would have reset all ten models to an empty list.
Leaving the field unset in the sync restores the intended behaviour: authored
options are preserved, and reasoners with no entry yet still default to `[]`.
Verified by running `bun chutes:sync` against the live endpoint with the
toggles in place — 13 unchanged, all ten toggles intact.
The provider header and sync notes both still claimed Chutes exposes no
caller-facing reasoning control, which contradicted the model files. Both now
document the verified `chat_template_kwargs` paths and record that the control
is authored per model rather than derived from `/v1/models`.
* feat(sync): add Merge Gateway model sync
* fix(merge-gateway): document reasoning controls
* fix(sync): preserve partial Merge Gateway metadata
* fix(merge-gateway): align route metadata sync
* fix(merge-gateway): treat supports_reasoning as a positive-only signal
The public /v1/models schema does not document supports_reasoning, and the
live catalog populates it inconsistently across vendor routes: the same
model reports true on one route and false on another (claude-opus-4-6 is
false via anthropic, true via bedrock), and reasoning-only models such as
deepseek-r1 report false on their sole route. Flipping reasoning = false
from that field erased curated reasoning metadata on 42 models.
- only confirm reasoning when an available route reports
supports_reasoning = true (always accompanied by route reasoning
metadata), defaulting reasoning_options to [] when none are curated
- preserve curated reasoning metadata when routes report false or omit
the field
- restore the 42 erased reasoning entries (claude, deepseek-r1, gpt-oss,
gemma, qwen, glm, nemotron, fugu) from curated values
- re-sync against the live catalog: gemini-embedding-001 added, route
cache_read prices and display names ingested, qwen3.5-27b limits and
modalities updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore(merge-gateway): refresh model catalog
* fix(merge-gateway): align synced model metadata
* docs(sync): trim Merge Gateway notes
* fix(merge-gateway): remove stale Qwen aliases
* test(merge-gateway): document sync coverage
* fix(merge-gateway): mark chat models as non-reasoning
---------
Co-authored-by: Matthew Feroz <matt.feroz@merge.dev>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
- Fail closed with a clear error when gh label create fails, instead of
surfacing one opaque issue-create error per model
- Raise the dedupe list window to 1000 and refuse to create issues when
the window is full, since older closed titles could be truncated and
create duplicates
- Document the accepted one-time first-run issue volume for skipCreates
providers in sync.md
Alias rows expanded in parseModels exist only to update already-cataloged
alias TOMLs. Their canonical row carries the missing-model signal, so
sourceID now returns undefined for alias rows and the sync runner skips
undefined source IDs, preventing false-positive [missing-model] issues
like 'xai: <model>-latest' for models cataloged under canonical IDs.
- Shrink helper to title-based dedupe (open+closed); drop marker parser
- Opt-in openIssues (=== true); enable only under GITHUB_ACTIONS by default
- Issue-fixer skips [missing-model] titles (hand-authored metadata only)
- Docs match the leaner behavior
- Parse marker null-safely; only accept double-quoted JSON attrs
- Dedupe via labeled issue list + in-memory match (fail closed on list errors)
- Per-model create errors keep notices; ensureLabel checks exit code
- Open issues by default only in CI; require --open-issues locally
- Pass GH_TOKEN to the sync workflow step so hourly runs can create issues
Add openIssuesForMissing for providers that cannot auto-create TOMLs.
Each skipped remote model ID opens one labeled issue with a stable
title/marker so reruns do not duplicate, and the issue fixer can PR adds.
Implement the Kilo Gateway sync provider to fetch and synchronize model
metadata.
- Add `kilo` provider implementation
- Add `kilo:sync` script to `package.json`
- Update CI workflow to include `KILO_API_KEY`
- Add `kilo` to the `aggregators` group
- Update `sync.md` documentation
Replace the standalone generate-chutes.ts with a SyncProvider module
(src/sync/providers/chutes.ts) registered in the sync system, so the
Chutes catalog is kept current by the automated model sync instead of a
hand-run generator. Resync the catalog to the live llm.chutes.ai/v1/models
set (13 models).
- reasoning_options: emit [] — the API advertises a reasoning capability
but exposes no toggle/effort parameter, so there is no provider evidence
for a reasoning option.
- Qwen3-235B-A22B-Thinking-2507-TEE: carry checkpoint-specific metadata
inline instead of factoring it through the generic alibaba/qwen3-235b-a22b
base (whose context window and capabilities differ).
- Mistral-Nemo-Instruct-2407-TEE references the canonical mistral/mistral-nemo
via a base_model alias (its "unsloth" source org has no default mapping).
- Correct the inline models' release dates (Thinking-2507 -> 2025-07,
DeepSeek-V3.2 -> 2025-12).
- Document the provider under "Chutes Notes" in sync.md.