Skip to content

feat: add Runcrate provider preset - #188

Open
heydryft wants to merge 1 commit into
AIDotNet:mainfrom
heydryft:feat/runcrate-provider
Open

heydryft wants to merge 1 commit into
AIDotNet:mainfrom
heydryft:feat/runcrate-provider

Conversation

@heydryft

Copy link
Copy Markdown

Summary

This PR adds Runcrate as a built-in aggregator preset. It is shaped like the Atlas Cloud and Cheaper Inference entries (#177, #184).

Runcrate serves open models (DeepSeek, GLM, Qwen, Kimi, gpt-oss) behind an OpenAI-compatible API. One API key works for OpenAI Chat, OpenAI Responses and Anthropic Messages.

The preset is not marked as recommended.

Changes

  • presets.ts: new runcrate preset after cheaperinference, base https://api.runcrate.ai/v1. Three endpoints: OpenAI Chat, OpenAI Responses, and Anthropic (base https://api.runcrate.ai, the client adds /v1/messages). GET /v1/models works without a key, so the OpenAI Chat endpoint is marked modelListPublic. Suggested models are the full IDs from the model list: deepseek-ai/DeepSeek-V4.1-Flash, zai-org/GLM-5.3, moonshotai/Kimi-K2.6. The note says IDs carry the vendor prefix and are case sensitive, that the public list does not prove a key is valid, and that the same key works on all three protocols.
  • baseurl.ts: Runcrate added to the /v1 row of the doc table.
  • presets.test.ts: pinned the Anthropic URL row, and added runcrate to the modelListPublic set (six to seven).
  • preset-brands.test.ts: lobehub has no Runcrate glyph, so it falls back to initials like Cheaper Inference. The count (50 to 51), the no-icon comment and the list are updated.

Keys: https://www.runcrate.ai/dashboard/api-keys?utm_source=NextCoWork&utm_medium=directory&utm_campaign=gpu_pricing
Docs: https://www.runcrate.ai/docs/models/overview?utm_source=NextCoWork&utm_medium=directory&utm_campaign=gpu_pricing

Testing

npx vitest run src/shared/domain src/renderer/src/settings/pages/model
# Test Files 52 passed (52), Tests 1393 passed (1393)
npm run typecheck:node   # passes
npm run typecheck:web    # passes
npx eslint src/shared/domain/presets.ts src/shared/domain/baseurl.ts src/shared/domain/__tests__/presets.test.ts src/renderer/src/settings/pages/model/__tests__/preset-brands.test.ts   # no findings

Verification is probed, with one difference from the usual probe: without a key every path under api.runcrate.ai returns 401, so the fake path comparison was done with a key. Results (2026-10-28):

  • GET https://api.runcrate.ai/v1/models without a key: 200, model list returned.
  • POST /v1/chat/completions, /v1/responses, /v1/messages without a key: 401.
  • With a key, POST /v1/zzfake: 404.
  • With a key, POST /v1/chat/completions on deepseek-ai/DeepSeek-V4.1-Flash: 200, reply "ok".
  • With a key, POST /v1/responses on zai-org/GLM-5.3-Flash: 200, status: completed, output text "ok".
  • With a key, POST /v1/messages (x-api-key, anthropic-version: 2023-06-01) on Qwen/Qwen3.8-Flash: 200, stop_reason: end_turn, text block "ok".

This PR was prepared with AI assistance: an AI coding agent wrote the change and ran the checks above.

Disclosure: I work on Runcrate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant