A phone that runs the model, not a client for someone else's.

Cortiq loads a .cmf model onto the device and talks to it there — no account, no cloud round trip, no telemetry. It also converts models from Hugging Face on the phone itself, and serves whatever is loaded to the rest of your network.

Android & iOS · Flutter Engine libcortiq (Rust, FFI) Format CMF v2 Apache-2.0 Data safety: no data collected 7 languages
On device

Inference is the same Rust runtime the desktop tools use, bundled as a native library. Nothing about a conversation leaves the phone.

On the phone

Search the Hub, pick a quantization, and the safetensors → CMF conversion runs multi-threaded on the handset. No laptop in the loop.

On the network

The loaded model is served over an OpenAI-compatible API, so a laptop can use the phone as its backend.

What it does

Four screens, each doing real work

The app is not a wrapper around a hosted endpoint. Every screen below runs against a model file sitting in the device's own storage.

Chat

  • Streaming replies with per-message statistics — latency, prompt and completion tokens, tok/s
  • Persistent topics: every conversation keeps its own context
  • Attach documents (txt, md, code, json) into the prompt
  • Markdown rendering, copy, regenerate, stop
  • Disable thinking — reasoning models answer directly, with no visible reasoning step

Model library

  • Parsed metadata for every local file: architecture, quantization, layers, context, task masks
  • RAM fit check before loading — a warning instead of an out-of-memory kill
  • One-tap load and unload, to give memory and battery back
  • Import .cmf files from device storage

Hugging Face converter

  • Search the Hub, pick a model and a quantization, watch live progress
  • On-device multi-threaded conversion of safetensors to CMF v2, streamed in row slabs so a multi-gigabyte model converts in constant memory
  • Download size and estimated output size shown before you commit
  • Repos that already ship .cmf are detected and simply downloaded
  • Resilient downloads — byte-range fetches that resume from the last written byte after a network drop, instead of restarting gigabytes

Local server

  • The phone becomes an OpenAI-compatible endpoint on your LAN
  • QR code with the base URL, plus the address list and a live request log
  • Optional bearer-token auth; keep-awake while serving
  • Use the handset as the AI backend for a laptop
Quantization

Seven codecs, chosen on the phone

The converter offers the same codec ladder the desktop tools produce, so a file made on the handset is a file the rest of the ecosystem reads.

CodecWhat it isUse it for
Q4TP recommended4-bit tiles on a per-row scale ladderThe default for dense models — what the desktop tools emit
Q2TP2/4 mixed MoE profile: gate and up experts at 2-bit, the rest q4tpMixture-of-experts checkpoints that would not otherwise fit
Q8_2F8-bit two-field (𝒲 × θ)Highest fidelity; the reference when you are checking a smaller codec
Q8_ROW8-bit per rowA simpler 8-bit, smaller header, wide compatibility
Q1TTraining-free ternary {−s, 0, +s}, ≈2.25–3 bit, with a per-row f16 outlier overlayBelow 4-bit on a model that was never trained for it
Q11.5-bit for models trained 1-bit (Bonsai, BitNet)A 27B checkpoint in roughly 5 GB
F16No quantizationSmall models, or a baseline to measure against
API

What the phone serves

Point any OpenAI-compatible client at the address in the QR code. The /v1/cortiq/* routes are the CMF extensions.

EndpointPurpose
POST /v1/chat/completionsChat — JSON and SSE streaming
POST /v1/completionsLegacy completions
GET /v1/modelsThe loaded model
GET /v1/cortiq/statusUptime, tokens, tok/s
GET /v1/cortiq/masksTask masks baked into the model
POST /v1/cortiq/switchSwitch the active task
GET /healthzHealth check
Companion

A model larger than the phone

Pair the handset with a desktop running cortiq worker and the desktop holds the layers, the head and the sampler while the phone keeps the tokenizer and draws. That is what puts a 34.7B MoE on a phone with 2 GB free at 16.3 tok/s. It also works the other way: the phone serves a span of its own layers so a desktop can run a model bigger than its memory.

Measured on a Xiaomi 12 Lite against a MacBook M4 over USB with the same 1.7B model: 12.5 tok/s on the phone alone, 30.9 through the desktop.

The split buys memory, not speed — a token walks the layers in order — and the app says so rather than offering to "speed up" a model that already fits. The transport is labelled too: one round trip per token is 95 ms p99 over Wi-Fi against 2.9 ms on a cable, and the app names which one you are on.

The app

Screens

scroll

Home screenHome
Chat with per-message token statisticsChat — with per-message tok/s
Local model libraryModel library
Hugging Face converterHugging Face converter
Local server with QR codeLocal server
SettingsSettings
Where the models come from

Ready-made, or bring your own

Every .cmf repo published at huggingface.co/infosave is pinned in the app as a featured model and downloads in one tap. Anything else on the Hub goes through the on-device converter, and any .cmf file you already have can be imported from storage.