- Remplace "llama3.1" par "deepseek-r1:1.5b"
ai-typewriter
Application Python qui lit la dernière entrée texte du presse-papier avec un raccourci global, l'envoie à un modèle IA, puis remplace chaque pression de touche suivante par le caractère suivant de la réponse.
Fonctionnement
- L'utilisateur copie manuellement le texte à envoyer à l'IA.
- Raccourci global par défaut :
Ctrl+Alt+A. - L'application lit directement la dernière entrée du presse-papier, sans simuler
Ctrl+C. - Le texte capturé est journalisé puis envoyé à Ollama ou Gemini.
- Le temps de génération de la réponse est journalisé.
- Quand la réponse arrive, le mode dactylographie s'active.
- Chaque touche physique appuyée est interceptée et remplacée par le prochain caractère de la réponse IA.
- Le hook clavier est libéré automatiquement après le dernier caractère.
L'application n'interprète pas les équations et ne lance pas Alt+=. Elle écrit uniquement le texte généré, caractère par caractère. Pour les maths, le modèle peut produire du LaTeX encadré par des marqueurs [EQ]...[/EQ], puis la gestion Word peut être faite ailleurs.
Installation depuis les sources
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
cp config.json.template config.json
python main.py
Sous Linux, le paquet keyboard nécessite souvent les droits root ou l'accès aux périphériques /dev/input. Sous Windows, lancez l'exécutable dans une session utilisateur normale.
Configuration
Copiez config.json.template vers config.json puis adaptez :
{
"provider": "ollama",
"model": "llama3.1",
"api_key": "",
"server_url": "http://localhost:11434",
"hotkey": "ctrl+alt+a",
"request_timeout_seconds": 300,
"math_text_format": "plain"
}
Ollama
{
"provider": "ollama",
"model": "llama3.1",
"server_url": "http://localhost:11434"
}
Gemini
{
"provider": "gemini",
"model": "gemini-1.5-flash",
"api_key": "VOTRE_CLE",
"server_url": "https://generativelanguage.googleapis.com"
}
Timeout IA
request_timeout_seconds vaut 300 par défaut. Si Ollama charge un gros modèle ou répond lentement, augmentez cette valeur. Mettez 0 pour désactiver le timeout côté application.
Configuration maths LaTeX
Pour laisser le modèle générer du LaTeX tout en indiquant clairement les débuts/fins d'équations :
cp config.math-latex.template config.json
Cette config garde :
"math_text_format": "plain"
Donc l'application ne transforme rien. Elle tape littéralement la réponse reçue, caractère par caractère.
Exemple de réponse demandée au modèle :
Les racines sont [EQ]z_1 = x + iy[/EQ] et [EQ]z_2 = x - iy[/EQ].
Pour les fractions, intégrales, sommes, etc., le modèle peut utiliser du LaTeX standard dans les balises :
On obtient [EQ]\frac{a+b}{c+d}[/EQ] puis [EQ]\int_0^1 f(x)\,dx[/EQ].
Modes disponibles :
plain: mode recommandé ; injecte la réponse exactement telle que le modèle l'a renvoyée.unicode: ancien mode texte Unicode (z_1→z₁,x^2→x²) sans objet équation.
Compilation
Windows
Après clonage du dépôt, lancez simplement :
build.bat
Le script crée .venv, installe les dépendances, nettoie les anciens artefacts puis génère un exécutable Windows autonome :
dist\ai-typewriter.exe
Commande PyInstaller équivalente
pyinstaller --onefile --paths src --name ai-typewriter.exe main.py
L'exécutable est généré dans dist/. Le binaire n'est pas versionné Git.
Test rapide sans hook clavier
python main.py --config config.json --ask "Résume: bonjour tout le monde"