opsiom-cli 1.3.0__tar.gz → 1.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opsiom_cli-1.5.0/.env +1 -0
- opsiom_cli-1.5.0/CHANGELOG.md +36 -0
- opsiom_cli-1.5.0/PKG-INFO +173 -0
- opsiom_cli-1.5.0/README.md +155 -0
- opsiom_cli-1.5.0/pyproject.toml +39 -0
- opsiom_cli-1.5.0/src/opsiom_cli/__init__.py +8 -0
- opsiom_cli-1.5.0/src/opsiom_cli/__main__.py +6 -0
- opsiom_cli-1.5.0/src/opsiom_cli/chat.py +642 -0
- opsiom_cli-1.5.0/src/opsiom_cli/cli.py +216 -0
- opsiom_cli-1.5.0/src/opsiom_cli/clients.py +187 -0
- opsiom_cli-1.5.0/src/opsiom_cli/storage.py +197 -0
- opsiom_cli-1.5.0/src/opsiom_cli/test.txt +30 -0
- opsiom_cli-1.5.0/src/opsiom_cli/test_quoted.txt +0 -0
- opsiom_cli-1.5.0/src/opsiom_cli/ui.py +229 -0
- opsiom_cli-1.5.0/tests/test_core.py +166 -0
- opsiom_cli-1.5.0/tests/test_http.py +130 -0
- opsiom_cli-1.3.0/PKG-INFO +0 -75
- opsiom_cli-1.3.0/README.md +0 -63
- opsiom_cli-1.3.0/pyproject.toml +0 -23
- opsiom_cli-1.3.0/setup.cfg +0 -4
- opsiom_cli-1.3.0/src/opsiom_cli/__init__.py +0 -4
- opsiom_cli-1.3.0/src/opsiom_cli/cli.py +0 -803
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/PKG-INFO +0 -75
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/SOURCES.txt +0 -10
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/dependency_links.txt +0 -1
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/entry_points.txt +0 -2
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/requires.txt +0 -1
- opsiom_cli-1.3.0/src/opsiom_cli.egg-info/top_level.txt +0 -1
opsiom_cli-1.5.0/.env
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TOKEN_PYPI=pypi-AgEIcHlwaS5vcmcCJDI3YTY0YTk5LTExZDktNDFlOS04ZGE4LTU1MWFmNDcwZTg1MAACKlszLCJjYzExY2QyYy00ODg4LTRlOTItOTNmYy00NTdhMDhlMWQ5NjQiXQAABiDBNDAJrhWz9Rt11yQPXO1klHHZCcHTEsImiD4G6FOTWA
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 1.5.0
|
|
4
|
+
|
|
5
|
+
### Ajouts
|
|
6
|
+
- Sous-commandes `opsiom doctor` (diagnostic), `opsiom paths` (emplacements des fichiers) et `opsiom configure`.
|
|
7
|
+
- Question unique : `opsiom -p "…"` et `cat fichier | opsiom`.
|
|
8
|
+
- Options `-m/--model` et `--logo` (le repère graphique n’est plus affiché par défaut).
|
|
9
|
+
- Commandes de session `/retry`, `/copy`, `/doctor`.
|
|
10
|
+
- Saisie multiligne avec `"""`.
|
|
11
|
+
- Configuration initiale guidée : URL vérifiée, avertissement pour `http://` distant, clé API saisie masquée.
|
|
12
|
+
- Message explicite quand le serveur est injoignable, avec les actions à tenter.
|
|
13
|
+
- Packaging : `pyproject.toml`, point d’entrée `opsiom`, tests `pytest`.
|
|
14
|
+
|
|
15
|
+
### Corrections
|
|
16
|
+
- `/save` : le nom de fichier est confiné au dossier des transcriptions (plus de `../` ni de chemin absolu).
|
|
17
|
+
- Fichiers `config.json` et `usage.json` écrits de façon atomique, avec droits 600.
|
|
18
|
+
- Une connexion Octix refusée n’est plus prise pour une réussite lorsque le Space redirige vers `/login`.
|
|
19
|
+
- Une réponse interrompue avant l’évènement de fin est signalée comme erreur.
|
|
20
|
+
- Après une reconnexion Octix, le message est renvoyé automatiquement.
|
|
21
|
+
- Les réponses conservent leurs retours à la ligne et leur indentation (listes, blocs de code).
|
|
22
|
+
- Les codes de couleur ne perturbent plus la largeur du prompt (readline).
|
|
23
|
+
- `/model <nom>` refuse les modèles inconnus.
|
|
24
|
+
- L’historique de saisie est sauvegardé même en cas d’erreur.
|
|
25
|
+
- Les connexions HTTP sont fermées proprement après chaque réponse.
|
|
26
|
+
|
|
27
|
+
### Changements
|
|
28
|
+
- Interface en français avec vouvoiement partout.
|
|
29
|
+
- En-tête compact (quatre lignes) et repère visuel entre la question et la réponse.
|
|
30
|
+
- Pied de réponse sur une ligne : durée et quota.
|
|
31
|
+
- Symboles ASCII de repli et respect de `NO_COLOR`.
|
|
32
|
+
- Emplacements des fichiers via les conventions de chaque système (`APPDATA` sous Windows, `XDG` ailleurs).
|
|
33
|
+
- Le quota n’est plus estimé localement : seul le quota renvoyé par le serveur est affiché.
|
|
34
|
+
|
|
35
|
+
## 1.4.0
|
|
36
|
+
- Version initiale du CLI avec serveur API et Space Hugging Face.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: opsiom-cli
|
|
3
|
+
Version: 1.5.0
|
|
4
|
+
Summary: Interface en ligne de commande pour discuter avec Opsiom, l'assistant IA francophone.
|
|
5
|
+
Keywords: chatbot,cli,francophone,ia,opsiom
|
|
6
|
+
Classifier: Environment :: Console
|
|
7
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
8
|
+
Classifier: Natural Language :: French
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Topic :: Communications :: Chat
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Requires-Dist: requests>=2.31
|
|
15
|
+
Provides-Extra: dev
|
|
16
|
+
Requires-Dist: pytest>=7; extra == 'dev'
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
19
|
+
# opsiom-cli
|
|
20
|
+
|
|
21
|
+
Discutez avec **Opsiom**, l’assistant IA francophone, depuis votre terminal.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
pip install opsiom-cli
|
|
25
|
+
opsiom
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Sommaire
|
|
29
|
+
|
|
30
|
+
- [Démarrage rapide](#démarrage-rapide)
|
|
31
|
+
- [Utilisation](#utilisation)
|
|
32
|
+
- [Commandes de session](#commandes-de-session)
|
|
33
|
+
- [Configuration](#configuration)
|
|
34
|
+
- [Dépannage](#dépannage)
|
|
35
|
+
- [Confidentialité et sécurité](#confidentialité-et-sécurité)
|
|
36
|
+
- [Développement](#développement)
|
|
37
|
+
|
|
38
|
+
## Démarrage rapide
|
|
39
|
+
|
|
40
|
+
1. Installez le paquet (Python 3.9 ou plus récent) :
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pip install opsiom-cli
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
2. Lancez-le. Au premier démarrage, le CLI demande l’adresse du serveur, puis votre clé API ou votre pseudo Octix. Ces informations vous sont transmises par la personne qui héberge Opsiom.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
opsiom
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
3. Vérifiez la connexion à tout moment :
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
opsiom doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Utilisation
|
|
59
|
+
|
|
60
|
+
| Commande | Effet |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `opsiom` | Session interactive. |
|
|
63
|
+
| `opsiom -p "Résume ce texte"` | Pose une question, affiche la réponse et quitte. |
|
|
64
|
+
| `cat notes.txt \| opsiom` | Envoie le contenu de l’entrée standard comme question. |
|
|
65
|
+
| `opsiom -m <modèle> …` | Choisit le modèle (identifiant ou nom partiel). |
|
|
66
|
+
| `opsiom configure` | Reconfigure le serveur et la clé d’accès. |
|
|
67
|
+
| `opsiom doctor` | Vérifie l’URL, le serveur, les modèles et le quota. |
|
|
68
|
+
| `opsiom paths` | Affiche les emplacements des fichiers locaux. |
|
|
69
|
+
| `opsiom --logo` | Affiche le repère graphique au démarrage de la session. |
|
|
70
|
+
|
|
71
|
+
### Saisie multiligne
|
|
72
|
+
|
|
73
|
+
Dans une session, tapez `"""` seul sur une ligne, écrivez votre texte, puis terminez par `"""` seul sur une ligne. Entrée seule envoie un message simple.
|
|
74
|
+
|
|
75
|
+
## Commandes de session
|
|
76
|
+
|
|
77
|
+
| Commande | Effet |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `/retry` | Relance la dernière question. |
|
|
80
|
+
| `/copy` | Copie la dernière réponse dans le presse-papiers. |
|
|
81
|
+
| `/save [nom]` | Exporte la conversation en Markdown dans `~/opsiom-conversations/`. |
|
|
82
|
+
| `/new` | Repart d’une conversation vide. |
|
|
83
|
+
| `/clear` | Efface l’écran. |
|
|
84
|
+
| `/model [id ou numéro]` | Change de modèle. Sans argument, affiche un menu. |
|
|
85
|
+
| `/models` | Liste les modèles disponibles. |
|
|
86
|
+
| `/status` | Rappelle la connexion, le compte et le quota. |
|
|
87
|
+
| `/quota` | Affiche le quota restant aujourd’hui. |
|
|
88
|
+
| `/doctor` | Lance le diagnostic depuis la session. |
|
|
89
|
+
| `/help` | Affiche l’aide. |
|
|
90
|
+
| `/quit` | Quitte (aussi `/exit`, ou Ctrl+D). |
|
|
91
|
+
|
|
92
|
+
Raccourcis : **Entrée** envoie, **Ctrl+C** annule la saisie ou la réponse en cours, **Ctrl+D** quitte. L’historique des saisies se parcourt avec les flèches.
|
|
93
|
+
|
|
94
|
+
## Configuration
|
|
95
|
+
|
|
96
|
+
Les paramètres sont lus dans cet ordre de priorité : options de ligne de commande, variables d’environnement, fichier de configuration.
|
|
97
|
+
|
|
98
|
+
| Option | Variable d’environnement | Rôle |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| `--url` | `OPSIOM_URL` | Adresse du serveur ou du Space Hugging Face. |
|
|
101
|
+
| `--api-key` | `OPSIOM_API_KEY` | Clé API (serveur API). |
|
|
102
|
+
| `--backend` | `OPSIOM_BACKEND` | `api`, `hf` ou `auto` (d’après l’adresse). |
|
|
103
|
+
| `--username` | `OPSIOM_USERNAME` | Pseudo Octix (Space Hugging Face). |
|
|
104
|
+
| — | `OPSIOM_PASSWORD` | Mot de passe Octix. **Déconseillé** : visible par les autres processus du même utilisateur. Préférez la saisie masquée. |
|
|
105
|
+
| `--hf-token` | `OPSIOM_HF_TOKEN` ou `HF_TOKEN` | Jeton Hugging Face, si le Space est privé. |
|
|
106
|
+
|
|
107
|
+
Fichiers locaux (`opsiom paths` les affiche) :
|
|
108
|
+
|
|
109
|
+
- **configuration** : `config.json`, droits 600. Le mot de passe n’y est jamais écrit.
|
|
110
|
+
- **quota local** : `usage.json`, un cache d’affichage. Le serveur fait foi.
|
|
111
|
+
- **historique de saisie** : pour la flèche du haut.
|
|
112
|
+
- **transcriptions** : dossier des exports `/save`.
|
|
113
|
+
|
|
114
|
+
### Affichage
|
|
115
|
+
|
|
116
|
+
- Les couleurs sont désactivées si `NO_COLOR` est défini, si `TERM=dumb`, ou si la sortie est redirigée vers un fichier ou un pipe.
|
|
117
|
+
- Sur un terminal sans UTF-8, les symboles basculent sur de l’ASCII.
|
|
118
|
+
|
|
119
|
+
## Dépannage
|
|
120
|
+
|
|
121
|
+
**« connexion impossible »**
|
|
122
|
+
Vérifiez l’adresse avec `opsiom doctor`, puis votre réseau. Si le serveur est un Space Hugging Face, il peut être en veille : patientez une minute, puis relancez.
|
|
123
|
+
|
|
124
|
+
**« clé API invalide ou expirée »**
|
|
125
|
+
Reconfigurez avec `opsiom configure`.
|
|
126
|
+
|
|
127
|
+
**« session expirée ou refusée par le Space »**
|
|
128
|
+
Le CLI propose de vous reconnecter, puis renvoie votre message.
|
|
129
|
+
|
|
130
|
+
**« quota quotidien atteint » ou « quota dépassé côté serveur »**
|
|
131
|
+
Le quota se réinitialise chaque jour. Utilisez `/quota` pour voir où vous en êtes.
|
|
132
|
+
|
|
133
|
+
**« modèle inconnu » ou « hors forfait »**
|
|
134
|
+
Tapez `/models` pour la liste. Un modèle marqué « hors forfait » n’est pas inclus dans votre offre.
|
|
135
|
+
|
|
136
|
+
**Les accents ou les couleurs s’affichent mal**
|
|
137
|
+
Utilisez un terminal qui gère l’UTF-8 et les couleurs 256. Sous Windows, préférez Windows Terminal.
|
|
138
|
+
|
|
139
|
+
**Le presse-papiers ne fonctionne pas avec `/copy`**
|
|
140
|
+
Sous Linux, installez `xclip`, `wl-copy` ou `xsel`. Sous macOS et Windows, les outils système sont utilisés.
|
|
141
|
+
|
|
142
|
+
## Confidentialité et sécurité
|
|
143
|
+
|
|
144
|
+
- Chaque message est envoyé au serveur d’Opsiom. Le CLI ne transmet rien d’autre.
|
|
145
|
+
- Le mot de passe Octix n’est jamais enregistré : il est demandé à chaque lancement (saisie masquée).
|
|
146
|
+
- La clé API est stockée dans `config.json`, avec des droits 600. Ne partagez pas ce fichier.
|
|
147
|
+
- Un serveur `http://` distant est signalé : la clé et le mot de passe circuleraient en clair. Utilisez `https://`.
|
|
148
|
+
- Le contenu des conversations n’est écrit sur le disque que si vous lancez `/save`.
|
|
149
|
+
|
|
150
|
+
## Développement
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git clone <dépôt>
|
|
154
|
+
cd opsiom-cli
|
|
155
|
+
pip install -e ".[dev]"
|
|
156
|
+
pytest
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Structure :
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
src/opsiom_cli/
|
|
163
|
+
├── cli.py options, configuration, question unique, sous-commandes
|
|
164
|
+
├── chat.py session interactive, commandes, diagnostic, erreurs
|
|
165
|
+
├── clients.py clients serveur API et Space Hugging Face, flux SSE
|
|
166
|
+
├── storage.py chemins, configuration, quota local, transcriptions
|
|
167
|
+
└── ui.py couleurs, symboles, indicateur d’attente, streaming
|
|
168
|
+
tests/ tests unitaires et tests de bout en bout (faux serveur)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Licence
|
|
172
|
+
|
|
173
|
+
À compléter.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# opsiom-cli
|
|
2
|
+
|
|
3
|
+
Discutez avec **Opsiom**, l’assistant IA francophone, depuis votre terminal.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
pip install opsiom-cli
|
|
7
|
+
opsiom
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Sommaire
|
|
11
|
+
|
|
12
|
+
- [Démarrage rapide](#démarrage-rapide)
|
|
13
|
+
- [Utilisation](#utilisation)
|
|
14
|
+
- [Commandes de session](#commandes-de-session)
|
|
15
|
+
- [Configuration](#configuration)
|
|
16
|
+
- [Dépannage](#dépannage)
|
|
17
|
+
- [Confidentialité et sécurité](#confidentialité-et-sécurité)
|
|
18
|
+
- [Développement](#développement)
|
|
19
|
+
|
|
20
|
+
## Démarrage rapide
|
|
21
|
+
|
|
22
|
+
1. Installez le paquet (Python 3.9 ou plus récent) :
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install opsiom-cli
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. Lancez-le. Au premier démarrage, le CLI demande l’adresse du serveur, puis votre clé API ou votre pseudo Octix. Ces informations vous sont transmises par la personne qui héberge Opsiom.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
opsiom
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
3. Vérifiez la connexion à tout moment :
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
opsiom doctor
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Utilisation
|
|
41
|
+
|
|
42
|
+
| Commande | Effet |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `opsiom` | Session interactive. |
|
|
45
|
+
| `opsiom -p "Résume ce texte"` | Pose une question, affiche la réponse et quitte. |
|
|
46
|
+
| `cat notes.txt \| opsiom` | Envoie le contenu de l’entrée standard comme question. |
|
|
47
|
+
| `opsiom -m <modèle> …` | Choisit le modèle (identifiant ou nom partiel). |
|
|
48
|
+
| `opsiom configure` | Reconfigure le serveur et la clé d’accès. |
|
|
49
|
+
| `opsiom doctor` | Vérifie l’URL, le serveur, les modèles et le quota. |
|
|
50
|
+
| `opsiom paths` | Affiche les emplacements des fichiers locaux. |
|
|
51
|
+
| `opsiom --logo` | Affiche le repère graphique au démarrage de la session. |
|
|
52
|
+
|
|
53
|
+
### Saisie multiligne
|
|
54
|
+
|
|
55
|
+
Dans une session, tapez `"""` seul sur une ligne, écrivez votre texte, puis terminez par `"""` seul sur une ligne. Entrée seule envoie un message simple.
|
|
56
|
+
|
|
57
|
+
## Commandes de session
|
|
58
|
+
|
|
59
|
+
| Commande | Effet |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `/retry` | Relance la dernière question. |
|
|
62
|
+
| `/copy` | Copie la dernière réponse dans le presse-papiers. |
|
|
63
|
+
| `/save [nom]` | Exporte la conversation en Markdown dans `~/opsiom-conversations/`. |
|
|
64
|
+
| `/new` | Repart d’une conversation vide. |
|
|
65
|
+
| `/clear` | Efface l’écran. |
|
|
66
|
+
| `/model [id ou numéro]` | Change de modèle. Sans argument, affiche un menu. |
|
|
67
|
+
| `/models` | Liste les modèles disponibles. |
|
|
68
|
+
| `/status` | Rappelle la connexion, le compte et le quota. |
|
|
69
|
+
| `/quota` | Affiche le quota restant aujourd’hui. |
|
|
70
|
+
| `/doctor` | Lance le diagnostic depuis la session. |
|
|
71
|
+
| `/help` | Affiche l’aide. |
|
|
72
|
+
| `/quit` | Quitte (aussi `/exit`, ou Ctrl+D). |
|
|
73
|
+
|
|
74
|
+
Raccourcis : **Entrée** envoie, **Ctrl+C** annule la saisie ou la réponse en cours, **Ctrl+D** quitte. L’historique des saisies se parcourt avec les flèches.
|
|
75
|
+
|
|
76
|
+
## Configuration
|
|
77
|
+
|
|
78
|
+
Les paramètres sont lus dans cet ordre de priorité : options de ligne de commande, variables d’environnement, fichier de configuration.
|
|
79
|
+
|
|
80
|
+
| Option | Variable d’environnement | Rôle |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `--url` | `OPSIOM_URL` | Adresse du serveur ou du Space Hugging Face. |
|
|
83
|
+
| `--api-key` | `OPSIOM_API_KEY` | Clé API (serveur API). |
|
|
84
|
+
| `--backend` | `OPSIOM_BACKEND` | `api`, `hf` ou `auto` (d’après l’adresse). |
|
|
85
|
+
| `--username` | `OPSIOM_USERNAME` | Pseudo Octix (Space Hugging Face). |
|
|
86
|
+
| — | `OPSIOM_PASSWORD` | Mot de passe Octix. **Déconseillé** : visible par les autres processus du même utilisateur. Préférez la saisie masquée. |
|
|
87
|
+
| `--hf-token` | `OPSIOM_HF_TOKEN` ou `HF_TOKEN` | Jeton Hugging Face, si le Space est privé. |
|
|
88
|
+
|
|
89
|
+
Fichiers locaux (`opsiom paths` les affiche) :
|
|
90
|
+
|
|
91
|
+
- **configuration** : `config.json`, droits 600. Le mot de passe n’y est jamais écrit.
|
|
92
|
+
- **quota local** : `usage.json`, un cache d’affichage. Le serveur fait foi.
|
|
93
|
+
- **historique de saisie** : pour la flèche du haut.
|
|
94
|
+
- **transcriptions** : dossier des exports `/save`.
|
|
95
|
+
|
|
96
|
+
### Affichage
|
|
97
|
+
|
|
98
|
+
- Les couleurs sont désactivées si `NO_COLOR` est défini, si `TERM=dumb`, ou si la sortie est redirigée vers un fichier ou un pipe.
|
|
99
|
+
- Sur un terminal sans UTF-8, les symboles basculent sur de l’ASCII.
|
|
100
|
+
|
|
101
|
+
## Dépannage
|
|
102
|
+
|
|
103
|
+
**« connexion impossible »**
|
|
104
|
+
Vérifiez l’adresse avec `opsiom doctor`, puis votre réseau. Si le serveur est un Space Hugging Face, il peut être en veille : patientez une minute, puis relancez.
|
|
105
|
+
|
|
106
|
+
**« clé API invalide ou expirée »**
|
|
107
|
+
Reconfigurez avec `opsiom configure`.
|
|
108
|
+
|
|
109
|
+
**« session expirée ou refusée par le Space »**
|
|
110
|
+
Le CLI propose de vous reconnecter, puis renvoie votre message.
|
|
111
|
+
|
|
112
|
+
**« quota quotidien atteint » ou « quota dépassé côté serveur »**
|
|
113
|
+
Le quota se réinitialise chaque jour. Utilisez `/quota` pour voir où vous en êtes.
|
|
114
|
+
|
|
115
|
+
**« modèle inconnu » ou « hors forfait »**
|
|
116
|
+
Tapez `/models` pour la liste. Un modèle marqué « hors forfait » n’est pas inclus dans votre offre.
|
|
117
|
+
|
|
118
|
+
**Les accents ou les couleurs s’affichent mal**
|
|
119
|
+
Utilisez un terminal qui gère l’UTF-8 et les couleurs 256. Sous Windows, préférez Windows Terminal.
|
|
120
|
+
|
|
121
|
+
**Le presse-papiers ne fonctionne pas avec `/copy`**
|
|
122
|
+
Sous Linux, installez `xclip`, `wl-copy` ou `xsel`. Sous macOS et Windows, les outils système sont utilisés.
|
|
123
|
+
|
|
124
|
+
## Confidentialité et sécurité
|
|
125
|
+
|
|
126
|
+
- Chaque message est envoyé au serveur d’Opsiom. Le CLI ne transmet rien d’autre.
|
|
127
|
+
- Le mot de passe Octix n’est jamais enregistré : il est demandé à chaque lancement (saisie masquée).
|
|
128
|
+
- La clé API est stockée dans `config.json`, avec des droits 600. Ne partagez pas ce fichier.
|
|
129
|
+
- Un serveur `http://` distant est signalé : la clé et le mot de passe circuleraient en clair. Utilisez `https://`.
|
|
130
|
+
- Le contenu des conversations n’est écrit sur le disque que si vous lancez `/save`.
|
|
131
|
+
|
|
132
|
+
## Développement
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git clone <dépôt>
|
|
136
|
+
cd opsiom-cli
|
|
137
|
+
pip install -e ".[dev]"
|
|
138
|
+
pytest
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Structure :
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
src/opsiom_cli/
|
|
145
|
+
├── cli.py options, configuration, question unique, sous-commandes
|
|
146
|
+
├── chat.py session interactive, commandes, diagnostic, erreurs
|
|
147
|
+
├── clients.py clients serveur API et Space Hugging Face, flux SSE
|
|
148
|
+
├── storage.py chemins, configuration, quota local, transcriptions
|
|
149
|
+
└── ui.py couleurs, symboles, indicateur d’attente, streaming
|
|
150
|
+
tests/ tests unitaires et tests de bout en bout (faux serveur)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Licence
|
|
154
|
+
|
|
155
|
+
À compléter.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.18"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "opsiom-cli"
|
|
7
|
+
version = "1.5.0"
|
|
8
|
+
description = "Interface en ligne de commande pour discuter avec Opsiom, l'assistant IA francophone."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
# TODO : compléter la licence et les auteurs avant publication
|
|
12
|
+
# license = { text = "..." }
|
|
13
|
+
# authors = [{ name = "..." }]
|
|
14
|
+
keywords = ["opsiom", "ia", "chatbot", "cli", "francophone"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: End Users/Desktop",
|
|
20
|
+
"Natural Language :: French",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Topic :: Communications :: Chat",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"requests>=2.31",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
[project.optional-dependencies]
|
|
29
|
+
dev = ["pytest>=7"]
|
|
30
|
+
|
|
31
|
+
[project.scripts]
|
|
32
|
+
opsiom = "opsiom_cli.cli:main"
|
|
33
|
+
|
|
34
|
+
[tool.hatch.build.targets.wheel]
|
|
35
|
+
packages = ["src/opsiom_cli"]
|
|
36
|
+
|
|
37
|
+
[tool.pytest.ini_options]
|
|
38
|
+
testpaths = ["tests"]
|
|
39
|
+
pythonpath = ["src"]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Client en ligne de commande pour Opsiom."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = _pkg_version("opsiom-cli")
|
|
7
|
+
except PackageNotFoundError: # exécution depuis les sources, sans installation
|
|
8
|
+
__version__ = "0.0.0+dev"
|