A multi-scale conversation analysis platform for Google Meet transcripts with AI-powered insights, cognitive bias detection, and advanced visualization.
Live Conversational Threads transforms conversation transcripts into interactive, multi-scale graph visualizations that reveal both temporal flow and thematic relationships. The application supports Google Meet transcripts with speaker diarization, allowing users to explore conversations at five discrete zoom levelsβfrom individual sentences to narrative arcsβwhile simultaneously viewing both timeline and contextual network views.
Built with FastAPI (Python backend) and React + TypeScript (frontend), the platform leverages LLM-powered analysis to detect Simulacra levels, identify cognitive biases, extract implicit frames, and generate comprehensive speaker analytics.
- Key Features
- Demo
- Architecture Overview
- Project Structure
- Prerequisites
- Backend Setup
- Frontend Setup
- Running the Application
- Environment Variables
- Database Setup
- API Documentation
- Documentation
- Development Roadmap
- Troubleshooting
- Contributing
- License
π― Google Meet Transcript Import
- Parse PDF/TXT transcripts with speaker diarization
- Automatic speaker detection and turn segmentation
- Timestamp extraction and duration calculation
π Dual-View Visualization
- Timeline View (15%): Linear temporal progression of conversation
- Contextual Network View (85%): Thematic clustering and idea relationships
- Synchronized navigation and selection across views
- Resizable split with user-customizable proportions
π 5-Level Zoom System
- Level 1 (Sentence): Individual utterances and speaker turns
- Level 2 (Turn): Aggregated speaker contributions
- Level 3 (Topic): Semantic topic segments
- Level 4 (Theme): Major thematic clusters
- Level 5 (Arc): Narrative arcs and conversation structure
π Advanced AI Analysis
- Simulacra Level Detection: Classify utterances by communication intent (Levels 1-4)
- Cognitive Bias Detection: Identify 25+ types of biases and logical fallacies
- Implicit Frame Analysis: Uncover hidden worldviews and normative assumptions
- Speaker Analytics: Role detection, time distribution, topic dominance
βοΈ Customizable AI Prompts
- Externalized prompts in JSON configuration
- User-editable via Settings UI
- A/B testing support for prompt variations
- Version history and rollback capability
- Performance metrics per prompt (cost, latency, accuracy)
π Cost Tracking & Instrumentation
- Real-time LLM API cost tracking
- Latency monitoring (p50, p95, p99)
- Token usage analytics by feature
- Cost per conversation dashboards
- Automated alerts for threshold breaches
βοΈ Edit Mode & Training Data Export
- Manual correction of AI-generated nodes/edges
- All edits logged for future model training
- Export formats: JSONL (fine-tuning), CSV (analysis), Markdown (review)
- Feedback annotation for continuous improvement
Note: Video reflects earlier version of the application. Current version includes dual-view architecture, zoom levels, and advanced analysis features.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Frontend (Vite) β
β ββββββββββββββββββ βββββββββββββββββββββββββββββββββββ β
β β Timeline View β β Contextual Network View β β
β β (15% height) β β (85% height) β β
β β β β β β
β β βββββββββββββ β β ββββ ββββ β β
β β β β β ββββββββ β β β
β ββββββββββββββββββ β ββββ ββββ β β
β β β β β β
β β ββββ β β
β β β β β β
β β ββββ β β
β βββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β REST API
ββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββ
β FastAPI Backend β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββ β
β β Parsers β β AI Services β β Instrumentation β β
β β - Google Meetβ β - Clustering β β - Cost Tracking β β
β β β β - Bias Det. β β - Metrics β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
β β β
ββββββΌβββββ ββββββββΌβββββββ βββββββββΌβββββββ
βPostgreSQLβ β OpenAI API β β GCS Storage β
β Database β β Anthropic β β (Transcripts)β
ββββββββββββ βββββββββββββββ ββββββββββββββββ
- Import: User uploads Google Meet transcript (PDF/TXT)
- Parsing: Backend extracts speakers, utterances, timestamps
- AI Analysis: LLM generates nodes, edges, clusters (via prompts.json)
- Storage: Conversation data saved to PostgreSQL, files to GCS
- Visualization: Frontend fetches graph data, renders dual-view
- Interaction: User explores zoom levels, selects nodes, views analytics
- Editing: User corrections logged to
edits_logtable - Export: Training data exported in JSONL format for fine-tuning
live_conversational_threads/
βββ lct_python_backend/ # Python FastAPI backend
β βββ backend.py # Main FastAPI application
β βββ db.py # Database connection & ORM
β βββ db_helpers.py # Database helper functions
β βββ requirements.txt # Backend dependencies
β βββ config/
β β βββ prompts.json # Externalized LLM prompts
β βββ services/
β β βββ graph_generation_service.py
β β βββ prompts_service.py
β β βββ simulacra_detector.py
β β βββ cognitive_bias_detector.py
β βββ parsers/
β β βββ google_meet_parser.py
β βββ instrumentation/
β β βββ decorators.py # @track_api_call
β β βββ cost_calculator.py
β βββ tests/
β βββ unit/
β βββ integration/
β βββ e2e/
βββ lct_app/ # React + TypeScript frontend
β βββ src/
β β βββ components/
β β β βββ DualView/
β β β β βββ DualViewCanvas.tsx
β β β β βββ TimelineView.tsx
β β β β βββ ContextualNetworkView.tsx
β β β βββ NodeDetail/
β β β βββ Analytics/
β β β βββ Settings/
β β βββ hooks/
β β βββ lib/
β β βββ tests/
β βββ package.json
β βββ vite.config.ts
βββ docs/ # Comprehensive documentation
β βββ ROADMAP.md # 14-week implementation plan
β βββ TIER_1_DECISIONS.md # Foundational design decisions
β βββ TIER_2_FEATURES.md # Detailed feature specifications
β βββ FEATURE_SIMULACRA_LEVELS.md
β βββ FEATURE_ROADMAP.md
β βββ DATA_MODEL_V2.md
β βββ PRODUCT_VISION.md
β βββ adr/ # Architecture Decision Records
β βββ ADR-001-google-meet-transcript-support.md
β βββ ADR-002-hierarchical-coarse-graining.md
β βββ ADR-003-observability-and-storage-foundation.md
β βββ ADR-004-dual-view-architecture.md
β βββ ADR-005-prompts-configuration-system.md
βββ README.md # This file
βββ requirements.txt
- Python 3.11+ (with
venvor Conda) - Node.js 18+ and npm 9+
- PostgreSQL 14+
- API Keys:
- OpenAI API key (for GPT-4, GPT-3.5-turbo)
- Anthropic API key (for Claude Sonnet-4)
- Google Cloud Storage credentials (for transcript storage)
- AssemblyAI API key (optional, for future audio support)
Using venv:
python3.11 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activateOr using Conda:
conda create -n lct_env python=3.11
conda activate lct_envcd lct_python_backend
pip install -r requirements.txtCreate a .env file in the project root or export variables:
# LLM API Keys
export OPENAI_API_KEY=your_openai_api_key
export ANTHROPIC_API_KEY=your_anthropic_api_key
# Google Cloud Storage
export GCS_BUCKET_NAME=your_gcs_bucket
export GCS_FOLDER=conversations
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
# Database
export DATABASE_URL=postgresql://user:password@localhost:5432/lct_db
# Optional (for future features)
export ASSEMBLYAI_API_KEY=your_assemblyai_api_key
export PERPLEXITY_API_KEY=your_perplexity_api_key
export GOOGLEAI_API_KEY=your_googleai_api_keyOn Windows (PowerShell):
$env:OPENAI_API_KEY="your_openai_api_key"
$env:DATABASE_URL="postgresql://user:password@localhost:5432/lct_db"
# ...and so onSee Database Setup section below.
cd lct_appnpm installThe frontend uses environment variables for API endpoints. Create lct_app/.env:
VITE_API_BASE_URL=http://localhost:8080
Default is http://localhost:8080, so this step is optional for local development.
From the project root (with Python environment activated):
cd lct_python_backend
uvicorn backend:lct_app --reload --port 8080The backend API will be available at http://localhost:8080
Verify backend is running:
- Visit http://localhost:8080/docs for Swagger UI
- Check http://localhost:8080/health for health status
In a new terminal:
cd lct_app
npm run devThe frontend will be available at http://localhost:5173
- Navigate to http://localhost:5173
- Click "Import Transcript" button
- Upload a Google Meet transcript (PDF or TXT format)
- Wait for AI-powered graph generation (~30-60 seconds)
- Explore the conversation using dual-view interface!
| Variable | Description | Example |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for GPT-4/GPT-3.5-turbo | sk-... |
ANTHROPIC_API_KEY |
Anthropic API key for Claude Sonnet-4 | sk-ant-... |
DATABASE_URL |
PostgreSQL connection string | postgresql://user:pass@localhost:5432/lct_db |
GCS_BUCKET_NAME |
Google Cloud Storage bucket name | my-lct-bucket |
GCS_FOLDER |
GCS folder for transcript storage | conversations |
GOOGLE_APPLICATION_CREDENTIALS |
Path to GCS service account JSON | /path/to/credentials.json |
| Variable | Description | Default |
|---|---|---|
LOG_LEVEL |
Logging level | INFO |
MAX_CONVERSATION_SIZE_MB |
Max transcript size | 10 |
ENABLE_COST_ALERTS |
Enable cost threshold alerts | true |
DAILY_COST_LIMIT_USD |
Daily spending limit | 100.0 |
| Variable | Description | Default |
|---|---|---|
VITE_API_BASE_URL |
Backend API base URL | http://localhost:8080 |
createdb lct_dbThe application uses Alembic for database migrations. From lct_python_backend/:
# Generate initial migration (if needed)
alembic revision --autogenerate -m "Initial schema"
# Apply migrations
alembic upgrade headThe application uses the following core tables (see docs/DATA_MODEL_V2.md for full schema):
-- Conversations metadata
CREATE TABLE conversations (
id UUID PRIMARY KEY,
title VARCHAR(255),
source VARCHAR(50), -- 'google_meet', 'manual', etc.
created_at TIMESTAMP,
updated_at TIMESTAMP
);
-- Speaker-diarized utterances
CREATE TABLE utterances (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
speaker_name TEXT,
text TEXT,
start_time FLOAT,
end_time FLOAT,
audio_segment_id UUID -- For future audio support
);
-- AI-generated conversation nodes
CREATE TABLE nodes (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
summary TEXT,
node_type VARCHAR(50),
utterance_ids JSONB, -- Array of utterance UUIDs
created_by VARCHAR(10), -- 'ai' or 'user'
edited BOOLEAN DEFAULT FALSE,
zoom_level_visible INTEGER, -- 1-5
position JSONB, -- {x, y} coordinates
created_at TIMESTAMP
);
-- Edges between nodes
CREATE TABLE edges (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
from_node_id UUID REFERENCES nodes(id),
to_node_id UUID REFERENCES nodes(id),
relationship_type VARCHAR(20), -- 'temporal' or 'contextual'
label TEXT,
created_by VARCHAR(10),
created_at TIMESTAMP
);
-- Hierarchical clusters for zoom levels
CREATE TABLE clusters (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
label TEXT,
child_node_ids JSONB,
zoom_level_min INTEGER,
zoom_level_max INTEGER,
position JSONB
);
-- Edit history (training data)
CREATE TABLE edits_log (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
user_id UUID,
edit_type VARCHAR(50),
before_value JSONB,
after_value JSONB,
feedback TEXT,
timestamp TIMESTAMP
);
-- API call instrumentation
CREATE TABLE api_calls_log (
id UUID PRIMARY KEY,
conversation_id UUID,
endpoint TEXT,
model VARCHAR(50),
input_tokens INTEGER,
output_tokens INTEGER,
total_tokens INTEGER,
cost_usd DECIMAL(10, 6),
latency_ms INTEGER,
timestamp TIMESTAMP,
success BOOLEAN,
error_message TEXT
);Once the backend server is running:
- Swagger UI: http://localhost:8080/docs
- ReDoc: http://localhost:8080/redoc
POST /import/google-meet # Import Google Meet transcript
GET /conversations/{id} # Get conversation graph
POST /conversations/{id}/analyze # Run AI analysis (bias, Simulacra)
GET /conversations/{id}/analytics # Get speaker analytics
PATCH /nodes/{id} # Edit node summary
GET /prompts/ # List all prompts
PATCH /prompts/{id} # Update prompt configuration
GET /cost-dashboard # View cost tracking metrics
| Document | Description |
|---|---|
| ROADMAP.md | 14-week implementation plan with instrumentation, metrics, storage, and testing strategies |
| TIER_1_DECISIONS.md | Foundational architectural decisions (Google Meet format, zoom levels, dual-view, prompts) |
| TIER_2_FEATURES.md | Detailed specifications for 6 major features (Node Detail Panel, Speaker Analytics, Prompts Config, etc.) |
| FEATURE_SIMULACRA_LEVELS.md | Simulacra level detection, cognitive bias analysis, implicit frames, rhetorical profiling |
| DATA_MODEL_V2.md | Complete database schema with all tables, indexes, and relationships |
| PRODUCT_VISION.md | High-level product strategy and user personas |
| FEATURE_ROADMAP.md | ROI analysis and feature prioritization |
| ADR | Title | Status |
|---|---|---|
| ADR-001 | Google Meet Transcript Support | Approved |
| ADR-002 | Hierarchical Coarse-Graining for Multi-Scale Visualization | Proposed |
| ADR-003 | Observability, Metrics, and Storage Baseline | Proposed |
| ADR-004 | Dual-View Architecture (Timeline + Contextual Network) | Approved |
| ADR-005 | Externalized Prompts Configuration System | Approved |
- β Database schema migration (DATA_MODEL_V2)
- β Instrumentation & cost tracking
- π§ Google Meet transcript parser
- π§ Initial graph generation with prompt engineering
- π Dual-view architecture (Timeline + Contextual)
- π 5-level zoom system
- π Node detail panel with editing
- π Speaker analytics view
- π Prompts configuration UI
- π Edit history & training data export
- π Simulacra level detection
- π Cognitive bias detection (25 types)
- π Implicit frame analysis
- π Final integration & polish
Legend:
- β Completed
- π§ In Progress
- π Planned
See docs/ROADMAP.md for detailed sprint-by-sprint breakdown.
Database connection errors:
# Check PostgreSQL is running
pg_ctl status
# Test connection
psql -U your_user -d lct_dbLLM API errors:
# Verify API keys are set
echo $OPENAI_API_KEY
echo $ANTHROPIC_API_KEY
# Check API key validity
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"Import errors:
# Reinstall dependencies
pip install --force-reinstall -r requirements.txt
# Check Python version (must be 3.11+)
python --versionPort conflicts:
# Kill process on port 5173
lsof -ti:5173 | xargs kill -9
# Or use different port
npm run dev -- --port 3000CORS errors:
- Backend is configured to allow
http://localhost:5173 - If using different port, update CORS settings in
backend.py
Build errors:
# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm installSlow graph generation:
- Check
api_calls_logtable for high latency - Consider using GPT-3.5-turbo for cheaper/faster clustering
- Reduce max_tokens in
prompts.json
High LLM costs:
- Check
/cost-dashboardendpoint - Review
prompts.jsonfor token-heavy templates - Enable prompt caching (coming in Week 9)
We welcome contributions! Please follow these guidelines:
-
Create a feature branch from
main:git checkout -b feature/your-feature-name
-
Follow commit message format (see
.claude/CLAUDE.md):[TYPE]: Brief summary (50 chars max) MOTIVATION: - Why this change was needed APPROACH: - How the solution works CHANGES: - file1.py: Specific changes made IMPACT: - What functionality is added/changed TESTING: - How to verify the changes work -
Write tests:
- Unit tests:
pytest tests/unit/test_your_feature.py - Integration tests:
pytest tests/integration/ - Maintain 85%+ coverage
- Unit tests:
-
Run linters:
# Python black . flake8 . mypy . # TypeScript npm run lint npm run typecheck
-
Create Pull Request to
main:- Fill out PR template
- Link related issues
- Request review from maintainers
- No direct commits to main β all changes via PR
- Test coverage: 85%+ for new code
- Documentation: Update relevant docs/ files
- ADRs: Create ADR for significant architectural decisions
- Prompts: Externalize new LLM prompts to
prompts.json
Python:
- Black formatter (line length 100)
- Type hints for all functions
- Docstrings (Google style)
TypeScript:
- Prettier formatter
- ESLint rules enforced
- Prefer functional components with hooks
This project is licensed under the GNU General Public License v3.0 (GPLv3).
You are free to use, modify, and distribute this software under the terms of the GPLv3, which ensures that derivative works remain open source.
Key Points:
- β Use freely for personal, academic, or open-source projects
- β Modify and distribute under GPLv3 terms
- β Cannot use in proprietary/closed-source software without commercial license
If you would like to use this software in a closed-source or commercial product, or if you need a commercial license without the GPL's copyleft requirements, please contact:
Email: [email protected] GitHub: https://github.com/aditya-adiga
Maintainer: Aditya Adiga Email: [email protected] GitHub: @aditya-adiga
Issues: GitHub Issues Discussions: GitHub Discussions
- Zvi Mowshowitz β Simulacra Levels framework
- LessWrong Community β Cognitive bias taxonomies
- OpenAI & Anthropic β LLM APIs powering analysis
- React Flow β Graph visualization library
- FastAPI β Python web framework
Last Updated: 2025-11-11 Version: 2.0.0 (Major redesign with Google Meet support)