Skip to content

Docs

Runtime & engines

How Bedrova runs models with MLX-first routing, Core ML perception, GGUF text compatibility, and runtime packs.

Underneath the chat window is a runtime that loads models, routes each request to an engine, and updates itself in versioned packs. You rarely need to touch it — but when you want control or you’re debugging, here’s the model.

MLX-first, not MLX-only

Bedrova’s flagship text path is MLX on Apple Silicon. DeepSeek V4 Flash and the preferred general text routes use MLX when a proven MLX model/runtime exists.

Other provider packs cover jobs MLX should not pretend to own:

  • Core ML powers perception/image-analysis tasks such as classification, detection, segmentation, depth, OCR, and pose.
  • GGUF/llama.cpp is a secondary text-only compatibility runtime for chat, Responses, and completions. When an MLX and GGUF variant are both viable, Bedrova recommends MLX and labels GGUF as broad compatibility, usually slower.

GGUF is not the DeepSeek V4 flagship path, and it does not cover vision, voice/audio, perception, image generation, or search in this roadmap.

Some frontier models run behind an internal runtime bridge until a first-class native path exists — this is invisible in normal use (no terminal, no Python to manage, no separate server to start). Where a model needs a capability the current runtime can’t prove safe, Bedrova gates it and says so rather than failing mid-generation.

Engine selection

Each workload is routed to an engine. In Settings → Engine Selection you can set the routing policy and a preference such as prefer-native or prefer-no-helper. When more than one engine could serve a model, Bedrova shows the candidates and the reasons it rejected the others, so a routing decision is never a black box.

Runtime packs

Engine support ships in runtime packs, separate from the app itself. A pack can be updated, pinned to a version, or rolled back independently in Settings → Runtime. Packs use signed manifests with rollback protection (see Model trust).

Pin a pack when a model you depend on works on a specific version and you don’t want an update to change its behavior. Roll back when a new pack regresses something. Channels let you choose between stable and earlier-access packs.

App updates

The app updates through Sparkle (Settings → General), with signed update feeds. Update checks are disclosed and controllable — they’re listed in Network calls. App updates and runtime-pack updates are independent: you can hold one and move the other.

See also