Salience is an experimental AI-powered chat aggregator and noise filter designed for high-volume live streams (Twitch, Kick, TikTok, YouTube, Whatnot).
It solves "chat blindness" by using local LLMs and vector embeddings to group spam, highlight meaningful interactions, and route messages based on their semantic importance.
Salience operates using two primary engines:
- Semantic Grouping: Instead of a waterfall of text, messages are treated as "particles."
- Vector Embeddings: Uses
FastEmbedto convert messages into vectors. - Gravity Cells: Similar messages (e.g., "LMAO", "lol", "hahaha", "ROFL") are magnetically pulled together into a single "Gravity Cell" with an increasing mass.
- Platform Specifics: Includes logic for auction-based platforms like Whatnot to handle bid spam and timer events.
- Visual Outcome: 50 people typing "F" becomes one large, pulsing "F" on screen, rather than 50 lines of text.
- Cognitive Filtering: A local LLM (default:
phi4via Ollama) analyzes unique messages. - Importance Scoring: Every unique message is scored (1-10) based on context.
- Low Score (<3): Routed to background/ambient noise.
- High Score (>7): Routed to the "Focus Feed" (e.g., questions, high-value bets, technical help).
- Emotional Tagging: Messages are tagged with sentiment/emotion for visualization.
- Language: Python 3.10+
- Local LLM: Ollama (running
phi4or similar) - Vector DB: ChromaDB (Ephemeral/In-Memory)
- Embeddings: FastEmbed
- UI: NiceGUI (for the dashboard)
- Ingestion: Custom adapters (Playwright/Stealth for difficult platforms).
- Python 3.10+ installed.
- Ollama installed and running.
ollama run phi4
-
Clone the repository:
git clone https://github.com/yourusername/salience.git cd salience -
Install dependencies:
pip install -r requirements.txt
To run the interactive demo (Mock Mode):
python src/main.pyTo run the full engine (requires configured .env and running Ollama):
- Edit
src/main.pyto setmock_mode=False. - Run
python src/main.py.
This project uses browser automation (Playwright) to ingest chat from certain platforms. This methods is fragile and subject to breakage if platform DOM structures change. Use with caution.