kith-ai / README.md
ysharma's picture
ysharma HF Staff
Add demo video + social post links to README (hackathon submission) (#1)
842d024
|
Raw
History Blame Contribute Delete
6.32 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade
metadata
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 🧑

Kith β€” the thoughtful thing to do today

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

Small models. A memory that's yours β€” Ears 2B β†’ Brain 8B β†’ Your file β†’ Today

πŸŽ™ 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

Be the friend who remembers β€” Rose's birthday, you owe Daniel the photos, call Mom

  • 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.

Your memory lives in a file you own β€” no cloud, no account

Models (all small, all open)

Role Model Size Runtime
Ears CohereLabs/cohere-transcribe-03-2026 ~2B on ZeroGPU
Brain 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

Social post

πŸ“£ Read the launch post on X