Analyzes a one-to-one chat history (a WhatsApp or Telegram export) and serves a local dashboard: the relationship's arc over time, initiation / reach-back / reply-latency asymmetry, distinctive vs. shared vocabulary, turning points, and an optional local-LLM narrative. A portfolio view compares several relationships.
Runs entirely locally — the analysis path makes no network calls; the only model is a local Ollama
instance at localhost.
uv sync# build a DB from an export (a WhatsApp _chat.txt, or a Telegram HTML export dir)
uv run python scripts/build_conv.py path/to/export rel.duckdb --self "Your Name"
# per-relationship dashboard (localhost)
uv run python -m rapport.serve rel.duckdb 8079
# compare relationships (globs *.duckdb in the cwd)
uv run python -m rapport.portfolio serve 8083
# optional: local-LLM narrative (needs Ollama + a model)
uv run python -m rapport.narrate rel.duckdb
# optional: preview a redacted, pseudonymized export slice (writes nothing without --out)
uv run python -m rapport.bundle rel.duckdb --all --allow-full- Analysis is pure SQL over DuckDB; no model in that path.
- Each import records a capability profile (reactions, edits, reply-links, timezone, self-identity); a metric whose required capability is absent is disabled, not zero-filled.
- Reply latency is send-to-send (exports carry no read receipts); no message after a date is not treated as "ended".
Python · uv · DuckDB · Ollama (optional).
MIT — see LICENSE.