# OpenSquared Assistant PWA POC de PWA mobile pour parler a l'assistant depuis un telephone. ## Fonctionnalites - Interface mobile installable sur Android via "Ajouter a l'ecran d'accueil". - Bouton micro avec transcription Groq Whisper. - Reponse LLM Groq. - Lecture audio automatique de la reponse avec une voix francaise douce cote navigateur. - Envoi d'emails Gmail avec carnet de contacts `contacts.json`. - Ajout de contacts par conversation, par exemple : `Ajoute Sophie avec l'adresse sophie@example.com`. - Memoire professionnelle SQLite pour clients, projets, taches, notes et depots Git associes. ## Configuration locale ```powershell cd pwa_assistant copy .env.example .env ``` Remplir `.env` : ```text GROQ_API_KEY=... GMAIL_EMAIL=... GMAIL_PASSWORD=... APP_SECRET=... TTS_PROVIDER=browser CONTACTS_FILE=/root/openbot/data/contacts.json MEMORY_DB=/root/openbot/data/memory.sqlite ``` Installer : ```powershell C:\Users\baron\AppData\Local\Programs\Python\Python313\python.exe -m pip install -r requirements.txt ``` Lancer : ```powershell C:\Users\baron\AppData\Local\Programs\Python\Python313\python.exe app.py ``` Puis ouvrir : ```text http://localhost:8080 ``` Sur telephone, le micro necessite HTTPS sauf cas particulier localhost. ## Deploiement VPS Hostinger Exemple Ubuntu pour le VPS actuel (`/root/openbot`) : ```bash cd /root git clone https://gitea.open-squared.tech/admin/openbot.git openbot cd openbot python3 -m venv .venv . .venv/bin/activate pip install -r requirements.txt cp .env.example .env nano .env ``` Service systemd pour que l'app continue apres fermeture de Putty : ```bash cp deploy/opensquared-assistant.service /etc/systemd/system/opensquared-assistant.service systemctl daemon-reload systemctl enable --now opensquared-assistant ``` Commandes faciles : ```bash systemctl start opensquared-assistant systemctl stop opensquared-assistant systemctl restart opensquared-assistant systemctl status opensquared-assistant journalctl -u opensquared-assistant -f ``` Optionnel, installer le raccourci `openbot` : ```bash install -m 755 deploy/openbot /usr/local/bin/openbot openbot status openbot restart openbot logs ``` Nginx : ```nginx server { server_name assistant.ton-domaine.com; location / { proxy_pass http://172.17.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` HTTPS avec Certbot : ```bash sudo certbot --nginx -d assistant.ton-domaine.com ``` ## Installation Android 1. Ouvrir l'URL HTTPS dans Chrome Android. 2. Menu `...`. 3. `Ajouter a l'ecran d'accueil` ou `Installer l'application`. 4. Ouvrir l'icone `Assistant`. 5. Appuyer une fois sur `Demarrer` pour lancer le mode mains libres. 6. Parler naturellement : apres 2 secondes de silence, le message est envoye. 7. Appuyer sur `Arreter` pour couper l'ecoute continue. ## Contacts email Les contacts sont stockes dans `contacts.json` en local. Sur le VPS, le service utilise `/root/openbot/data/contacts.json` pour eviter de modifier les fichiers suivis par Git. Tu peux les ajouter directement dans l'assistant : ```text Ajoute Sophie avec l'adresse sophie@example.com ``` Ensuite tu peux dire : ```text Envoie un email a Sophie ``` L'assistant remplacera `Sophie` par son adresse email. ## Memoire professionnelle Les informations professionnelles sont stockees dans une base SQLite. Sur le VPS, le service utilise : ```text /root/openbot/data/memory.sqlite ``` Exemples de phrases : ```text SAFTCO est un nouveau client, note quelque part que je dois rappeler le directeur. Note que le projet Portail SAFTCO est associe au client SAFTCO. Associe le repo /root/openbot/repos/saftco au projet Portail SAFTCO. Qu'est-ce que tu sais sur SAFTCO ? ``` La memoire peut contenir des clients, projets, taches, notes et depots Git associes a un projet. ### Architecture de la memoire L'assistant utilise une architecture en deux niveaux : - les ecritures passent par des actions controlees (`ajouter_client`, `ajouter_tache`, `terminer_tache`, etc.) ; - les lectures et analyses passent par un routeur LLM qui peut generer une requete SQL readonly sur le schema SQLite. Ce choix evite de coder une action specifique pour chaque question possible. Par exemple, `quel client a le plus de taches ?`, `quelles sont mes taches a faire ?` ou `cette tache est pour quel client ?` peuvent etre resolus en lisant la base plutot qu'en ajoutant des routes rigides. Le routeur recoit le dernier message, l'historique recent, le schema de la base et un extrait de la memoire. Il decide entre : - executer une action d'ecriture autorisee ; - lancer une lecture SQL readonly ; - demander une clarification si la cible est ambigue. Les requetes SQL generees sont limitees a des `SELECT` et passent par une validation readonly dans `memory.py`. ## Notes - Groq Orpheus TTS doit etre accepte dans la console Groq pour fonctionner : https://console.groq.com/playground?model=canopylabs%2Forpheus-v1-english - Par defaut `TTS_PROVIDER=browser` utilise la voix francaise du telephone pour eviter l'accent anglais du modele Groq Orpheus. - La PWA privilegie les voix feminines francaises disponibles sur le telephone, avec un debit plus lent et un ton plus doux. - Pour revenir au TTS Groq, mettre `TTS_PROVIDER=groq` dans `.env`. - La lecture audio automatique depend toujours des regles du navigateur mobile, mais elle marche mieux dans une PWA apres un tap utilisateur que dans Telegram.