| --- |
| title: Kith |
| emoji: π§‘ |
| colorFrom: red |
| colorTo: yellow |
| sdk: gradio |
| sdk_version: 6.17.3 |
| python_version: "3.12" |
| app_file: app.py |
| pinned: false |
| license: apache-2.0 |
| short_description: Relationship memory built on small open models |
| thumbnail: https://huggingface.co/spaces/build-small-hackathon/kith-ai/resolve/main/assets/brand-images/kith-ai-brand-1.jpeg |
| models: |
| - CohereLabs/cohere-transcribe-03-2026 |
| - openbmb/MiniCPM4.1-8B |
| tags: |
| - build-small-hackathon |
| - backyard-ai |
| - track:backyard |
| - openbmb |
| - minicpm |
| - sponsor:openbmb |
| - achievement:offbrand |
| - achievement:fieldnotes |
| - off-brand |
| - best-demo |
| - gradio |
| - zerogpu |
| --- |
| |
| # Kith π§‘ |
|
|
|  |
|
|
| **A relationship memory built entirely on small open models β remember the |
| people in your life, and surface the thoughtful thing to do today.** |
|
|
| Record a conversation β a 2B model transcribes it β an 8B model extracts the |
| people in it and what matters about them β it's kept in a local SQLite file you |
| own β Kith surfaces the thoughtful thing to do today: the birthday in five days, |
| the photos you promised, the friend you've lost touch with. |
|
|
| The data Kith handles is your most intimate β family, health, friendships β so |
| it's built on **small, open models under the hackathon's 32B cap**, and your |
| memory lives in a **local file you own, not a cloud account or database.** Small |
| isn't the limitation here; it's the point. |
|
|
| ## How it works |
|
|
|  |
|
|
| ``` |
| π record / upload (browser mic, decoded + resampled to 16kHz in-browser) |
| β π Cohere Transcribe (2B, Apache-2.0) β speechβtext, on ZeroGPU |
| β π§ MiniCPM 4.1-8B (OpenBMB) β extracts people / signals / commitments / |
| decisions as strict JSON |
| β π SQLite β a local file you own, no cloud database |
| β π§‘ the Today feed β thoughtful / owed / reconnect / remember cards |
| ``` |
|
|
|  |
|
|
| - **Custom UI over `gr.Server()`** β the whole screen is hand-written HTML/CSS/JS |
| in Kith's design language (Fraunces, cream + terracotta), talking to Gradio |
| API routes via `@gradio/client`. No default Gradio widgets anywhere. |
| - **Grounded extraction** β every memory carries a verbatim source quote, |
| verified against the transcript; tap any card to see exactly what was said. |
| An item with no real quote is dropped, not shown. |
| - **No diarization needed** β Cohere Transcribe is pure audioβtext; MiniCPM |
| infers "me vs. them" from conversational context. |
| - **Your memory, yours** β conversations become rows in a local SQLite file, |
| with dismiss + "start fresh" controls. No cloud database, no account. |
|
|
|  |
|
|
| ## Models (all small, all open) |
|
|
| | Role | Model | Size | Runtime | |
| |---|---|---|---| |
| | Ears | [CohereLabs/cohere-transcribe-03-2026](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026) | ~2B | on ZeroGPU | |
| | Brain | [openbmb/MiniCPM4.1-8B](https://huggingface.co/openbmb/MiniCPM4.1-8B) | 8B | OpenBMB hosted MiniCPM endpoint | |
|
|
| The whole design is built behind one `extract()` seam (`brain.py`) with a |
| `KITH_BRAIN` switch β `gpu` / `hosted` / `local` (CPU GGUF via llama.cpp) β so |
| the brain can move fully on-device without touching the rest of the app. |
|
|
| ## Running it |
|
|
| Space secrets: `HF_TOKEN` (the ASR model is gated β the token's account must |
| have accepted access on its model page) and `OPENBMB_API_KEY` (the MiniCPM |
| endpoint). Space variable `KITH_BRAIN=hosted`. |
|
|
| Locally on a CPU dev box: `pip install -r requirements.txt gradio spaces && |
| KITH_BRAIN=hosted python app.py`; set `KITH_SKIP_ASR=1` to skip the gated ASR |
| weights during UI work. |
| |
| ## How I built it |
| |
| Kith is a single Gradio `gr.Server()` app, designed around one clean **ingestion |
| seam**: a conversation becomes a row of text, and everything downstream is |
| source-agnostic. |
| |
| 1. **Ears** β Cohere Transcribe 2B runs on ZeroGPU; the browser decodes and |
| resamples any clip to 16 kHz in-page (WebAudio), so the server never needs |
| ffmpeg. |
| 2. **Brain** β MiniCPM 4.1-8B turns the transcript into strict JSON |
| (people / signals / commitments / decisions), behind one `extract()` seam |
| with a `KITH_BRAIN` switch (`gpu` / `hosted` / `local`). |
| 3. **Grounding** β every extracted fact must carry a **verbatim quote** that is |
| verified against the transcript; if there's no real quote, the fact is |
| dropped, not shown. Tap a card to see the source sentence. |
| 4. **Memory** β a local SQLite file: people are upserted (so the same person |
| accrues memory across conversations), with dismiss + "start fresh" controls. |
| 5. **The feed** β four rules surface what matters today: *thoughtful* (a dated |
| event soon), *owed* (a promise you made), *reconnect* (someone gone quiet), |
| *remember* (a fresh, undated signal). |
| 6. **The face** β a hand-written HTML/CSS/JS page over `gr.Server()` in Kith's |
| design language, with a conversation-history sidebar and a responsive |
| desktop/phone layout. No default Gradio widgets. |
|
|
| **Tech used:** Gradio (`gr.Server`) Β· Cohere Transcribe 2B (ASR) Β· MiniCPM |
| 4.1-8B, OpenBMB (extraction) Β· Hugging Face ZeroGPU Β· SQLite Β· `@gradio/client` |
| Β· WebAudio API Β· Fraunces + Inter. |
|
|
| ## Why it fits Build Small |
|
|
| - **Every model is small + open, well under 32B** β a 2B ASR and an 8B |
| extractor. Small isn't the constraint; for an app about your most private |
| relationships, small + open + a memory you own *is* the pitch. |
| - **OpenBMB MiniCPM is the brain** β the whole "what matters about this person" |
| step is MiniCPM doing grounded, schema-constrained extraction. |
| - **Off-Brand** β a fully hand-written `gr.Server()` UI, no stock Gradio look. |
| - **Field Notes** β an honest writeup of what an 8B can and can't do at this |
| task (see the repo's spike notes). |
|
|
| ## Demo video |
|
|
| βΆοΈ **[Watch the Kith demo on YouTube](https://www.youtube.com/watch?v=7l51vC20esM)** |
|
|
| ## Social post |
|
|
| π£ **[Read the launch post on X](https://x.com/ooi_yee_fei/status/2066884944480387503)** |
|
|