mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 20:29:06 +00:00
* feat: add litellm backend implementation * refactor: improve generate/completion methods for base LLM * refactor: remove tokenizer logic * style: apply code formatting * fix: remove hallucinations from LLM responses * refactor: comprehensive LLM and summarization rework * chore: remove debug code * feat: add structured output support to LiteLLM * refactor: apply self-review improvements * docs: add model structured output comments * docs: update model structured output comments * style: apply linting and formatting fixes * fix: resolve type logic bug * refactor: apply PR review feedback * refactor: apply additional PR review feedback * refactor: apply final PR review feedback * fix: improve schema passing for LLMs without structured output * feat: add PR comments and logger improvements * docs: update README and add HTTP logging * feat: improve HTTP logging * feat: add summary chunking functionality * fix: resolve title generation runtime issues * refactor: apply self-review improvements * style: apply linting and formatting * feat: implement LiteLLM class structure * style: apply linting and formatting fixes * docs: env template model name fix * chore: remove older litellm class * chore: format * refactor: simplify OpenAILLM * refactor: OpenAILLM tokenizer * refactor: self-review * refactor: self-review * refactor: self-review * chore: format * chore: remove LLM_USE_STRUCTURED_OUTPUT from envs * chore: roll back migration lint changes * chore: roll back migration lint changes * fix: make summary llm configuration optional for the tests * fix: missing f-string * fix: tweak the prompt for summary title * feat: try llamaindex for summarization * fix: complete refactor of summary builder using llamaindex and structured output when possible * fix: separate prompt as constant * fix: typings * fix: enhance prompt to prevent mentioning others subject while summarize one * fix: various changes after self-review * fix: from igor review --------- Co-authored-by: Igor Loskutov <igor.loskutoff@gmail.com>
179 lines
5.4 KiB
Markdown
179 lines
5.4 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
Reflector is an AI-powered audio transcription and meeting analysis platform with real-time processing capabilities. The system consists of:
|
|
|
|
- **Frontend**: Next.js 14 React application (`www/`) with Chakra UI, real-time WebSocket integration
|
|
- **Backend**: Python FastAPI server (`server/`) with async database operations and background processing
|
|
- **Processing**: GPU-accelerated ML pipeline for transcription, diarization, summarization via Modal.com
|
|
- **Infrastructure**: Redis, PostgreSQL/SQLite, Celery workers, WebRTC streaming
|
|
|
|
## Development Commands
|
|
|
|
### Backend (Python) - `cd server/`
|
|
|
|
**Setup and Dependencies:**
|
|
```bash
|
|
# Install dependencies
|
|
uv sync
|
|
|
|
# Database migrations (first run or schema changes)
|
|
uv run alembic upgrade head
|
|
|
|
# Start services
|
|
docker compose up -d redis
|
|
```
|
|
|
|
**Development:**
|
|
```bash
|
|
# Start FastAPI server
|
|
uv run -m reflector.app --reload
|
|
|
|
# Start Celery worker for background tasks
|
|
uv run celery -A reflector.worker.app worker --loglevel=info
|
|
|
|
# Start Celery beat scheduler (optional, for cron jobs)
|
|
uv run celery -A reflector.worker.app beat
|
|
```
|
|
|
|
**Testing:**
|
|
```bash
|
|
# Run all tests with coverage
|
|
uv run pytest
|
|
|
|
# Run specific test file
|
|
uv run pytest tests/test_transcripts.py
|
|
|
|
# Run tests with verbose output
|
|
uv run pytest -v
|
|
```
|
|
|
|
**Process Audio Files:**
|
|
```bash
|
|
# Process local audio file manually
|
|
uv run python -m reflector.tools.process path/to/audio.wav
|
|
```
|
|
|
|
### Frontend (Next.js) - `cd www/`
|
|
|
|
**Setup:**
|
|
```bash
|
|
# Install dependencies
|
|
yarn install
|
|
|
|
# Copy configuration templates
|
|
cp .env_template .env
|
|
cp config-template.ts config.ts
|
|
```
|
|
|
|
**Development:**
|
|
```bash
|
|
# Start development server
|
|
yarn dev
|
|
|
|
# Generate TypeScript API client from OpenAPI spec
|
|
yarn openapi
|
|
|
|
# Lint code
|
|
yarn lint
|
|
|
|
# Format code
|
|
yarn format
|
|
|
|
# Build for production
|
|
yarn build
|
|
```
|
|
|
|
### Docker Compose (Full Stack)
|
|
|
|
```bash
|
|
# Start all services
|
|
docker compose up -d
|
|
|
|
# Start specific services
|
|
docker compose up -d redis server worker
|
|
```
|
|
|
|
## Architecture Overview
|
|
|
|
### Backend Processing Pipeline
|
|
|
|
The audio processing follows a modular pipeline architecture:
|
|
|
|
1. **Audio Input**: WebRTC streaming, file upload, or cloud recording ingestion
|
|
2. **Chunking**: Audio split into processable segments (`AudioChunkerProcessor`)
|
|
3. **Transcription**: Whisper or Modal.com GPU processing (`AudioTranscriptAutoProcessor`)
|
|
4. **Diarization**: Speaker identification (`AudioDiarizationAutoProcessor`)
|
|
5. **Text Processing**: Formatting, translation, topic detection
|
|
6. **Summarization**: AI-powered summaries and title generation
|
|
7. **Storage**: Database persistence with optional S3 backend
|
|
|
|
### Database Models
|
|
|
|
Core entities:
|
|
- `transcript`: Main table with processing results, summaries, topics, participants
|
|
- `meeting`: Live meeting sessions with consent management
|
|
- `room`: Virtual meeting spaces with configuration
|
|
- `recording`: Audio/video file metadata and processing status
|
|
|
|
### API Structure
|
|
|
|
All endpoints prefixed `/v1/`:
|
|
- `transcripts/` - CRUD operations for transcripts
|
|
- `transcripts_audio/` - Audio streaming and download
|
|
- `transcripts_webrtc/` - Real-time WebRTC endpoints
|
|
- `transcripts_websocket/` - WebSocket for live updates
|
|
- `meetings/` - Meeting lifecycle management
|
|
- `rooms/` - Virtual room management
|
|
|
|
### Frontend Architecture
|
|
|
|
- **App Router**: Next.js 14 with route groups for organization
|
|
- **State**: React Context pattern, no Redux
|
|
- **Real-time**: WebSocket integration for live transcription updates
|
|
- **Auth**: NextAuth.js with Authentik OAuth/OIDC provider
|
|
- **UI**: Chakra UI components with Tailwind CSS utilities
|
|
|
|
## Key Configuration
|
|
|
|
### Environment Variables
|
|
|
|
**Backend** (`server/.env`):
|
|
- `DATABASE_URL` - Database connection string
|
|
- `REDIS_URL` - Redis broker for Celery
|
|
- `MODAL_TOKEN_ID`, `MODAL_TOKEN_SECRET` - Modal.com GPU processing
|
|
- `WHEREBY_API_KEY` - Video platform integration
|
|
- `REFLECTOR_AUTH_BACKEND` - Authentication method (none, jwt)
|
|
|
|
**Frontend** (`www/.env`):
|
|
- `NEXTAUTH_URL`, `NEXTAUTH_SECRET` - Authentication configuration
|
|
- `NEXT_PUBLIC_REFLECTOR_API_URL` - Backend API endpoint
|
|
- `REFLECTOR_DOMAIN_CONFIG` - Feature flags and domain settings
|
|
|
|
## Testing Strategy
|
|
|
|
- **Backend**: pytest with async support, HTTP client mocking, audio processing tests
|
|
- **Frontend**: No current test suite - opportunities for Jest/React Testing Library
|
|
- **Coverage**: Backend maintains test coverage reports in `htmlcov/`
|
|
|
|
## GPU Processing
|
|
|
|
Modal.com integration for scalable ML processing:
|
|
- Deploy changes: `modal run server/gpu/path/to/model.py`
|
|
- Requires Modal account with `REFLECTOR_GPU_APIKEY` secret
|
|
- Fallback to local processing when Modal unavailable
|
|
|
|
## Common Issues
|
|
|
|
- **Permissions**: Browser microphone access required in System Preferences
|
|
- **Audio Routing**: Use BlackHole (Mac) for merging multiple audio sources
|
|
- **WebRTC**: Ensure proper CORS configuration for cross-origin streaming
|
|
- **Database**: Run `uv run alembic upgrade head` after pulling schema changes
|
|
|
|
## Pipeline/worker related info
|
|
|
|
If you need to do any worker/pipeline related work, search for "Pipeline" classes and their "create" or "build" methods to find the main processor sequence. Look for task orchestration patterns (like "chord", "group", or "chain") to identify the post-processing flow with parallel execution chains. This will give you abstract vision on how processing pipeling is organized.
|