53 Commits

Author SHA1 Message Date
Ismail Ghallou 82345e0bf3 feat: split LLM Gateway into two provider catalogs (#4011)
* feat: split LLM Gateway into two provider catalogs

Renames the existing llmgateway provider to "DevPass (LLM Gateway)" (id
and models unchanged: the aggregated, auto-routed root-model catalog) and
adds llmgateway-providers ("LLM Gateway"): one entry per upstream
provider mapping, addressed as provider/model-id, synced from
/v1/models?mapped=true. The catalog starts empty and is populated by the
scheduled sync automation; the sync refuses to run against a deployment
without the mapped view so it fails loudly instead of syncing wrong ids.

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* fix: apply deployment data on mapped factored entries

Addresses the PR review: brand-new factored mapped entries now carry the
mapping's own capability flags (attachment/tool_call/reasoning and
structured_output) as overrides, translate the deployment's declared
reasoning_efforts into reasoning_options instead of stamping [], prefer
the gateway's served max_output over inherited/authored output limits,
and only fall back to context when the base metadata declares no output.
Adds unit tests for mapped factoring, capability overrides, max_output
preference, and the unprefixed-id refusal guard.

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* chore: seed the llmgateway-providers catalog

The dev branch now rejects providers with zero models, so the empty
.gitkeep-anchored catalog no longer validates. Seed it with a small
representative set generated by the sync (factored, full, duplicate
deployments of one model, capability deltas); the scheduled sync fills
in the rest once the gateway's mapped view is live.

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* fix: honor base and sibling reasoning data on mapped sync

Round 2 of review feedback:
- Factored resyncs no longer stamp context as limit.output when the
  gateway omits max_output and the base declares an output to inherit;
  the served max_output still wins whenever reported (creates and
  resyncs), and reasoning_options now refresh from deployment efforts.
- A deployment whose only accepted effort is "none" is a plain on/off
  switch, so it translates to a toggle (matches the lab's control).
- When a deployment declares no efforts, mapped entries reuse the
  aggregated llmgateway catalog's curated reasoning_options for the
  same root model instead of ending up with []; a curated [] counts as
  unknown so a bad first stamp is not sticky. The runner also stops
  stamping [] onto factored reasoners whose base metadata already
  declares reasoning_options (it would shadow the base's controls).
- perplexity added to the canonical prefixes so Sonar models factor
  against their lab metadata; the sonar-pro seed is now override-only.

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* fix: harden mapped sync guards and seed curation

Round 3 of review feedback:
- Both LLM Gateway syncs now reject an empty (or fully filtered)
  response instead of authoritatively deleting the catalog through the
  delete-missing pass; the every() prefix guard alone passed on [].
- A vision-less deployment also overrides modalities on factored
  creates, so attachment=false can no longer coexist with inherited
  image input (sonar-pro seed regenerated accordingly).
- Mapped entries copy the interleaved reasoning side-channel from the
  aggregated llmgateway catalog when the deployment reasons (same wire
  surface); glm-5.1 and kimi-k2.6 seeds now carry it.
- Toggle seeds carry the required leading wire-path comment.
- gpt-5.5 seeds author the 272k context pricing tier so resync
  preserves it, matching the first-party and aggregated entries.

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* fix: never author zero limits, enforce vision on modalities

Round 4 of review feedback:
- A missing/zero context_length is no longer written as limit.context=0:
  factored entries leave context unset and inherit the base, and
  unfactored creates without a positive served context are skipped
  (reported via sourceID) instead of publishing unusable limits. Applies
  to both the aggregated and mapped builders.
- vision=false now forces non-image input modalities from the mapping
  itself instead of trusting the model-level architecture, on both the
  factored and unfactored create paths (and the existing-full fallback).

Claude-Session: https://claude.ai/code/session_017pReWhniXJcDL9aiQHqoFQ

* fix: scalable logo, require one mapping per entry

Review round 5: drop the fixed width/height from the new provider logo
(AGENTS.md blocker), and fail the mapped sync loudly when a kept model
does not carry exactly one providers[] mapping instead of letting the
builder silently fall back to noisy supported_parameters defaults.

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF

* fix: inherit lab descriptions, author toggle headers

Review round 6: mapped factored resyncs no longer stamp a synthesized
describeModel blurb as a sticky description override (unset keeps
inheriting the lab text, matching merge-gateway/cortecs), and mapped
sync writes now author the required leading wire-path comment on files
that carry a toggle reasoning control via a new optional header on the
translateModel result (an existing on-disk header always wins).

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF

* fix: keep mapping flags authoritative on resyncs

Review round 7: mapped existing-entry resyncs (factored and full) now
apply the deployment mapping's reasoning/vision/tools/structured-output
flags with the same authority as creates, so the written booleans and
the reasoning_options derived from them always move together and drift
self-heals hourly; prior curation only fills in where the mapping is
silent. Also documents in the together-ai/kimi-k2.6 seed header why
that pin is intentionally weaker than Together's first-party row (the
gateway serves it with tools/JSON off and a 32k output cap per its own
e2e'd catalog mapping).

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF

* fix: realign vision modalities in both directions

Review round 8: mapped resyncs no longer keep a stale text-only
modalities override once the deployment's vision returns — a declared
vision=true clears the override on factored entries (base image/pdf
inputs inherit again) and recomputes from the served architecture on
full entries, mirroring how vision=false already strips them; only a
silent mapping leaves curated modalities untouched.

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF

* fix: local perplexity resolution, no zero limits

Review round 9: drop the perplexity entry from the shared
CANONICAL_PROVIDER_PREFIXES (it would silently start factoring other
hosts' standalone perplexity files) — the llmgateway sync now resolves
lab IDs through resolveModelMetadataBaseModel, whose exact models/ path
match covers perplexity without touching other providers. Full-row
resyncs in both builders no longer fall back to the zero/absent
reported context: authored limits only ever carry known-positive
values, an authored 0 on disk counts as unusable, and a full row with
no usable context anywhere fails loudly (skipping would hand the file
to the delete-missing pass).

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF

* fix: merge deployment efforts with curated controls

Review round 10: deployment reasoning_efforts now own only the
effort/toggle surface — curated non-effort controls such as
budget_tokens (the same host's $.reasoning.max_tokens path, mirroring
DigitalOcean's sync) survive from the existing file or the aggregated
sibling instead of being wiped on every resync. Mapped creates also
seed cost.tiers from the aggregated sibling's curated tiers, since the
gateway API exposes none and the bulk sync would otherwise author
tiered models at flat long-context rates; authored tiers still win on
resync.

Claude-Session: https://claude.ai/code/session_0131ZfUnTfJrCzygw3wE4bNF
2026-08-20 13:39:11 -05:00
John Costa 465d15fb33 feat(requesty): syncing script and all models added (#3856)
* 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
2026-08-04 08:22:23 -05:00
Aiden Cline e45188c568 feat(sync): auto-merge safe catalog updates (#3958)
* feat(sync): auto-merge safe catalog updates

* fix(sync): count model additions and deletions directly

* fix(sync): require review for reasoning changes

* fix(sync): disable unsafe auto-merge before push

* fix(sync): harden auto-merge check output
2026-08-03 14:34:12 -05:00
c99e 22aefb5438 feat(tinfoil): sync pricing from public catalog (#3868)
Co-authored-by: OpenAI Codex <noreply@openai.com>
2026-07-30 21:55:19 -05:00
Matthew Feroz e6d37bdcae feat(sync): add Merge Gateway model sync (#3249)
* 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>
2026-07-29 21:58:24 -05:00
huggix bddb089b85 feat(sync): add safe NanoGPT model catalog sync (#3342)
* Add safe NanoGPT model sync provider

* Address NanoGPT canonical model review

* Fix remaining NanoGPT canonical variants

* Harden NanoGPT canonical model sync

* Preserve NanoGPT overrides during factoring
2026-07-29 10:24:57 -05:00
Gregory ee07b91591 feat(ambient): sync model catalog from API
Add an Ambient sync provider that maps the OpenRouter-shaped catalog through the
shared builder. Skip catalog entries with is_ready=false so only served models
are generated, and set deleteMissing=false with skipped/missing notices so a
transient catalog omission retains local files instead of deleting them. Emit
reasoning_options = [] for reasoning models, since Ambient exposes no reasoning
control, rather than silently inheriting the base model's options.
2026-07-11 13:38:19 +02:00
Aiden Cline 67c29c1b6d Merge branch 'dev' into add-kilo-sync 2026-07-10 10:33:47 -05:00
Levi Hadad 4d8931d4af Merge branch 'dev' into add-kilo-sync 2026-07-07 15:12:42 +03:00
Daniel Barnes cf68aae418 Merge remote-tracking branch 'upstream/dev' into dacbd-wandb-update 2026-07-06 15:38:47 -07:00
Aiden Cline 24b57545c3 feat(sync): migrate DigitalOcean model sync 2026-07-06 11:01:07 -05:00
Aiden Cline 281cb7db5c feat(sync): add Anthropic model sync 2026-07-04 16:22:50 -05:00
Levi Hadad eb02a4d5fb feat(sync): add kilo provider
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
2026-07-02 17:31:56 +03:00
Daniel Barnes 0ca628c9f8 Merge branch 'dev' into dacbd-wandb-update 2026-06-27 23:52:06 +09:00
Aiden Cline 4e02d80a98 Merge remote-tracking branch 'origin/dev' into pr-2739
# Conflicts:
#	packages/core/src/sync/index.ts
2026-06-26 22:29:19 -05:00
thestreamcode e25bf46ee6 chore(chutes): wire catalog into the model sync system
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.
2026-06-27 00:53:52 +02:00
Thach Nguyen 1163dacba2 feat(deepinfra): automate model catalog sync
Add a DeepInfra sync provider mirroring the existing direct-provider pattern
(Baseten/Venice/xAI), keeping the catalog current automatically from the public
deploy catalog (https://api.deepinfra.com/models/list?type=text-generation).

Derived data:
- pricing: cents/token -> USD per million; cache_read from the cached-rate
  multiplier; context-based tiers parsed from pricing.full (base + cost.tiers,
  supporting an unbounded final tier), falling back to the flat price if the
  string is unrecognized
- context window from max_tokens
- status="deprecated" only when the deprecated unix timestamp is in the past
  (a future timestamp is a scheduled deprecation; the model is still served)

Capabilities (tags only turn a feature ON; an explicit `non-reasoning` tag is
the sole negative signal — otherwise the value is inherited from models/
metadata or the curated value, never clobbered with a default):
- tools -> tool_call
- structured-output -> structured_output (the generic `json`/JSON-mode tag does
  not count)
- reasoning / can-disable-reasoning -> reasoning; can-disable-reasoning also
  surfaces a `toggle` reasoning option
- multimodal/input-audio/input-video merge into existing modalities (never
  dropping curated extras such as video)

Closed-weight passthrough families (anthropic/* Claude, google/gemini-*) are
excluded; open google/gemma-* models are kept.

Wiring: register deepinfra in sync/index.ts (providers map + direct group) so
the hourly sync-models workflow picks it up; add optional DEEPINFRA_API_KEY to
the workflow env and a deepinfra:sync npm script. deleteMissing: false — models
dropped from the API are retained and flagged, never auto-deleted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 22:53:00 +00:00
Daniel Barnes c9faae0647 sync update 2026-06-26 09:26:55 +09:00
Luca Steeb 9629a104d5 feat: add llmgateway.io model sync provider
Add a sync provider for the LLM Gateway (llmgateway.io) aggregator,
mirroring its public /v1/models catalog into providers/llmgateway.

The gateway exposes an OpenRouter-shaped response, but its
supported_parameters and modality data are noisy (it omits "tools" for
flagship models yet lists "temperature" for ones marked temperature=false).
So the gateway is treated as authoritative only for the volatile,
gateway-specific data — cost and served limits — while capability and
modality fields stay curated (preserved from the existing entry, which a
factored model inherits from its base). Only text-output models are synced.

- packages/core/src/sync/providers/llmgateway.ts: new provider
- packages/core/src/sync/index.ts: register in providers + aggregators
- package.json: add llmgateway:sync script
- .github/workflows/sync-models.yml: optional LLMGATEWAY_API_KEY

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 17:01:30 +01:00
Celina Hanouti db8d4aee45 feat(sync): add Hugging Face inference providers sync
Mirror the existing daily model-catalog sync for the Hugging Face
Inference Providers router (https://router.huggingface.co/v1/models),
modeled on the baseten provider.

The router is an aggregator: each model is served by several inference
providers with their own pricing, context window, and capabilities, and
requests are routed to the fastest one. The provider collapses them into
the route a request would actually take -- pricing and context from the
highest-throughput provider, with tool/structured-output support taken
from any provider since a caller can pin a slower one.

New models are created via canonical base_model resolution (the same
resolveCanonicalBaseModel/factorBaseModel path baseten uses); unmappable
or unpriced models are skipped and reported in a notice. For now the sync
only creates new models -- existing curated TOMLs are left untouched via
sameModel -- and never deletes (deleteMissing: false).

HF_TOKEN is optional; the router model list is public.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PzQSYd3VwBK5NAsC9dYmSw
2026-06-18 16:48:44 +02:00
Aiden Cline 25c3d6cd23 [venice] Migrate generator to sync runner 2026-06-10 10:58:12 -05:00
Aiden Cline f96381a34d feat(sync): add Baseten model sync 2026-06-08 22:51:22 -05:00
Aiden Cline a700d92235 refactor(sync): migrate Vercel to shared runner 2026-06-06 18:49:36 -05:00
Adam f6c6f04367 feat(models): add model metadata (#1974)
* feat(models): add model metadata

* feat(models): rename model metadata namespaces
2026-06-03 15:13:54 -05:00
Aiden Cline 31e56480b4 chore(sync): add cloudflare workers ai sync 2026-05-20 16:55:29 -05:00
Aiden Cline 5ee955297a sync: drop vercel catalog updates 2026-05-18 19:07:14 -05:00
Aiden Cline d65a862533 sync: centralize aggregator model updates 2026-05-18 12:12:15 -05:00
Aiden Cline c2c5cc8f21 add sync script for openrouter, sync openrouter models 2026-05-15 10:00:32 -05:00
Gregory ff7eddcb70 feat: add Ambient provider with GLM-5.1 and Kimi K2.6
Adds the Ambient inference provider (api.ambient.xyz) with an initial
catalog of GLM-5.1 and Kimi K2.6, plus a generator script that pulls
from /v1/models so pricing and limits stay in sync with the upstream API.

Run `bun run ambient:generate` to refresh model TOMLs.
2026-05-13 11:30:45 -04:00
Rohit Agrawal bab01dd9ab refactor: move databricks generate to packages/core/script following repo conventions
Addresses review feedback by removing AI SDK dependencies from package.json
and aligning with the Vercel/Helicone/Wandb pattern.

- Move generate-databricks.ts to packages/core/script/
- Add databricks:generate to root scripts
- Remove smoke test and runtime filtering (catalog should reflect what the
  upstream API exposes; AI SDK compatibility is a downstream concern)
- Add --dry-run and --new-only flags
- Merge with existing TOMLs instead of nuking them; warn about orphans
- Restore databricks-gemini-3-pro and databricks-gemini-3-1-pro
- Drop @ai-sdk/openai-compatible, ai, zod from root dependencies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:54:04 -04:00
Rohit Agrawal bdaae956af feat: add AI SDK compatibility test to generate script, remove incompatible models
Generate script now smoke-tests each model with streamText after writing TOMLs
and removes any that return empty responses (incompatible with @ai-sdk/openai-compatible).
Removes databricks-gemini-3-pro and databricks-gemini-3-1-pro which return content
as array with thoughtSignature that the AI SDK cannot parse.

Also adds test-databricks.ts for standalone smoke testing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:53:44 -04:00
Aiden Cline 6139fb8c69 Merge pull request #1598 from mugnimaestra/feat/chutes-generate-script
feat(chutes): add API-driven model generator script
2026-05-11 09:30:38 -05:00
Mike Prasuhn 5df9293314 Add script to generate/update Digitalocean models 2026-05-07 15:28:07 -04:00
Muhammad Mugni Hadi 4717c67054 feat(chutes): add API-driven model generator script
Add generate-chutes.ts that fetches models from https://llm.chutes.ai/v1/models
and generates/updates TOML files, following the same pattern as generate-vercel.ts.

Supports --dry-run, --new-only, and --keep-orphans flags. Auto-deletes TOML files
for models no longer in the API (with empty directory cleanup).

Preserves manually-set fields (family, knowledge, interleaved, status) when merging
with API data. Also syncs current models from the API.
2026-04-26 06:51:16 +07:00
wenbindu 05242f68d4 add deepseek new moel 2026-04-24 12:06:19 +08:00
Aiden Cline 9dbafb81fa add script 2026-04-17 14:57:41 -05:00
Daniel Barnes 2dab141166 initial script & model updates 2026-03-12 13:01:35 +09:00
Sylvie Zhang ea41cbc4ba draft script 2026-02-11 11:48:32 -08:00
Aiden Cline cfde47ca60 Revert "Update Amazon Bedrock models to add cross-region inference and remove deprecated models"
This reverts commit bc58036964.
2026-02-04 12:11:29 -06:00
Burak Varlı bc58036964 Update Amazon Bedrock models to add cross-region inference and remove deprecated models
This change adds a new script to validate all Amazon Bedrock models by making a simple inference request using model identifiers.
As a result of that script, made some changes to make sure all model identifiers are usable via Amazon Bedrock:
- Added cross-region inference for various models including DeepSeek, Llama, Amazon Nova
- Removed some reprecated/EoL'd models including Amazon Titan, Claude v2, Cohere Command Light
2026-02-03 13:43:07 +00:00
Aiden Cline 21bd51da8f bump sst version 2026-01-08 23:20:19 -06:00
Aiden Cline 7a9c0a9591 Revert "Merge pull request #543 from sst/revert-536-VeniceUpdate"
This reverts commit 16f9f608de, reversing
changes made to 9b0ae67d59.
2025-12-20 12:06:09 -06:00
Aiden Cline 6a8adee790 Revert "Venice Autogenerate Script" 2025-12-20 10:49:49 -06:00
dpuyosa 5034aacb9b Add Venice autogenerate script.
Add Venice logo.
2025-12-18 15:16:46 +01:00
Hammad Shami 76e0508747 add helicone models + helicone model generation script 2025-10-23 13:43:27 -07:00
Frank dfbbb9e1ac ci: fix 2025-10-14 12:10:05 -04:00
Frank 13b6ab800e update cache read cost for gpt-5 models 2025-08-08 17:09:56 -04:00
Dax Raad 2e3f718c40 enable worker logs 2025-07-31 23:31:22 -04:00
Dax a270820e87 Rework (#12)
* sync

* sync

* sync
2025-06-17 19:52:16 -04:00
Frank d1ffc31bba sync 2025-06-05 14:09:59 -04:00