- Nouveau helper ui/_tk_spawn.py : chaque fenêtre Tk dans son propre thread avec sa propre racine tk.Tk (plus de racine partagée) - app.py : thread principal pour le hotkey + attente stop_event, thread séparé pour l'icône pystray - tray.py : suppression de get_root/_defer_tk/_present_window, spawn_tk_window pour chaque dialogue, callbacks on_result au lieu de wait_window bloquant
AI-Typewriter
Application Python qui tourne en arrière-plan (icône dans la zone de notification de Windows, aucune fenêtre au démarrage), lit le contenu du presse-papier sur un raccourci global, l'envoie à un modèle IA, puis réécrit la réponse caractère par caractère à chaque pression de touche physique.
Un profil spécialisé « Mathématiques (LaTeX) » marque les équations avec [EQ]...[/EQ] : l'application les intercepte et déclenche Alt+= pour ouvrir une équation (Word/OneNote) et → pour en sortir.
Fonctionnement
- L'utilisateur copie le texte à envoyer à l'IA.
- Raccourci global par défaut :
Ctrl+Alt+A. - L'application lit le presse-papier et envoie au modèle du profil actif.
- Une icône reste disponible dans la zone de notification : elle permet d'ouvrir les journaux, d'ajouter/commuter des profils et de gérer les clés d'API.
- Chaque touche physique appuyée ensuite écrit l'élément suivant de la réponse (caractère ou séquence d'équation).
- Le hook clavier est libéré automatiquement à la fin de la réponse.
Installation depuis les sources
python -m venv .venv
. .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -r requirements.txt
pip install -e .
python main.py
À la première exécution, l'application crée son fichier de configuration :
%APPDATA%\ai-typewriter\config.json (Linux : ~/.config/ai-typewriter/config.json).
Configuration (profils)
La configuration contient une liste de profils nommés et le profil actif. Chaque profil décrit :
| Champ | Description |
|---|---|
name |
Libellé affiché dans les menus |
provider |
ollama, openai, openrouter, gemini, custom (OpenAI-compatible) |
model |
Nom du modèle (choisissable via le sélecteur) |
server_url |
Base de l'instance (ex. http://localhost:11434) |
credential |
Nom logique de la clé d'API (voir « Authentification ») |
system_prompt |
Instructions données au modèle |
equation_enabled |
Active l'interception des marqueurs d'équation |
eq_start_marker / eq_end_marker |
Marqueurs (défaut [EQ] / [/EQ]) |
eq_start_key / eq_end_key |
Touches déclenchées (défaut alt+= / right) |
Deux profils sont créés par défaut : Général et Mathématiques (LaTeX).
Profil Mathématiques (LaTeX)
Le prompt système demande au modèle de produire du LaTeX encadré par [EQ]...[/EQ], par exemple :
Les racines sont [EQ]z_1 = x + iy[/EQ] et [EQ]z_2 = x - iy[/EQ].
À chaque [EQ] l'application envoie Alt+= (ouvre une équation inline), tape le LaTeX littéralement, puis envoie → à chaque [/EQ]. Ce comportement est désactivé par défaut sur les autres profils (le texte est tapé tel quel).
Zone de notification (icône)
L'application se lance sans fenêtre visible. Le menu de l'icône propose :
- Ouvrir les logs — fenêtre des journaux en temps réel (également écrits dans
%APPDATA%\ai-typewriter\logs\app.log). - Ajouter un profil — formulaire (nom, fournisseur, modèle, serveur, prompt, équations).
- Modifier le profil — sous-menu listant tous les profils pour choisir le profil actif.
- Gérer l'authentification — enregistrer les clés d'API des fournisseurs.
- Quitter — arrête le processus.
Sélection et téléchargement des modèles
Dans le formulaire de profil, « Choisir / télécharger… » ouvre un sélecteur qui :
- liste automatiquement les modèles déjà disponibles localement (Ollama
/api/tags) ; - si connecté à Internet, permet de rechercher dans la bibliothèque publique d'Ollama, de vérifier un modèle exact et de lancer son téléchargement (
ollama pull).
Authentification des fournisseurs
Les clés d'API ne sont jamais écrites dans le fichier de configuration. Chaque profil référence une clé par un nom logique ; la clé est stockée de façon sécurisée dans le Gestionnaire d'identifiants de Windows (via keyring). Le menu Gérer l'authentification permet de les enregistrer, vérifier ou supprimer.
Compilation (Windows)
build.bat
Le script crée .venv, installe les dépendances, puis produit un exécutable autonome sans console dans dist\ai-typewriter.exe. Il tourne directement en zone de notification.
Test rapide sans hook clavier ni icône
python main.py --debug --ask "Résume: bonjour tout le monde"
Envoie le prompt au profil actif et imprime la réponse brute (aucune icône ni interception clavier).
Tests
. .venv/bin/activate
pytest
La suite couvre le découpage en actions (caractères/équations), le stepper, le dépôt de profils, les clients IA (Ollama/Gemini/OpenAI), le stockage sécurisé (keyring mocké) et le catalogue de modèles — sans réel hook clavier, réseau ni Gestionnaire d'identifiants.