Gist: On-device Content Topic Tagging
On-device topic tagging that reads any text (a title, a post, a description) and returns the topics it is about, from a fixed 36-topic taxonomy across 101 languages, entirely on device.
Gist takes a piece of text and returns its topics, multi-label, from a fixed 36-topic taxonomy. "How to film a two-person podcast with two iPhones" returns technology and creator-economy; "Cómo invertir en fondos indexados" returns finance. It is cross-lingual by construction, so the same topics come back across 101 languages.
A compact two-stream classifier (a frozen multilingual static embedding plus hashed n-grams into a small head) keeps it fast and server-free, with no transformer at inference and zero per-call cost. Per-item scores can be aggregated across a collection into channel-level or feed-level topics.
Demo
Performance
36 topics across 101 languages, from a ~74 MB model, or ~15 MB English-only.
Recall on 572 human-labeled real posts. Internal measurements.
Use cases
Feed and content routing
Tag posts, articles, or videos by topic on device, so a feed can sort, filter, or route content without a classification API.
Channel and creator profiles
Aggregate an account's posts into channel-level topics to describe what a creator or feed is about.
Ranking and moderation signals
Add a cheap, private topic signal to recommendation or moderation pipelines, with no per-call cost.
On-device organization
Group a user's own notes, bookmarks, or library by topic, entirely offline.
What it does
- 36-topic taxonomy, multi-label: most items carry two or three topics.
- Cross-lingual by construction across 101 languages.
- Two-stream classifier, no transformer at inference, zero per-call cost.
- Compact English-only variant (~15 MB) for English-only apps.
Platforms and install
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/gist", from: "2.1.0")
import Gist
let gist = Gist()
let topics = try await gist.classify("How to start a podcast with just your iPhone")
// [Topic(slug: "technology", ...), ...]
// build.gradle.kts (Maven Central)
implementation("ai.desertant:gist:2.1.0")
import ai.desertant.gist.Gist
val gist = Gist(context)
val topics = gist.classify("How to start a podcast with just your iPhone")
// [Topic("technology", ...), ...]
npm i @desert-ant-labs/gist @litertjs/core
import { Gist } from "@desert-ant-labs/gist";
const gist = await Gist.load();
const topics = await gist.classify("How to start a podcast with just your iPhone");
// [{ slug: "technology", name: "Technology & Software", score: 0.91 }, ...]
Add Gist from Desert Ant Labs to this project.
On-device topic tagging that reads any text (a title, a post, a description) and returns the topics it is about, from a fixed 36-topic taxonomy across 101 languages, entirely on device.
SDKs (use the one that matches this project's platform):
Swift (iOS, macOS)
Repo: https://github.com/Desert-Ant-Labs/gist
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/gist", from: "2.1.0")
Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/gist
// build.gradle.kts (Maven Central)
implementation("ai.desertant:gist:2.1.0")
JavaScript / TypeScript (Web, Node.js)
Repo: https://github.com/Desert-Ant-Labs/gist
npm i @desert-ant-labs/gist @litertjs/core
Reference:
- Model page: https://desertant.com/models/gist/
- Full catalog and other models: https://desertant.com/llms.txt
Add the SDK that matches this project's platform, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
Specs
- Languages
- 101
- Topics
- 36, multi-label
- On-device size
- ~74 MB multilingual, or ~15 MB English-only
- Approach
- Two-stream classifier: a multilingual static embedding plus hashed n-grams
FAQ
What is Gist?
On-device topic tagging that reads any text (a title, a post, a description) and returns the topics it is about, from a fixed 36-topic taxonomy across 101 languages, entirely on device.
Does Gist run on device?
Yes. Gist runs entirely on device: inference happens locally with no server call, so data never leaves the device.
Which platforms does Gist support?
Gist ships as native on-device SDKs for Swift, Kotlin, JavaScript / TypeScript.
How much does Gist cost?
Every model is free up to 100k monthly active devices per SDK. Unlimited inference per user. Contact us for custom licenses.
How accurate or fast is Gist?
36 topics across 101 languages, from a ~74 MB model, or ~15 MB English-only.