Skip to content

About

Local assistant for Linux that records a webinar, transcribes it, summarises it and emails the report, without the audio leaving the machine. / Assistant local pour Linux qui enregistre un webinar, le transcrit, le résume et envoie le compte rendu par e-mail, sans que l'audio quitte la machine.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Briefly AI — Webinar Assistant (POC)

English summary. Briefly AI is a local, privacy-first assistant for Linux that writes up a webinar for you: join the webinar, click Start, and leave. It captures the audio, transcribes it with faster-whisper, analyses it with a local model (llama.cpp) and emails you a structured summary. No audio or webinar content leaves your machine. This is a proof of concept, and the documentation is in French.

Assistant local, privacy-first, qui automatise le compte rendu d'un webinar sur Linux : vous rejoignez le webinar, cliquez sur Start, et partez. L'application capture l'audio, transcrit, analyse et envoie un résumé structuré par email — sans qu'aucun audio ni contenu du webinar ne quitte votre machine.

Je rejoins le webinar  →  Start  →  je pars  →  je reçois le résumé par email

État affiché pendant l'exécution : Recording → Transcribing → AI Analysis → Sending → Done

POC — voir docs/ARCHITECTURE.md pour l'analyse du besoin, les choix techniques et leurs justifications, et les limites connues de cette version.

Pourquoi pas les solutions existantes ?

Les outils de compte rendu de réunion/webinar actuels (Otter.ai, Fireflies, Zoom AI Companion, Microsoft Copilot, Fathom, Grain, etc.) souffrent de plusieurs limites pour un usage exigeant en confidentialité :

  • Cloud obligatoire : l'audio, la transcription et parfois le contenu complet du webinar transitent par les serveurs du fournisseur pour être traités, ce qui est inacceptable pour des contenus confidentiels, internes ou soumis à des contraintes réglementaires (RGPD, secret professionnel, propriété intellectuelle).
  • Bot de réunion intrusif : la plupart nécessitent qu'un "bot" rejoigne explicitement l'appel (visible des autres participants, à autoriser côté organisateur), ce qui ne fonctionne pas pour un simple webinar visionné dans un navigateur, sans contrôle sur les participants.
  • Dépendance à un abonnement et à un fournisseur : coût récurrent, disponibilité conditionnée à un service tiers, export de données parfois limité, verrouillage propriétaire du format de sortie.
  • Intervention manuelle résiduelle : il faut souvent démarrer/arrêter l'enregistrement soi-même, puis récupérer et diffuser le résumé manuellement — l'automatisation de bout en bout (jusqu'à l'email) est rarement complète.
  • Boîte noire côté IA : peu de garanties ou de mécanismes explicites contre les hallucinations du résumé par rapport à la transcription source.

Ce POC répond à ces limites en restant strictement local (aucune donnée du webinar ne sort de la machine, seul le résumé final est envoyé par email), générique (aucune intégration à un client de visio particulier), et entièrement automatisé une fois lancé.

Pipeline

Audio système (parec)
   → Speech-to-Text local (faster-whisper)
   → transcription (texte + JSON)
   → découpage en chunks si nécessaire
   → analyse LLM locale (llama.cpp, map-reduce)
   → résumé structuré consolidé (JSON)
   → évaluation de fidélité (heuristiques)
   → envoi par email (SMTP) — seule sortie réseau

Confidentialité

  • Aucun audio, aucune transcription et aucun contenu du webinar n'est envoyé vers un service cloud : le STT (faster-whisper) et le LLM (llama.cpp) tournent 100 % localement, sur CPU.
  • Le seul point de sortie réseau de l'application est l'envoi du résumé final par email (briefly_ai/emailing.py).

Prérequis système

  • Linux desktop générique avec PulseAudio ou PipeWire (pipewire-pulse).
  • Python 3.11+.
  • ~16 Go de RAM, aucun GPU requis.
  • Paquets système :
    # Debian/Ubuntu
    sudo apt install pulseaudio-utils python3-tk
    # Fedora
    sudo dnf install pulseaudio-utils python3-tkinter
    # Arch
    sudo pacman -S libpulse tk
    (python3-tk n'est nécessaire que pour l'interface graphique.)

Installation

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

cp config.example.yaml config.yaml
cp .env.example .env   # renseignez vos identifiants SMTP, puis: export $(grep -v '^#' .env | xargs)

# Modèle LLM local (GGUF, ~2 Go, téléchargé séparément — voir docs/ARCHITECTURE.md)
./scripts/download_models.sh

Le modèle Whisper (faster-whisper) est téléchargé automatiquement au premier lancement par la bibliothèque elle-même.

Utilisation

CLI (à valider en premier)

python -m briefly_ai.cli start --config config.yaml --title "Nom du webinar"

Rejoignez votre webinar, appuyez sur Entrée pour démarrer, puis n'intervenez plus : la fin du webinar est détectée automatiquement après une période de silence prolongé (configurable), et le résumé est envoyé par email.

Interface graphique

python -m briefly_ai.gui

Fenêtre minimale (Tkinter) : bouton Start, état courant, bouton d'arrêt manuel optionnel, journal des étapes.

Configuration (config.yaml)

Voir config.example.yaml, commenté. Principaux réglages :

Section Clé Rôle
audio silence_duration_seconds Durée de silence avant détection automatique de fin de webinar
transcription model_size Taille du modèle Whisper (tiny…medium)
summarization model_path Chemin du modèle LLM GGUF local
summarization chunk_chars Taille des morceaux de transcription envoyés au LLM
email smtp_host, recipients, ... Envoi du résumé final
evaluation min_coverage_ratio Seuil d'alerte de fidélité du résumé

Les secrets (mot de passe SMTP) se référencent via ${VARIABLE} et sont résolus depuis l'environnement — jamais committés en clair.

Format de sortie structuré

Chaque session produit, dans sessions/<horodatage>/ :

  • audio.wav — capture brute
  • transcript.json — transcription (segments horodatés)
  • summary.json — résumé structuré, contrat utilisé pour l'email :
{
  "executive_summary": "…",
  "key_points": ["…"],
  "decisions": ["…"],
  "action_items": ["…"],
  "resources": ["…"]
}
  • faithfulness.json — résultat des évaluations de fidélité (voir plus bas)

Fidélité du résumé (anti-hallucination)

Le prompt système interdit explicitement au LLM d'inventer des informations absentes de la transcription (briefly_ai/summarization/prompts.py). En complément, briefly_ai/evaluation/faithfulness.py calcule après coup :

  • coverage_ratio : proportion des mots significatifs du résumé qui apparaissent réellement dans la transcription (un score bas indique un possible vocabulaire halluciné) ;
  • compression_ratio : longueur résumé / longueur transcription, pour repérer un résumé vide ou anormalement long ;
  • unsupported_terms : liste des termes du résumé absents de la transcription, pour investigation manuelle rapide.

Ce sont des heuristiques légères (pas de dépendance supplémentaire), pas une preuve formelle — voir docs/ARCHITECTURE.md pour leurs limites.

Extensibilité

Chaque composant est isolé derrière une interface (Protocol) et injectable dans WebinarAssistantPipeline :

  • briefly_ai/transcription/base.py → remplacer faster-whisper par un autre moteur STT local (vosk, whisper.cpp, ...).
  • briefly_ai/summarization/base.py → remplacer llama.cpp par un autre runtime LLM local (Ollama, etc.) sans toucher au reste du pipeline.

Tests

pip install -r requirements-dev.txt
pytest

Les tests couvrent le découpage en chunks, le schéma de résumé structuré, le parsing JSON du LLM, les heuristiques de fidélité, le suivi de silence audio et le pipeline complet (avec des doublures pour l'audio/STT/LLM/email — aucun test ne nécessite de matériel audio réel ni de modèle téléchargé).

Limites connues de ce POC

  • La capture audio et la détection de silence n'ont pas pu être testées sur un véritable environnement PulseAudio/PipeWire dans cet environnement de développement (sandbox sans serveur audio) : la logique est unitairement testée (SilenceTracker, calcul RMS), mais une validation sur poste de travail réel est recommandée avant usage.
  • L'interface graphique a été testée en pilotage automatique via Xvfb (pas d'aperçu visuel humain dans cet environnement).
  • L'évaluation de fidélité est lexicale (pas de lemmatisation) : des reformulations légitimes du LLM peuvent faire baisser le score sans qu'il y ait réellement hallucination.

Licence

MIT — voir LICENSE.

About

Local assistant for Linux that records a webinar, transcribes it, summarises it and emails the report, without the audio leaving the machine. / Assistant local pour Linux qui enregistre un webinar, le transcrit, le résume et envoie le compte rendu par e-mail, sans que l'audio quitte la machine.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages