124 lines
3.7 KiB
Markdown
124 lines
3.7 KiB
Markdown
# 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
|
||
|
||
1. L'utilisateur copie manuellement le texte à envoyer à l'IA.
|
||
2. Raccourci global par défaut : `Ctrl+Alt+A`.
|
||
3. L'application lit directement la dernière entrée du presse-papier, sans simuler `Ctrl+C`.
|
||
4. 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.
|
||
|
||
5. Le temps de génération de la réponse est journalisé.
|
||
6. Quand la réponse arrive, le premier caractère est écrit automatiquement.
|
||
7. Le mode dactylographie s'active ensuite : chaque touche physique est interceptée et remplacée par le prochain caractère de la réponse.
|
||
8. Le hook clavier est libéré automatiquement après le dernier caractère.
|
||
|
||
## Installation depuis les sources
|
||
|
||
```bash
|
||
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 :
|
||
|
||
```json
|
||
{
|
||
"provider": "ollama",
|
||
"model": "llama3.1",
|
||
"api_key": "",
|
||
"server_url": "http://localhost:11434",
|
||
"hotkey": "ctrl+alt+a",
|
||
"request_timeout_seconds": 300,
|
||
"math_text_format": "word_equation"
|
||
}
|
||
```
|
||
|
||
### Ollama
|
||
|
||
```json
|
||
{
|
||
"provider": "ollama",
|
||
"model": "llama3.1",
|
||
"server_url": "http://localhost:11434"
|
||
}
|
||
```
|
||
|
||
### Gemini
|
||
|
||
```json
|
||
{
|
||
"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.
|
||
|
||
### Formatage mathématique Word
|
||
|
||
`math_text_format` vaut `word_equation` par défaut. Dans ce mode, les segments mathématiques comme `z_1`, `x^2`, `\alpha` ou `z_1 = x + iy` sont injectés dans Word comme de vraies équations :
|
||
|
||
1. l'application envoie `Alt+=` ;
|
||
2. elle tape l'expression en syntaxe UnicodeMath Word ;
|
||
3. elle envoie `Espace` pour laisser Word convertir ;
|
||
4. elle sort de l'objet équation avec `Flèche droite`.
|
||
|
||
Exemple :
|
||
|
||
```text
|
||
On pose z_1 = x + iy.
|
||
```
|
||
|
||
est injecté comme texte normal `On pose `, puis une équation Word `z_1 = x + iy`, puis le point final.
|
||
|
||
Modes disponibles :
|
||
|
||
- `word_equation` : crée des objets Équation Word via `Alt+=` pour les segments mathématiques détectés.
|
||
- `unicode` : transforme `z_1`, `x^2`, `\alpha`, etc. en texte Unicode (`z₁`, `x²`, `α`) sans objet équation.
|
||
- `plain` : injecte la réponse exactement telle que le modèle l'a renvoyée.
|
||
|
||
## Compilation
|
||
|
||
### Windows
|
||
|
||
Après clonage du dépôt, lancez simplement :
|
||
|
||
```bat
|
||
build.bat
|
||
```
|
||
|
||
Le script crée `.venv`, installe les dépendances, nettoie les anciens artefacts puis génère un exécutable Windows autonome :
|
||
|
||
```text
|
||
dist\ai-typewriter.exe
|
||
```
|
||
|
||
### Commande PyInstaller équivalente
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
python main.py --config config.json --ask "Résume: bonjour tout le monde"
|
||
```
|