Audio Intelligence QA Platform for Support Calls
Features β’ Screenshots β’ Installation β’ Usage β’ Architecture β’ Rubric β’ LLM Integration β’ Contributing
QualiaQC is an open-source, audio-first AI QA reviewer for customer support calls. It ingests call recordings, performs local transcription and sentiment analysis, and uses a local LLM to generate structured QA scores and coaching feedback.
- π 100% Local β No cloud APIs, your data never leaves your machine
- π― Evidence-Linked Findings β Every score is backed by specific transcript moments
- π Sentiment Timeline β Track emotional trajectory for both agent and customer
- π Actionable Coaching β Not just scores, but specific improvement suggestions
- π Modular Rubrics β Customize evaluation criteria with versioned YAML configs
The main dashboard showing call quality metrics, score distribution, and recent calls overview.
Browse and search all processed calls with status, duration, and score information.
Drag & drop audio file upload with supported format validation and progress tracking.
Note: Additional screenshots showing call analysis, sentiment timeline, and coaching insights are available after processing a call.
- Drag & Drop Upload β Modern UI with progress indicators
- Local API β REST endpoints for programmatic ingestion
- Watch Folder β Automatic processing of new audio files
- Format Support β WAV, MP3, M4A
- Local Whisper β Using faster-whisper for optimized performance
- Speaker Diarization β Separate agent vs customer speech
- Timestamped Segments β Click-to-jump navigation
- Dual-Track Analysis β Agent and customer sentiment separately
- Timeline Visualization β See emotional trajectory over time
- Trend Detection β Improving, stable, or declining sentiment
- Confidence Scores β Know how reliable each assessment is
- Local LLM β Powered by Ollama (Llama, Mistral, etc.)
- Strict JSON Output β Structured, parseable results
- Category Scoring β 7 categories with weighted scores
- Evidence-Linked Findings β Every finding cites specific quotes
- Coaching Insights β Specific suggestions with improved phrasing
- Modern Dark Theme β Premium SaaS-quality design
- Timeline Transcript β Color-coded by speaker with sentiment
- Score Badges β Visual indicators for performance levels
- Expandable Findings β Drill into evidence and coaching tips
- Keyboard Accessible β Full keyboard navigation support
- Python 3.10+ (required for backend)
- Node.js 18+ (required for frontend)
- Ollama (required for LLM evaluation) β Install Ollama
- FFmpeg (required for audio processing) β Install FFmpeg
git clone https://github.com/ryanshatz/QualiaQC.git
cd QualiaQC# Pull a capable model (Llama 3 recommended)
ollama pull llama3:8b
# Or for better quality (requires more RAM)
ollama pull llama3:70b
# Ensure Ollama is running
ollama servecd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment config
cp .env.example .env
# Initialize database
python -c "from app.database import init_db; init_db()"
# Start server
uvicorn app.main:app --reload --port 8000cd frontend
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
- Click "Upload Call" in the header
- Drag & drop an audio file or click to browse
- Select the rubric to use (default provided)
- Click "Upload & Analyze"
- Wait for processing to complete (status updates shown)
Once processing completes:
- Transcript Tab β View conversation with speaker labels and sentiment
- Analysis Tab β See category scores with expandable findings
- Coaching Tab β Get actionable improvement suggestions
Process sample audio to test the system:
cd backend
python scripts/process_demo.pyQualiaQC/
βββ backend/ # Python FastAPI backend
β βββ app/
β β βββ api/ # REST API endpoints
β β βββ core/ # Configuration, rubrics
β β βββ models/ # SQLAlchemy models
β β βββ processors/ # Audio, transcription, sentiment
β β βββ schemas/ # Pydantic schemas
β β βββ services/ # Business logic
β βββ rubrics/ # YAML rubric definitions
β βββ tests/ # Backend tests
β βββ scripts/ # Utility scripts
β
βββ frontend/ # Next.js frontend
β βββ src/
β β βββ app/ # Next.js app router
β β βββ components/ # React components
β β βββ lib/ # API client, types, utils
β βββ public/ # Static assets
β
βββ samples/ # Sample audio files
βββ screenshots/ # Application screenshots
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, React 18, TypeScript |
| Styling | CSS Modules, Custom Properties |
| Icons | Lucide React |
| Backend | FastAPI, SQLAlchemy, Pydantic |
| Database | SQLite |
| Transcription | faster-whisper |
| Sentiment | HuggingFace Transformers |
| LLM | Ollama (local) |
| Audio | pydub, librosa |
ββββββββββββ ββββββββββββββββ βββββββββββββββββ ββββββββββββββββ
β Audio ββββββΊβ TranscriptionββββββΊβ Sentiment ββββββΊβ LLM QA β
β Input β β (Whisper) β β Analysis β β Evaluation β
ββββββββββββ ββββββββββββββββ βββββββββββββββββ ββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SQLite DB β
β β’ calls β’ transcripts β’ sentiments β’ evaluations β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
QualiaQC includes a comprehensive default rubric with 7 evaluation categories:
| Category | Weight | Description |
|---|---|---|
| Greeting & Professionalism | 10% | Proper greeting and professional tone |
| Issue Understanding | 15% | Thoroughly understands customer issue |
| Accuracy & Clarity | 20% | Provides accurate, clear information |
| Empathy & Tone | 20% | Demonstrates understanding of emotions |
| Call Structure & Control | 10% | Maintains appropriate conversation flow |
| Resolution Effectiveness | 15% | Achieves appropriate resolution |
| Closing & Next Steps | 10% | Proper closing with follow-up |
Edit backend/rubrics/default.yaml:
version: "1.0"
name: "Custom Rubric"
categories:
- id: EMPATHY
name: "Empathy & Tone"
weight: 20
description: "Agent demonstrates understanding and care"
criteria:
- "Acknowledges customer emotions"
- "Uses empathetic language"
examples:
strong:
- "I understand how frustrating that must be..."
weak:
- "That's just our policy."
coaching_guidance: |
Acknowledge emotions before solving problems.QualiaQC uses Ollama for local LLM-powered evaluation:
- Prompt Construction β Transcript + sentiment + rubric combined
- JSON Mode β LLM outputs strictly structured JSON
- Schema Validation β Output validated with Pydantic
- Evidence Linking β Findings reference specific transcript moments
{
"overall_score": 78,
"category_scores": [
{
"category_id": "EMPATHY",
"score": 65,
"confidence": 88,
"findings": [
{
"summary": "Agent did not acknowledge customer frustration",
"evidence": {
"quote": "That's just our policy.",
"start_time": "00:04:12",
"end_time": "00:04:15"
},
"impact": "Customer felt dismissed",
"coaching_tip": "Acknowledge emotion before explaining policy"
}
]
}
],
"strengths": ["Clear explanation of next steps"],
"improvements": ["Show more empathy"],
"suggested_phrases": [
{
"text": "I understand why that's frustrating...",
"confidence": 91
}
]
}llama3:8b(recommended)llama3:70b(better quality, requires more RAM)mistralmixtral
cd backend
# Run all tests
python -m pytest
# Run with coverage
python -m pytest --cov=app --cov-report=html
# Run specific tests
python -m pytest tests/test_rubric_parsing.py -v- Rubric Parsing β YAML loading, validation, weight calculation
- Sentiment Output β Score ranges, trend detection, aggregation
- LLM Schema β Response validation, malformed handling
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/calls/upload |
Upload audio file |
POST |
/api/calls/submit-path |
Submit local file path |
GET |
/api/calls |
List all calls |
GET |
/api/calls/{id} |
Get call details |
GET |
/api/calls/{id}/transcript |
Get transcript |
GET |
/api/calls/{id}/sentiment |
Get sentiment data |
GET |
/api/calls/{id}/evaluation |
Get QA evaluation |
GET |
/api/jobs/{id}/status |
Check processing status |
DELETE |
/api/calls/{id} |
Delete a call |
GET |
/api/rubrics |
List available rubrics |
GET |
/api/rubrics/{name} |
Get rubric details |
GET |
/api/health |
Health check |
MIT License β See LICENSE for details.
- faster-whisper β Optimized Whisper implementation
- Ollama β Local LLM runtime
- HuggingFace Transformers β NLP models
- Lucide β Beautiful icons
- Next.js β React framework
Built with β€οΈ for better customer service
Β© 2026 QualiaQC β’ v0.1.0


