# Meeting Assistant (Transcription Tool) **Version:** 0.6.0 **Status:** Beta (AI Insights Integration) Der **Meeting Assistant** ist eine leistungsstarke Suite zur Transkription und Bearbeitung von Audio-Aufnahmen. Er kombiniert lokale FFmpeg-Verarbeitung mit der Gemini 2.0 Flash AI. --- ## 1. Architektur & Stack * **FFmpeg Engine:** Automatisches Splitting großer Dateien in 30-Minuten-Segmente. * **Gemini 2.0 Flash:** AI-Transkription mit Fokus auf JSON-Struktur (Sprecher, Timestamps) und zur Generierung von Meeting-Analysen. * **Prompt Library:** Eine Sammlung von Vorlagen zur Steuerung der KI-Analyse. * **Structured Storage:** SQLite speichert jedes Segment als editierbares JSON-Array und die Ergebnisse der KI-Analyse. * **Unified UI:** Das Frontend fügt alle Segmente zu einem nahtlosen Dokument zusammen und bietet interaktive Analyse-Funktionen. --- ## 2. Key Features (v0.6.0) ### 🚀 **NEU:** AI Insights & Translation * **Übersetzung (DE/EN):** Übersetzt das gesamte Transkript mit einem Klick ins Englische. * **Meeting-Protokoll:** Erstellt automatisch ein formelles Protokoll (Meeting Minutes) mit Agenda, Entscheidungen und nächsten Schritten. * **Action Items:** Extrahiert eine Aufgabenliste mit Verantwortlichen und Fälligkeiten direkt aus dem Gespräch. * **Rollenbasierte Zusammenfassungen:** Generiert spezifische Zusammenfassungen, z.B. eine "Sales Summary", die sich auf Kundenbedürfnisse, Kaufsignale und nächste Schritte für das Vertriebsteam konzentriert. ### 🎙️ Intelligente Transkription * Unterstützt MP3/WAV bis 500MB. * Native Sprechererkennung und Zeitstempel-Normalisierung über Segmentgrenzen hinweg. ### 👥 Globales Sprecher-Management * **Speaker Bar:** Eine Übersicht aller im Dokument gefundenen Sprecher. * **Global Rename:** Mit einem Klick kann ein Sprecher (z.B. "Speaker A") im gesamten Dokument dauerhaft umbenannt werden (z.B. "Thomas"). ### ✂️ Präzises Schneiden (Trimming) * **Trim Start:** Löscht alles *vor* einer ausgewählten Zeile (ideal zum Entfernen von Vorgesprächen). * **Trim End:** Löscht alles *nach* einer ausgewählten Zeile (entfernt Verabschiedungen). * **Single Line Delete:** Einzelne Zeilen oder Störgeräusche können individuell entfernt werden. ### 📝 Editor & Export * **Inline-Edit:** Jeder Textblock und jeder Sprechername kann durch direktes Anklicken korrigiert werden. * **Copy Full Transcript:** Kopiert das gesamte, bereinigte Transkript inkl. Timestamps in die Zwischenablage. * **Copy Insights:** Jedes Analyse-Ergebnis kann einfach in die Zwischenablage kopiert werden. --- ## 3. API Endpunkte | Methode | Pfad | Beschreibung | | :--- | :--- | :--- | | `GET` | `/meetings` | Liste aller Meetings. | | `POST` | `/upload` | Audio-Upload & Prozess-Start. | | `POST` | `/meetings/{id}/insights` | **Neu:** Generiert eine Analyse (z.B. Protokoll, Action Items). | | `POST` | `/meetings/{id}/translate` | **Neu:** Übersetzt das Transkript in eine Zielsprache (aktuell: 'English'). | | `POST` | `/meetings/{id}/rename_speaker` | Globale Umbenennung in der DB. | | `PUT` | `/chunks/{id}` | Speichert manuelle Text-Korrekturen. | | `DELETE` | `/meetings/{id}` | Vollständiges Löschen. | --- ## 4. Roadmap * **v0.7: Search:** Globale Suche über alle Transkripte hinweg. * **v0.8: Q&A an das Meeting:** Ermöglicht, Fragen direkt an das Transkript zu stellen ("Was wurde zu Thema X beschlossen?"). * **v0.9: Export-Formate:** Export der Ergebnisse in verschiedene Formate (z.B. PDF, DOCX). --- ## 5. Development Notes & Troubleshooting Bei der Implementierung der AI-Insights-Funktion (v0.6.0) traten mehrere Probleme auf, deren Lösungen für die zukünftige Entwicklung wichtig sind: * **Isolierung von Microservices:** Der Versuch, eine zentrale `helpers.py`-Datei aus dem `transcription-app`-Container zu importieren, schlug mit einem `ModuleNotFoundError` fehl. * **Lösung:** Kritische Funktionen (wie der Gemini-API-Client) wurden in eine lokale Bibliothek (`/lib/gemini_client.py`) innerhalb des Service-Backends dupliziert, um den Service eigenständig zu machen. * **API-Schlüssel in Docker:** Der neue, isolierte Service konnte den API-Schlüssel nicht aus einer Datei lesen. * **Lösung:** Der `GEMINI_API_KEY` wurde als Umgebungsvariable über die `docker-compose.yml`-Datei an den Container übergeben. Dies ist die Best Practice für die Bereitstellung von "Secrets" für containerisierte Anwendungen. **Wichtig:** Ein `docker-compose restart` reicht nicht aus, um die Änderung zu übernehmen; ein `docker-compose up -d --force-recreate ` ist erforderlich. * **Modell-Kompatibilität:** API-Aufrufe schlugen mit `404 NOT_FOUND` fehl, weil versucht wurde, ein nicht zum API-Schlüssel passendes Modell (`gemini-1.5-flash`) zu verwenden. * **Lösung:** Der Modellname wurde auf das im Projekt etablierte und funktionierende Modell `gemini-2.0-flash` korrigiert. * **Datenformatierung:** Die KI lieferte generische Antworten, weil das an sie übergebene Transkript leer war. * **Lösung:** Die Analyse des rohen JSON-Outputs aus der Datenbank (`debug_chunks`-Endpunkt) zeigte, dass die Formatierungslogik die `absolute_seconds` zur korrekten chronologischen Sortierung verwenden muss. Die `_format_transcript`-Funktion wurde entsprechend angepasst.