# Meeting Assistant (Transcription Tool) **Version:** 0.1.0 **Status:** Beta (Core Functionality) Der **Meeting Assistant** ist ein lokaler Micro-Service zur Transkription und Analyse von Audio-Dateien (Meetings, Calls, Interviews). Er kombiniert die Datensicherheit einer lokalen Datenhaltung mit der Leistungsfähigkeit von Googles **Gemini 2.0 Flash** Modell für kostengünstige, hochqualitative Speech-to-Text Umwandlung. --- ## 1. Architektur Der Service folgt dem "Sidecar"-Pattern im Docker-Stack und ist vollständig in das Dashboard integriert. * **Frontend:** React (Vite + Tailwind) unter `/tr/`. * **Backend:** FastAPI (Python) unter `/tr/api/`. * **Processing:** * **FFmpeg:** Zerlegt große Audio-Dateien (> 2 Stunden) in verarbeitbare 30-Minuten-Chunks. * **Gemini 2.0 Flash:** Führt die eigentliche Transkription durch (via `google-genai` SDK). * **SQLite:** Speichert Metadaten, Status und Ergebnisse. * **Storage:** Lokales Docker-Volume für Audio-Uploads (werden nach Verarbeitung *nicht* gelöscht, um Re-Analysen zu ermöglichen). ### Datenfluss 1. **Upload:** User lädt MP3 hoch -> Speicherung in `/app/uploads_audio`. 2. **Chunking:** Backend startet Background-Task -> FFmpeg erstellt Segmente in `/app/uploads_audio/chunks/{id}/`. 3. **Transkription:** Loop über alle Chunks -> Upload zu Gemini File API -> Generierung -> Löschung aus Gemini Cloud -> Speicherung in DB. 4. **Assemblierung:** (Geplant für v0.2) Zusammenfügen der Text-Fragmente. --- ## 2. API Endpunkte Basis-URL: `/tr/api` | Methode | Pfad | Beschreibung | | :--- | :--- | :--- | | `GET` | `/meetings` | Liste aller Meetings inkl. Status. | | `POST` | `/upload` | Upload einer Audio-Datei (`multipart/form-data`). Startet Prozess. | | `GET` | `/health` | Status-Check. | --- ## 3. Datenbank Schema (SQLite) Datei: `transcripts.db` ### `meetings` * `id`: PK * `title`: Dateiname (z.B. "Jours_Fixe_Januar.mp3") * `status`: `UPLOADED` -> `SPLITTING` -> `TRANSCRIBING` -> `COMPLETED` * `duration_seconds`: Gesamtlänge * `file_path`: Lokaler Pfad ### `transcript_chunks` * `id`: PK * `meeting_id`: FK * `chunk_index`: 0, 1, 2... * `raw_text`: Das rohe Transkript von Gemini. --- ## 4. Konfiguration & Limits * **Max Upload Size:** 500 MB (konfiguriert in Nginx). * **Chunk Size:** 30 Minuten (1800 Sekunden). * **Modell:** `gemini-2.0-flash` (Temperatur 0.1 für Faktentreue). * **Kosten:** Gemini 2.0 Flash ist extrem günstig (Audio-Input), aber beachten Sie die API-Limits bei sehr vielen parallelen Uploads. --- ## 5. Roadmap / Next Steps * **v0.2:** Frontend-Detailansicht mit Volltext-Anzeige. * **v0.3:** Sprecher-Identifikation (Mapping "Speaker A" -> "Thomas"). * **v0.4:** "Meeting Notes" Generator (Zusammenfassung via LLM). --- ## 6. Troubleshooting * **Upload bricht ab:** Prüfen Sie, ob die Datei > 500MB ist oder der Nginx-Timeout (1800s) greift. * **Status bleibt bei "TRANSCRIBING":** Prüfen Sie die Docker-Logs (`docker logs transcription-app`). Evtl. ist der API-Key ungültig oder das Quota erschöpft. * **FFmpeg Fehler:** Stellen Sie sicher, dass das Eingangsformat valide ist (MP3, WAV, M4A werden meist unterstützt).