anomalyco / anomalyco/models.dev

Add a sync module for neuralwatt (public, metadata-rich /v1/models)

Open
#7,483 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
6.9k
Forks
1.7k
Avg merge
3h 21m
Merged PRs (30d)
873

Description

Context

The neuralwatt provider entry is hand-authored, and it drifted: #7482 had to add 8 missing models (glm-5.3-flash family, deepseek-v4.1-flash family, deepseek-v4-flash-speed, two qwen flex tiers), deprecate 8 retired ones (GLM-5.2 family, deepseek-v4-pro), and fix two stale output caps — all detectable from Neuralwatt's own catalog endpoint.

The endpoint is unusually sync-friendly

GET https://api.neuralwatt.com/v1/models is public (no auth) and returns per-model metadata covering nearly everything the catalog tracks:

  • metadata.pricing: input_per_million, output_per_million, cached_input_per_million (USD/MTok), service_tier (standard/flex), flex_discount_multiplier (0.65)
  • metadata.capabilities: tools, json_mode (→ structured_output), vision, reasoning, reasoning_effort, streaming, system_role
  • metadata.reasoning: mandatory, default_enabled, supported_efforts, default_effort, accepted_efforts, effort_aliases — maps directly to reasoning_options effort values
  • metadata.limits: max_context_length, max_output_tokens, max_images
  • metadata.deprecated + deprecated_message (lifecycle signal)
  • metadata.huggingface_id, display_name, description

Suggested shape

Follow the public-endpoint precedent of chutes.ts / ovhcloud.ts (no secrets needed):

  • Pricing, limits, capabilities, and lifecycle (deprecated flag) are endpoint-authoritative.
  • base_model resolution via huggingface_id/family against models/; unresolved IDs skip with a missing-model issue rather than creating inline entries.
  • reasoning_options effort values from reasoning.supported_efforts. budget_tokens needs a policy call: portal docs say thinking_token_budget is accepted provider-wide, but deepseek-v4-flash rejects it with a 400 — so derive per-model or preserve authored values.
  • Absence from the endpoint (or deprecated: true) → status = "deprecated" for previously-cataloged models.
  • ID normalization: the API mixes separators (deepseek-v4_flash-speed vs deepseek-v4.1-flash); catalog convention is hyphens.
  • -flex IDs are the same underlying model at the flex tier and should resolve to the base model's lab metadata.

Registering in packages/core/src/sync/index.ts would give neuralwatt the hourly automation PR like other synced providers, and this class of drift (new flash/flex variants appearing weeks before anyone hand-PRs them) would stop happening.

Happy to take this on if maintainers want it.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the sync implementations in chutes.ts and ovhcloud.ts, then inspect packages/core/src/sync/index.ts and the existing entries under models/. Trace how endpoint metadata, base-model resolution, normalization, and deprecated models are represented. Done means neuralwatt is registered for recurring syncs and the endpoint's catalog changes produce correct model metadata and lifecycle updates.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
data, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.