4.0 KiB
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 avec le system prompt strict :
Réponds directement et de manière ultra-concise. Aucune phrase d'introduction, aucune salutation, aucun formatage superflu. Uniquement la réponse brute.
-
Le temps de génération de la réponse est journalisé.
-
Quand la réponse arrive, le premier caractère est écrit automatiquement.
-
Le mode dactylographie s'active ensuite : chaque touche physique est interceptée et remplacée par le prochain caractère de la réponse.
-
Le hook clavier est libéré automatiquement après le dernier caractère.
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.
Mode mathématique Word
La configuration générale reste simple (math_text_format: "plain"). Pour les réponses mathématiques, utilisez l'exemple dédié :
cp config.math-word.template config.json
Ce fichier active :
"math_text_format": "word_equation"
Dans ce mode, l'application ne devine plus les maths automatiquement. Elle suit uniquement les balises explicites renvoyées par le modèle :
La solution est [EQ]z_1 = x + iy[/EQ].
Injection réelle :
- texte normal :
La solution est; - à
[EQ], l'application envoieAlt+=; - elle tape
z_1 = x + iydans l'éditeur d'équation Word ; - à
[/EQ], elle envoieEspacepuisFlèche droitepour convertir et sortir de l'équation ; - elle reprend le texte normal :
..
Le prompt de config.math-word.template demande aussi au modèle d'éviter le LaTeX non souhaité, notamment \\frac, \\dfrac, \\tfrac, \\left, \\right, $, $$, \\( et \\[.
Modes disponibles :
plain: injecte la réponse exactement telle que le modèle l'a renvoyée.word_equation: crée des objets Équation Word uniquement pour les blocs[EQ]...[/EQ].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"