Smarter marketplaces, on device.
Turn a seller's description into a completed listing, flag NSFW photos before they're uploaded, and detect phone numbers and bank details in buyer chat, all on device.
AI models built for marketplaces
Nothing leaves the device
Every model runs on the buyer's or seller's phone, tablet or laptop. Messages, bank details and photos are checked before they're sent or uploaded, so they aren't processed on a server.
No per-call cost
Check every listing, photo and message with no bill per call and no infrastructure to run. Your team can add a check without first forecasting cloud spend.
Speak your users' language
Redact hides personal data in 27 languages, every official EU language plus Norwegian and Icelandic. Toxic flags abuse in 35, from English, German and French to Arabic, Japanese and Chinese.
Examples
Each example replays real output from a model. Open a model page for the full details, and try Schemer or Redact on your own text.
Redact · PII redaction
Keep phone numbers and bank details out of chat
Redact finds phone numbers, IBANs and card numbers as a message is typed. You can hold them back and keep the deal in the app, or warn the user before they hit send. IBANs and card numbers must pass a checksum, so those catches are reliable. Free-form names and addresses are where Redact misses most.
Title · Titles and descriptions
Automatically add listing titles from descriptions
When a seller finishes describing an item, Title writes a short title and summary for the listing. Title runs on Apple platforms only and can get a detail wrong, so let sellers edit what it writes.
Voz · Speech recognition
Let mobile users describe their listing out loud
Sellers tap the mic and describe the item, and Voz writes the description as they speak. Live transcription runs on Apple platforms only; on Android and the web, Voz transcribes the recording once it ends. Voz covers 25 European languages.
Moderator · Content moderation
Detect NSFW images before they're uploaded
Moderator checks each photo on the seller's phone as it's added, so nudes it flags never reach your servers or a listing. Have a person review flagged images before you block an account.
Eye · Image classification · Beta
Pick the best photos for a listing
Eye tags each photo as it's added: what it shows, whether it's sharp and how good it looks. Ask the seller to retake a blurry shot, and lead the listing with the photo that makes the best cover image.
Schemer · Structured extraction · Closed beta
Turn a buyer's message into an offer
Schemer reads the price, the pickup time and the location in a buyer's message, so the seller can accept the offer in one tap and close the deal. Schemer leaves a field empty when the message doesn't say. Schemer is in closed beta, and its first SDK, for Swift, is coming soon.
Toxic · Hate speech triage · Beta
Detect and hide abuse in chat
Toxic scores each message for hate, abuse and threats, in 35 languages. Hide flagged messages from the receiver, or ask the sender to edit before they hit send. Toxic is a triage aid, so send reports to a person, not straight to removal.
Get started
Install the models you need from one SDK, in Swift, Kotlin or JavaScript. The example holds back personal data in a message with Redact, and hides abusive messages with Toxic.
iOS, macOS, Linux, Windows
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core", from: "4.3.0")
// target dependencies
.product(name: "Redact", package: "desert-ant-core")
.product(name: "Toxic", package: "desert-ant-core")
.product(name: "Moderator", package: "desert-ant-core")
.product(name: "Voz", package: "desert-ant-core")
import Redact
import Toxic
let redact = Redact()
let toxic = Toxic()
// before a message is sent
let r = try await redact.redaction(of: message)
if !r.items.isEmpty { holdBack(r.items) }
// when a message arrives
let check = try await toxic.analyze(incoming)
if check.isToxic { foldAway(incoming, check.content) }
Android
// build.gradle.kts (Maven Central)
implementation("ai.desertant:redact:4.3.0")
implementation("ai.desertant:toxic:4.3.0")
implementation("ai.desertant:moderator:4.3.0")
implementation("ai.desertant:voz:4.3.0")
import ai.desertant.redact.Redact
import ai.desertant.toxic.Toxic
val redact = Redact(context)
val toxic = Toxic(context)
// before a message is sent
val r = redact.redaction(message)
if (r.redactedText != message) holdBack(r)
// when a message arrives
val check = toxic.analyze(incoming)
if (check.isToxic) foldAway(incoming, check.content)
Web, Node.js
npm i @desert-ant-labs/redact @desert-ant-labs/toxic @desert-ant-labs/moderator @desert-ant-labs/voz @litertjs/core onnxruntime-web
import { Redact } from "@desert-ant-labs/redact";
import { Toxic } from "@desert-ant-labs/toxic";
const redact = await Redact.load();
const toxic = await Toxic.load();
// before a message is sent
const r = await redact.redaction(message);
if (r.items.length) holdBack(r.items);
// when a message arrives
const check = await toxic.analyze(incoming);
if (check.isToxic) foldAway(incoming, check.content);
Building a marketplace?
Tell us what you want to add for your buyers and sellers, and we'll help you pick the models and plan the integration.






