MAIA - Meeting AI Assistant
Go to file
Arlei Nalasso 34e0661b0d feat: initial MAIA monorepo - frontend, backend, diarization API
- PWA React 18 + Vite + TypeScript com gravacao continua e upload de chunks
- Backend FastAPI + Celery + PostgreSQL + Redis para processamento assincrono
- Diarization API com SpeechBrain ECAPA-TDNN para identificacao de speakers
- Integracao com Whisper.cpp GPU (large-v3) para transcricao
- Integracao com LLM deepseek-v3.1 para analise de reunioes
- Autenticacao SSO via Keycloak
- README.md completo com arquitetura, instalacao e configuracao
- CHANGELOG.md com historico v1.0.0

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-23 17:52:10 -03:00
backend feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00
diarization feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00
frontend feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00
.gitignore feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00
CHANGELOG.md feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00
README.md feat: initial MAIA monorepo - frontend, backend, diarization API 2026-04-23 17:52:10 -03:00

README.md

MAIA — Meeting AI Assistant

MAIA Logo

Grave, transcreva e analise suas reuniões com Inteligência Artificial

InstalaçãoArquiteturaConfiguraçãoDeployAPI


📖 Sobre o Projeto

O MAIA (Meeting AI Assistant) é uma plataforma desenvolvida pela ASAP Telecom para gravar, transcrever e analisar reuniões automaticamente usando Inteligência Artificial.

Funcionalidades Principais

  • 🎙️ Gravação contínua de reuniões via navegador (sem gaps, usando MediaRecorder API com timeslice)
  • 📝 Transcrição automática com Whisper.cpp na GPU (modelo large-v3, alta precisão)
  • 👥 Diarização de speakers — identifica quem falou o quê (SpeechBrain ECAPA-TDNN, ~85% precisão)
  • 🤖 Análise com IA — resumo, pontos de ação e insights com LLM (deepseek-v3.1)
  • 🔐 Autenticação SSO via Keycloak
  • 📱 PWA instalável em Android e iOS
  • 🔎 Histórico com busca de reuniões passadas
  • 👤 Identificação de speakers por enrollment de voz

🏗️ Arquitetura

┌─────────────────────────────────────────────────────────────────┐
│                        CLIENTE                                  │
│   Browser / PWA (React 18 + Vite + TypeScript)                  │
│   MediaRecorder API → chunks de áudio → upload automático       │
└────────────────────────┬────────────────────────────────────────┘
                         │ HTTPS
                         ▼
┌─────────────────────────────────────────────────────────────────┐
│                  APP SERVER (5.0.0.181)                         │
│  ┌─────────────┐  ┌──────────────────┐  ┌──────────────────┐   │
│  │  Nginx :80  │  │ Backend API :8090 │  │ Diarization :5060│   │
│  │  (Frontend) │  │ FastAPI + Celery  │  │ FastAPI+SpeechBr.│   │
│  └─────────────┘  └────────┬─────────┘  └────────┬─────────┘   │
│                            │                      │             │
│  ┌─────────────┐  ┌────────▼─────────┐           │             │
│  │  PostgreSQL │  │  Redis (Celery)   │           │             │
│  └─────────────┘  └──────────────────┘           │             │
└────────────────────────────┬──────────────────────┼────────────┘
                             │                      │
              ┌──────────────▼──────┐    ┌──────────▼───────────┐
              │   GPU SERVER        │    │   LLM Server         │
              │ 10.100.16.13 :5003  │    │ asapai.asaptelecom.  │
              │ Whisper.cpp GPU     │    │ com.br/ollama        │
              │ AMD GPU, large-v3   │    │ deepseek-v3.1:671b   │
              └─────────────────────┘    └──────────────────────┘

              ┌─────────────────────┐
              │   Keycloak SSO      │
              │ Autenticação/Authz  │
              └─────────────────────┘

📁 Estrutura do Monorepo

Maia/
├── frontend/          # PWA React 18 + Vite + TypeScript
├── backend/           # API FastAPI + Celery + PostgreSQL
├── diarization/       # API de Diarização com SpeechBrain
├── README.md
└── CHANGELOG.md

⚙️ Requisitos

Componente Requisito
Node.js 18+
Python 3.11+
PostgreSQL 14+
Redis 7+
GPU AMD/NVIDIA (para Whisper GPU)
RAM 16 GB mínimo (32 GB recomendado)
VRAM 8 GB mínimo para Whisper large-v3

🚀 Instalação

Frontend

cd frontend
npm install
cp .env.example .env
# Edite o .env com as variáveis necessárias
npm run dev          # desenvolvimento
npm run build        # produção

Backend

cd backend
python -m venv venv
source venv/bin/activate   # Linux/Mac
venv\Scripts\activate      # Windows
pip install -r requirements.txt
cp .env.example .env
# Edite o .env com as variáveis necessárias
alembic upgrade head       # aplicar migrações
uvicorn app.main:app --host 0.0.0.0 --port 8090

Diarization API

cd diarization
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --host 0.0.0.0 --port 5060

🔧 Configuração

Variáveis de Ambiente — Backend (backend/.env)

DATABASE_URL=postgresql://user:password@localhost:5432/maia
REDIS_URL=redis://localhost:6379/0
KEYCLOAK_URL=https://seu-keycloak.exemplo.com
KEYCLOAK_REALM=seu-realm
KEYCLOAK_CLIENT_ID=maia-backend
OLLAMA_URL=https://llm.exemplo.com/ollama
OLLAMA_MODEL=deepseek-v3.1:671b-cloud
WHISPER_URL=http://gpu-server:5003

Variáveis de Ambiente — Diarization API (diarization/.env)

WHISPER_ORIGIN=http://gpu-server:5003
VOICE_DB_PATH=/data/voice_db
SPEAKER_CONFIDENCE_THRESHOLD=0.75
HF_TOKEN=seu_token_huggingface
SPEECHBRAIN_CACHE=/data/speechbrain_cache

Variáveis de Ambiente — Frontend (frontend/.env)

VITE_API_URL=http://seu-backend:8090
VITE_KEYCLOAK_URL=https://seu-keycloak.exemplo.com
VITE_KEYCLOAK_REALM=seu-realm
VITE_KEYCLOAK_CLIENT_ID=maia-frontend

🐳 Deploy

Com Podman/Docker Compose

# Na raiz do projeto
podman-compose up -d

Deploy Manual

Backend (systemd)

# /etc/systemd/system/maia-backend.service
[Unit]
Description=MAIA Backend API
After=network.target postgresql.service redis.service

[Service]
User=maia
WorkingDirectory=/opt/Backend/meeting-assistant-api
ExecStart=/opt/Backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8090
Restart=always

[Install]
WantedBy=multi-user.target

Celery Worker

celery -A app.celery_app worker --loglevel=info -Q transcription,analysis

Frontend (Nginx)

server {
    listen 80;
    root /var/www/maia;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:8090/;
    }
}

🔌 Endpoints Principais da API

Backend API (http://server:8090)

Método Endpoint Descrição
POST /meetings/ Criar nova reunião
GET /meetings/ Listar reuniões
GET /meetings/{id} Detalhes da reunião
DELETE /meetings/{id} Deletar reunião
POST /meetings/{id}/upload-chunk Upload de chunk de áudio
POST /meetings/{id}/finalize Finalizar e processar reunião
GET /meetings/{id}/transcript Transcrição completa
GET /meetings/{id}/analysis Análise da IA
POST /speakers/enroll Enrollar speaker com voz
GET /speakers/ Listar speakers
GET /admin/users (Admin) Listar usuários

Diarization API (http://server:5060)

Método Endpoint Descrição
POST /transcribe Transcrever + diarizar áudio
POST /enroll Enrollar voz de speaker
GET /speakers Listar speakers cadastrados
DELETE /speakers/{name} Remover speaker
GET /health Health check

🛠️ Tecnologias

Frontend

Tecnologia Versão Uso
React 18 Framework UI
Vite 5 Build tool
TypeScript 5 Tipagem estática
Zustand 4 Gerenciamento de estado
Axios 1.x Cliente HTTP
Workbox 7 PWA / Service Worker
MediaRecorder API Gravação de áudio

Backend

Tecnologia Versão Uso
FastAPI 0.110+ Framework API
SQLAlchemy 2.x ORM
Alembic 1.x Migrações de banco
PostgreSQL 14+ Banco de dados
Celery 5.x Processamento assíncrono
Redis 7+ Broker/Cache
httpx 0.27+ Cliente HTTP assíncrono

Diarização & IA

Tecnologia Uso
Whisper.cpp Transcrição de áudio (GPU)
SpeechBrain ECAPA-TDNN Diarização de speakers
pyannote.audio Diarização (fallback)
librosa Processamento de áudio
deepseek-v3.1 Análise e resumo de reuniões

Infraestrutura

Tecnologia Uso
Podman Containerização
Nginx Reverse proxy / Servir frontend
systemd Gerenciamento de serviços
Keycloak SSO / Autenticação

📄 Licença

Proprietário — ASAP Telecom. Todos os direitos reservados.


Desenvolvido com ❤️ pela equipe ASAP Telecom