Skip to content

feat(settings): add Runcrate as a preset model provider - #4353

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

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

Conversation

@heydryft

Copy link
Copy Markdown

Pull Request

Description

Adds Runcrate as a preset model provider in the add-platform picker. Runcrate serves an OpenAI-compatible inference API at https://api.runcrate.ai/v1 (/chat/completions with streaming and tools, /models), so the entry uses the existing custom platform with that base URL and needs no new code paths.

Users pick "Runcrate" in the list, paste a key from the API keys page (keys look like rc_live_...) and fetch models. Model ids are vendor/model, for example deepseek-ai/DeepSeek-V4.1-Flash, zai-org/GLM-5.3-Flash or Qwen/Qwen3.8-Flash; the full list is on the model pricing page.

The change mirrors the shape of #4275: one entry appended to MODEL_PLATFORMS, a logo bundled under renderer/assets/logos/ (the backend logo service has no asset for it, so it is imported locally), and unit tests for the entry.

Files:

  • packages/desktop/src/renderer/utils/model/modelPlatforms.ts: new Runcrate entry (platform: 'custom', base_url: 'https://api.runcrate.ai/v1').
  • packages/desktop/src/renderer/assets/logos/runcrate.svg: 24x24 logo.
  • tests/unit/renderer/modelPlatforms.test.ts: tests that the entry points at the OpenAI-compatible endpoint and is returned by getPresetProviders() with a logo.

Related Issues

  • None

Type of Change

  • fix: Bug fix (non-breaking change which fixes an issue)
  • feat: New feature (non-breaking change which adds functionality)
  • perf: Performance improvement
  • refactor: Code restructuring (no behavior change)
  • Breaking change (fix or feature that would break existing functionality)
  • docs: Documentation update

Atomic PR Checklist (Rule 1)

  • This PR contains exactly one feature or bug fix that cannot be further decomposed
  • The PR title follows Conventional Commit format: <type>(<scope>): <subject> (English)

Local Checks (Rule 3)

  • bun run format: formatting passes (bunx oxfmt --check on the touched files: all use the correct format)
  • bun run lint: no lint errors (bunx oxlint on the touched files: 0 warnings, 0 errors)
  • bunx tsc --noEmit: no type errors (exit 0)
  • bunx vitest run: tests pass (bunx vitest run tests/unit/renderer/modelPlatforms.test.ts: 5 passed)
  • i18n validated: N/A, no locale or i18n changes (the provider name is a brand and carries no i18nKey, like the other preset providers)
  • New/changed user-facing text uses i18n keys (no hardcoded strings)

Runtime Verification

  • Verified on macOS
  • Verified on Windows
  • Verified on Linux
  • I have performed a self-review of my own code

The desktop app was not launched. Instead, the request path the app uses for a custom platform was run directly: ClientFactory.createRotatingClient with platform: 'custom' and base_url: 'https://api.runcrate.ai/v1', then createChatCompletion and models.list(), from a throwaway script with bun run on macOS:

  • deepseek-ai/DeepSeek-V4.1-Flash: chat completion returned, finish_reason=stop, text "pong"
  • zai-org/GLM-5.3-Flash: chat completion returned, finish_reason=stop, text "pong"
  • models.list(): 197 models

Screenshots

None.

Additional Context

This PR was prepared with AI assistance: an AI coding agent wrote the change and ran the checks above. The commit carries no AI signature.

Disclosure: I work on Runcrate.

@codecov

codecov Bot commented Oct 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

This branch has not been deployed

No deployments
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