Spaces:
Paused
Paused
Commit History
-
refactor(env): stop publishing credential file locations
crispasr integration +1: Claude Opus 5 (1M context)The README spelled out the exact .env lookup chain, and the loader hardcoded a sibling project's path — both public, and both a map of where to find credentials on a developer machine. The sibling path also leaked a private project name into a public repo. Locations now come from PROVIDERS_ENV_FILES instead of being baked in: the project .env is read first (so it can itself set that variable and point at files held outside the repo), then each listed file. Behaviour is otherwise unchanged — every existing file is read, earlier entries win, and the real environment is never overwritten. Docs and comments now name the mechanism, not any path. Also drops the sibling-path references that predated this branch in the OpenRouter and Nscale headers. Note for anyone who relied on the implicit sibling lookup: set PROVIDERS_ENV_FILES to that file and it works as before. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>764c374 -
feat(nscale): accept NSCALE_TOKEN, and read ~/.env so it is found
crispasr integration +1: Claude Opus 5 (1M context)Nscale has been empty in the published data since it was added — its catalog is only reachable through the authenticated API, and the key was never available to the fetcher. Two reasons, both fixed here. The variable name: Nscale's console issues the credential as NSCALE_TOKEN, while the fetcher only looked for NSCALE_API_KEY. Both are now accepted, the alias kept so any existing setup or CI secret of that name still works, and the health check's keyEnv now takes a list so "any one of these" counts as present rather than reporting a false SKIP. The location: load-env only read the project .env and ../AIToolkit/.env, so a credential shared across projects in ~/.env was invisible. It now reads every candidate that exists — project, AIToolkit, then home — instead of only the first one found, so a key present solely in the home file is picked up even when a project .env exists for other keys. Earlier files still win, a variable already set in the real environment is never overwritten, an…108f0f3 -
fix(groq): re-source pricing from console docs, replacing the dead scraper
crispasr integration +1: Claude Opus 5 (1M context)groq.com/pricing no longer exists — it 302s to the marketing homepage, so the scraper that parsed <table class="type-ui-1"> off it had been silently returning 0 models (fetch-providers keeps last-good on an empty result, so the data file went stale rather than empty, and only the health check noticed). Pricing moved to console.groq.com/docs/models, which is a React Server Components route: the figures are not in the served markup but in the RSC flight payload, pushed as JSON string literals via self.__next_f.push. Decoding those and reading each "<model-id>-price" block recovers all 11 publicly priced models across three pricing shapes — per-1M-token input/output, ASR "per hour" (converted to price_per_minute), and TTS "per 1M characters". Groq has moved llama-3.1-8b-instant, llama-3.3-70b-versatile and MiniMax to "Contact Sales"; those are skipped rather than invented. Note this means aggregators can still quote a Groq rate (OpenRouter routes Groq Llama at $0.59/$0.79) that Groq its…81186dc -
feat: add EUrouter and HostYourAI as EU-sovereign providers
crispasr integration +1: Claude Opus 5 (1M context)Both are Dutch (B.V.) per-token inference routers on EU infrastructure, and both expose a public, keyless source — so the existing daily update-providers workflow picks them up with no secrets and no workflow change. EUrouter (api.eurouter.ai/v1/models, 135 priced models) OpenRouter-shaped public catalog. Prices are per single token as decimal strings with a per-model currency, so they are scaled to per-1M and the currency is carried through rather than converted. A minority of routes sit on AWS Bedrock / Microsoft Foundry and are Cloud Act-exposed despite the EU controller, so `eu-endpoint` is withheld from those models; the upstream is recorded in `provider_upstream` either way. Catalog entries with no pricing block (12) are skipped rather than published as free, and a `pricing.discount` other than the constant 1 now warns, since that would silently decouple listed prices from billing. HostYourAI (hostyourai.com/pricing, 30 models) The per-model price tables ar…795835b
-
ci: health-check OpenRouter unconditionally (its /models is public)
CrispStrobe +1: Claude Opus 4.8 (1M context)OpenRouter's catalog works without a key, so don't gate the check on OPENROUTER_API_KEY — otherwise CI (which has no secret) skips it and a broken fetcher would go unnoticed. Nscale remains the only keyed check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>61d1a28 -
fix(providers): make Nebius & Requesty keyless (no API key needed)
CrispStrobe +1: Claude Opus 4.8 (1M context)Nebius: the public /endpoints page loads pricing from a CSRF-protected proxy — GET /proxy/inference/private/v1/models_info — with no API key. Fetch a CSRF cookie from the app, replay it as Cookie + x-csrf-token, and parse the richer models_info payload (huggingface_url, size_b, per-million flavor pricing). Replaces the auth-gated /v1/models approach. (Verified the public source with a headless browser.) Requesty: /v1/models is public — drop the mandatory key (still sent if present for rate limits). Also fix capability detection: the field is supports_tool_calling, not supports_tool_calls, so tool caps were never set (now tagged on 304 models). Both drop from the keyed set in the health check; remove NEBIUS_API_KEY from the update workflow. Only Nscale still requires a secret. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>43d89fe -
fix(fetch): keep last-good data when a fetcher returns 0 models
CrispStrobe +1: Claude Opus 4.8 (1M context)A keyed fetcher returns [] when its API key is absent, and a broken scraper can too. Previously that empty list overwrote the provider's models, wiping good data (e.g. Requesty/Nebius when their secret isn't set in CI). Now an empty result is skipped and existing data is kept; the health-check workflow reports genuine breakage separately. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>d047b87 -
ci: add provider health-check workflow to catch broken fetchers
CrispStrobe +1: Claude Opus 4.8 (1M context)scripts/healthcheck.js runs every fetcher and fails if one returns too few models or throws — the failure mode that silently broke the Nebius and Mistral scrapers. Keyed providers are neutral (SKIP) when their secret is absent. healthcheck.yml runs it on PRs and pushes touching scripts/**, on a daily schedule, and on demand; a second job verifies the app builds. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>e806ac6 -
feat(providers): add OVHcloud, STACKIT, Nscale; fix Mistral & Nebius fetchers
CrispStrobe +1: Claude Opus 4.8 (1M context)New EU/EEA providers: - OVHcloud AI Endpoints (FR) — scrapes embedded Next.js catalog payload - STACKIT AI Model Serving (DE) — scrapes docs catalog, category→price map - Nscale Serverless (UK/Norway) — OpenAI-compatible /v1/models (NSCALE_API_KEY) Fetcher fixes (upstream pages changed): - Mistral: re-platformed to Astro; parse new /pricing/api/ price atoms - Nebius: rebranded to Token Factory; use documented /v1/models?verbose=true RichModel pricing (NEBIUS_API_KEY) Wire NSCALE_API_KEY + NEBIUS_API_KEY into the update workflow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>49e63bd
-
feat: add sync-hf script to handle metadata injection and clean up README
CrispStrobe302ab7f -
feat: implement canonical model IDs for improved UI grouping
CrispStrobeaea9373 -
fix: correct Apertus/Teuken IDs and ensure robust mapping for Kimi models
CrispStrobe2d8f720 -
fix: correctly map Magistral, Pixtral Large, and Hermes 3 405B repositories
CrispStrobe83eb519 -
fix: correct Apertus/Teuken IDs and properly map Kimi models
CrispStrobeb6e26aa -
fix: correct Apertus/Teuken IDs, unflag Kimi as proprietary, and refine OCR label
CrispStrobe3ae6c58 -
fix: refine OCR label, remove hallucinated HF IDs, and optimize gated repo validation
CrispStrobeffc4314 -
feat: simplify OCR display and optimize HF repo validation with caching
CrispStrobe704a297 -
feat: verbose HF validation, OCR benchmarks, and corrected model mappings
CrispStrobe7cc1131 -
fix: remove hallucinated HF IDs and improve gated repo validation
CrispStrobeaf78198 -
fix: resolve white screen by adding try-catch to benchmark sorting and rendering
CrispStrobe5e7afae -
feat: extract MTEB benchmarks from Hugging Face README metadata
CrispStrobe5afa393 -
feat: enhance MTEB enrichment with cross-revision aggregation and manual fallbacks for latest models
CrispStrobe062b038 -
feat: integrate MTEB benchmarks from official GitHub results repo
CrispStrobeb090cc8 -
feat: track and save the source of each benchmark datapoint
CrispStrobe4bcf2a4 -
feat: add HF IDs and sizes for Voxtral and new Mistral models
CrispStrobe131ab2f -
fix: propagate model capabilities globally and add missing icons for Whisper/Voxtral
CrispStrobe6f9105d -
feat: comprehensive audio/multimodal pricing support and improved model metadata enrichment (Whisper, Gemini 3.1, Voxtral)
CrispStrobeec9cfc9 -
fix: resolve HTTP 408 timeouts and finalize technical metadata enrichment for MiniMax-M1 and others
CrispStrobee16bbaf -
feat: resolve MiniMax-M1 (366B), Mistral Small variants, and Qwen Plus via deep config.json parsing and global technical sync
CrispStrobec5e4684 -
fix: aggressively parse raw config.json to estimate parameters for models with minified HF metadata
CrispStrobee2e9c3d -
feat: achieve 100% public model metadata coverage; improved vLLM-style param estimation; fixed phi-4 and mistral variants
CrispStrobe54c2fe8 -
fix: resolve minified HF metadata by fetching raw config.json; improved BERT-style param estimation
CrispStrobe128b3b8 -
feat: achieve 100% metadata coverage with automated proprietary model detection and expanded mappings
CrispStrobe901bb12 -
feat: implement technical repo-id based metadata enrichment and grouping
CrispStrobef0da319 -
feat: implement persistent HF private status and aggressive manual mappings for Qwen, DeepSeek, and Grok
CrispStrobeeed68bb -
feat: complete full set of Artificial Analysis metrics
CrispStrobeac03708 -
feat: integrate Ollama Registry, vLLM-style param estimation, and enhanced model info tooltips
CrispStrobedb007de -
feat: integrate Artificial Analysis API and correct Mistral family sizes
CrispStrobecf1221a -
fix: refine FLUX family sizes to 32B for FLUX.2 flagships based on official specs
CrispStrobe388998e -
fix: correct FLUX.2 family sizes to 32B and refine hf_id grouping logic
CrispStrobe59b4e0e -
feat: prioritize hf_id for model grouping and enrich FLUX family metadata
CrispStrobe2a1a498 -
feat: implement private model caching for HF Hub and add manual mappings for Qwen/IONOS models
CrispStrobe03b99dd -
fix: add HF lookup circuit breaker, detailed error logging, and improved size regex
CrispStrobe88466b5 -
fix: optimize HF Hub lookups with smart merging, limited retries, and detailed logging
CrispStrobebffabba -
feat: add interactive metadata info icon with direct Hugging Face links
CrispStrobe225d830 -
feat: improve size precision for small models and add manual HF mapping for Infomaniak
CrispStrobe02e6e85 -
fix: prevent eu-endpoint leakage to other providers and optimize HF Hub retries
CrispStrobe3a30924 -
feat: include eu-endpoint tagging in OpenRouter data
CrispStrobee9acff4 -
feat: improve size detection via hf_id inheritance, add embedder icon, and restore comments
CrispStrobec3fc087 -
feat: improve size detection (decimals, description regex) and embedder identification
CrispStrobed756c8e