Skip to content

Assistant: backend labels name implementation details instead of what the user is choosing #311

Description

@pliablepixels

The backend picker read:

On-device
On-device (native)
On-device (Apple Intelligence)
On-device (Gemini Nano)
Ollama (remote)

Four of five labels opened with "On-device", so the prefix discriminated nothing while eating the first ten characters of every label against the 320px budget. The parentheticals mixed registers: "Apple Intelligence" and "Gemini Nano" are product names, "native" is an implementation word, and Platform.isNative already means Capacitor throughout the codebase, so Apple Intelligence and Gemini Nano are also native. Bare "On-device" meant WebGPU specifically while reading as the category the other three belong to.

The hint strings had already given up on the labels: backend_accuracy_hint_android says "Gemini Nano runs on this device" with no prefix, and the web hint says "the on-device WebGPU model", naming the engine rather than using the label.

New scheme names the model's SUPPLIER, which is the actual decision:

Ollama (remote)                 your own server
On-device (AICore)              the OS already has it (Android)
On-device (Apple Intelligence)  the OS already has it (iOS)
On-device (Download model)      the app fetches one

on-device and native now share one label, because which engine backs it is a platform fact and not a user choice: WebGPU on desktop and web, llama.cpp on Metal on iOS. The enum values are unchanged, so no settings migration is needed.

Platform matrix, from what the code can actually run:

Platform Options
web/desktop Ollama, Download model (WebGPU: Llama 3.2 3B, Qwen3 4B)
iOS Ollama, Apple Intelligence, Download model (Metal: Qwen3 4B Instruct)
Android Ollama, AICore

Android reaches no download option: llama.cpp was removed from that build (issue #270) and WebLLM is gated off on mobile.

Also drops the "(native)" suffix from nativeLlmModel.label, which had been surfacing as "Qwen 3 4B Instruct (native) · On-device" in the chat header.

backend_on_device is kept but is no longer a picker label: assistantBackendLabel uses it as the generic mode suffix in the chat header for all four on-device backends, so repurposing it would have mislabelled Apple Intelligence and AICore.

Metadata

Metadata

Assignees

No one assigned

    Labels

    coreChanges core behavior; full review ceremony

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions