# Voice Service

Der Voice Service ist eine Voice-First Interface für die Breakpilot-Plattform mit DSGVO-konformem Design.

## Übersicht

| Eigenschaft | Wert |
|-------------|------|
| **Port** | 8082 |
| **Framework** | FastAPI (Python) |
| **Streaming** | WebSocket |
| **DSGVO** | Privacy-by-Design |

## Architektur

```
┌─────────────────────────────────────────────────────────────────┐
│                    Voice Service (Port 8082)                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│   ┌──────────────┐    ┌──────────────┐    ┌──────────────┐      │
│   │   Sessions   │───>│    Task      │───>│    BQAS      │      │
│   │   API        │    │ Orchestrator │    │  (Quality)   │      │
│   └──────────────┘    └──────────────┘    └──────────────┘      │
│                              │                                    │
│         ┌────────────────────┼────────────────────┐              │
│         │                    │                    │              │
│         ▼                    ▼                    ▼              │
│   ┌──────────────┐    ┌──────────────┐    ┌──────────────┐      │
│   │  WebSocket   │    │  Encryption  │    │   Logging    │      │
│   │  Streaming   │    │  Service     │    │  (structlog) │      │
│   └──────────────┘    └──────────────┘    └──────────────┘      │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

## Kernkomponenten

### PersonaPlex + TaskOrchestrator

- Voice-first Interface für Breakpilot
- Real-time Voice Processing
- Multi-Agent Integration

### DSGVO-Compliance (Privacy-by-Design)

| Feature | Beschreibung |
|---------|--------------|
| **Keine Audio-Persistenz** | Nur RAM-basiert, keine dauerhafte Speicherung |
| **Namespace-Verschlüsselung** | Schlüssel nur auf Lehrer-Gerät |
| **TTL-basierte Löschung** | Automatische Datenlöschung nach Zeitablauf |
| **Transcript-Verschlüsselung** | Verschlüsselte Transkripte |

## API-Endpunkte

### Sessions

| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| POST | `/api/v1/sessions` | Session erstellen |
| GET | `/api/v1/sessions/:id` | Session abrufen |
| DELETE | `/api/v1/sessions/:id` | Session beenden |

### Task Orchestration

| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| POST | `/api/v1/tasks` | Task erstellen |
| GET | `/api/v1/tasks/:id` | Task-Status abrufen |

### BQAS (Quality Assessment)

| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| POST | `/api/v1/bqas/evaluate` | Qualitätsbewertung |
| GET | `/api/v1/bqas/metrics` | Metriken abrufen |

### WebSocket

| Endpoint | Beschreibung |
|----------|--------------|
| `/ws/voice` | Real-time Voice Streaming |

### Health

| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| GET | `/health` | Health Check |
| GET | `/ready` | Readiness Check |

## Verzeichnisstruktur

```
voice-service/
├── main.py                    # FastAPI Application
├── config.py                  # Konfiguration
├── pyproject.toml             # Projekt-Metadaten
├── requirements.txt           # Dependencies
├── api/
│   ├── sessions.py            # Session-Management
│   ├── streaming.py           # WebSocket Voice Streaming
│   ├── tasks.py               # Task Orchestration
│   └── bqas.py                # Quality Assessment
├── services/
│   ├── task_orchestrator.py   # Task-Routing
│   └── encryption.py          # Verschlüsselung
├── bqas/
│   ├── judge.py               # LLM Judge
│   └── quality_judge_agent.py # Agent-Integration
├── models/                    # Datenmodelle
├── scripts/                   # Utility-Scripts
└── tests/                     # Test-Suite
```

## Konfiguration

```env
# .env
VOICE_SERVICE_PORT=8082
REDIS_URL=redis://localhost:6379
DATABASE_URL=postgresql://...
ENCRYPTION_KEY=...
TTL_MINUTES=60
```

## Entwicklung

```bash
# Dependencies installieren
cd voice-service
pip install -r requirements.txt

# Server starten
uvicorn main:app --reload --port 8082

# Tests ausführen
pytest -v
```

## Docker

Der Service läuft als Teil von docker-compose.yml:

```yaml
voice-service:
  build:
    context: ./voice-service
  ports:
    - "8082:8082"
  environment:
    - REDIS_URL=redis://valkey:6379
  depends_on:
    - valkey
    - postgres
```

## Weiterführende Dokumentation

- [Multi-Agent Architektur](../../architecture/multi-agent.md)
- [BQAS Quality System](../../architecture/bqas.md)
