clouditia-manager 1.0.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.
@@ -0,0 +1,308 @@
1
+ Metadata-Version: 2.4
2
+ Name: clouditia-manager
3
+ Version: 1.0.0
4
+ Summary: Manage GPU sessions on Clouditia platform
5
+ Home-page: https://clouditia.com
6
+ Author: Clouditia
7
+ Author-email: support@clouditia.com
8
+ Project-URL: Documentation, https://clouditia.com/docs/manager-sdk
9
+ Project-URL: Bug Reports, https://github.com/clouditia/clouditia-manager/issues
10
+ Project-URL: Source, https://github.com/clouditia/clouditia-manager
11
+ Keywords: gpu cloud computing ml machine-learning clouditia
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
+ Requires-Python: >=3.8
23
+ Description-Content-Type: text/markdown
24
+ Requires-Dist: requests>=2.25.0
25
+ Dynamic: author
26
+ Dynamic: author-email
27
+ Dynamic: classifier
28
+ Dynamic: description
29
+ Dynamic: description-content-type
30
+ Dynamic: home-page
31
+ Dynamic: keywords
32
+ Dynamic: project-url
33
+ Dynamic: requires-dist
34
+ Dynamic: requires-python
35
+ Dynamic: summary
36
+
37
+ # Clouditia Manager SDK
38
+
39
+ SDK Python pour gérer les sessions GPU sur la plateforme Clouditia via l'API Computing (`sk_compute_`).
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install clouditia-manager
45
+ ```
46
+
47
+ ## Quick Start
48
+
49
+ ```python
50
+ from clouditia_manager import GPUManager
51
+
52
+ # Initialiser avec votre clé API sk_compute_
53
+ manager = GPUManager(api_key="sk_compute_xxxxx")
54
+
55
+ # Créer une session GPU
56
+ # Le SDK attend automatiquement que la session soit prête
57
+ session = manager.create_session(
58
+ gpu_type="nvidia-rtx-3090",
59
+ vcpu=2,
60
+ ram=4,
61
+ storage=20
62
+ )
63
+
64
+ # Output:
65
+ # Creating GPU session with nvidia-rtx-3090...
66
+ # Session created: 0e4c713a
67
+ # Waiting for session 0e4c713a to be ready... Ready!
68
+ #
69
+ # ==================================================
70
+ # SESSION READY
71
+ # ==================================================
72
+ # Name : compute-gpu-0e4c713a
73
+ # Short ID : 0e4c713a
74
+ # Status : running
75
+ # GPU : nvidia-rtx-3090 x1
76
+ # vCPU : 2
77
+ # RAM : 4Gi
78
+ # Storage : 20Gi
79
+ # URL : https://clouditia.com/code-editor/...
80
+ # Password : xxxxxxxxxxxx
81
+ # ==================================================
82
+
83
+ print(f"Session prête: {session.name}")
84
+ ```
85
+
86
+ ## Configuration
87
+
88
+ ```python
89
+ from clouditia_manager import GPUManager
90
+
91
+ # Configuration par défaut (production)
92
+ manager = GPUManager(api_key="sk_compute_xxxxx")
93
+
94
+ # Configuration personnalisée (développement local)
95
+ manager = GPUManager(
96
+ api_key="sk_compute_xxxxx",
97
+ base_url="http://127.0.0.1:8000/jobs", # URL de base de l'API
98
+ timeout=120 # Timeout en secondes
99
+ )
100
+ ```
101
+
102
+ ## Fonctionnalités
103
+
104
+ ### 1. Vérifier la clé API
105
+
106
+ La vérification est automatique à l'initialisation :
107
+
108
+ ```python
109
+ manager = GPUManager(api_key="sk_compute_xxxxx")
110
+ print(f"Utilisateur: {manager.user['username']}")
111
+ print(f"Email: {manager.user['email']}")
112
+ ```
113
+
114
+ ### 2. Créer une session GPU
115
+
116
+ ```python
117
+ # Création standard (attend automatiquement que la session soit prête)
118
+ session = manager.create_session(
119
+ gpu_type="nvidia-rtx-3090", # Type de GPU
120
+ gpu_count=1, # Nombre de GPUs
121
+ vcpu=4, # Nombre de vCPUs
122
+ ram=16, # RAM en GB
123
+ storage=20 # Stockage en GB
124
+ )
125
+
126
+ # La session est prête avec un nom automatique: compute-gpu-{short_id}
127
+ print(f"Nom: {session.name}") # compute-gpu-0e4c713a
128
+ print(f"ID: {session.short_id}") # 0e4c713a
129
+ print(f"Status: {session.status}") # running
130
+ print(f"URL: {session.url}")
131
+ print(f"Password: {session.password}")
132
+
133
+ # Options avancées
134
+ session = manager.create_session(
135
+ gpu_type="nvidia-rtx-3090",
136
+ wait_ready=True, # Attendre que la session soit prête (défaut: True)
137
+ timeout=180, # Timeout en secondes (défaut: 180)
138
+ verbose=True # Afficher les messages de status (défaut: True)
139
+ )
140
+
141
+ # Mode silencieux (sans attente ni messages)
142
+ session = manager.create_session(
143
+ gpu_type="nvidia-rtx-3090",
144
+ wait_ready=False, # Ne pas attendre
145
+ verbose=False # Pas de messages
146
+ )
147
+ ```
148
+
149
+ ### 3. Lister les sessions
150
+
151
+ ```python
152
+ # Toutes les sessions
153
+ sessions = manager.list_sessions()
154
+
155
+ # Filtrer par status
156
+ running = manager.list_sessions(status="running")
157
+ stopped = manager.list_sessions(status="stopped")
158
+
159
+ for session in sessions:
160
+ print(f"{session.name} ({session.short_id}): {session.status} - {session.gpu_type}")
161
+ ```
162
+
163
+ ### 4. Obtenir le status d'une session
164
+
165
+ ```python
166
+ # Par short ID (8 caractères)
167
+ session = manager.get_session("0e4c713a")
168
+
169
+ print(f"Nom: {session.name}") # compute-gpu-0e4c713a
170
+ print(f"Status: {session.status}") # running
171
+ print(f"GPU: {session.gpu_type}") # nvidia-rtx-3090
172
+ print(f"URL: {session.url}")
173
+ ```
174
+
175
+ ### 5. Renommer une session
176
+
177
+ ```python
178
+ # Chaque session a un nom par défaut: compute-gpu-{short_id}
179
+ session = manager.create_session(gpu_type="nvidia-rtx-3090")
180
+ print(f"Nom par défaut: {session.name}") # compute-gpu-0e4c713a
181
+
182
+ # Renommer la session
183
+ session = manager.rename_session("0e4c713a", "mon-projet-ml-v1")
184
+ print(f"Nouveau nom: {session.name}") # mon-projet-ml-v1
185
+ ```
186
+
187
+ ### 6. Arrêter une session
188
+
189
+ ```python
190
+ # Arrêt standard (attend automatiquement la suppression du pod)
191
+ session = manager.stop_session("0e4c713a")
192
+
193
+ # Output:
194
+ # Stopping session 0e4c713a...
195
+ # Waiting for pod termination... Done!
196
+ #
197
+ # ==================================================
198
+ # SESSION STOPPED
199
+ # ==================================================
200
+ # Name : mon-projet-ml-v1
201
+ # Short ID : 0e4c713a
202
+ # Status : stopped
203
+ # GPU : nvidia-rtx-3090 (released)
204
+ # ==================================================
205
+
206
+ print(f"Session arrêtée: {session.name}")
207
+ print(f"Status: {session.status}")
208
+
209
+ # Options avancées
210
+ session = manager.stop_session(
211
+ "0e4c713a",
212
+ wait_stopped=True, # Attendre la suppression complète (défaut: True)
213
+ timeout=120, # Timeout en secondes (défaut: 120)
214
+ verbose=True # Afficher les messages (défaut: True)
215
+ )
216
+
217
+ # Mode silencieux
218
+ session = manager.stop_session("0e4c713a", wait_stopped=False, verbose=False)
219
+ ```
220
+
221
+ ### 7. Consulter l'inventaire GPU
222
+
223
+ ```python
224
+ inventory = manager.get_inventory()
225
+
226
+ for gpu in inventory:
227
+ print(f"{gpu.gpu_name}: {gpu.available}/{gpu.total} disponibles")
228
+ print(f" Prix: {gpu.price_per_hour}€/h")
229
+ ```
230
+
231
+ ### 8. Générer une clé SDK (sk_live_)
232
+
233
+ ```python
234
+ # Générer une clé pour utiliser le SDK clouditia
235
+ sdk_key = manager.generate_sdk_key("0e4c713a", name="Ma clé SDK")
236
+ print(f"Clé SDK: {sdk_key}") # sk_live_xxxxx...
237
+
238
+ # Utiliser avec le SDK clouditia
239
+ from clouditia import GPUSession
240
+ gpu = GPUSession(api_key=sdk_key)
241
+ result = gpu.run("print('Hello GPU!')")
242
+ ```
243
+
244
+ ## Types de GPU disponibles
245
+
246
+ | GPU | Slug |
247
+ |-----|------|
248
+ | NVIDIA RTX 3060 Ti | `nvidia-rtx-3060ti` |
249
+ | NVIDIA RTX 3080 Ti | `nvidia-rtx-3080ti` |
250
+ | NVIDIA RTX 3090 | `nvidia-rtx-3090` |
251
+ | NVIDIA RTX 4090 | `nvidia-rtx-4090` |
252
+
253
+ ## Gestion des erreurs
254
+
255
+ ```python
256
+ from clouditia_manager import (
257
+ GPUManager,
258
+ AuthenticationError,
259
+ SessionNotFoundError,
260
+ InsufficientResourcesError,
261
+ APIError
262
+ )
263
+
264
+ try:
265
+ manager = GPUManager(api_key="sk_compute_xxxxx")
266
+ session = manager.create_session(gpu_type="nvidia-rtx-4090")
267
+ except AuthenticationError:
268
+ print("Clé API invalide")
269
+ except InsufficientResourcesError:
270
+ print("Aucun GPU disponible")
271
+ except SessionNotFoundError:
272
+ print("Session non trouvée")
273
+ except APIError as e:
274
+ print(f"Erreur API: {e}")
275
+ ```
276
+
277
+ ## Référence API
278
+
279
+ | Méthode | Description |
280
+ |---------|-------------|
281
+ | `GPUManager(api_key, base_url, timeout)` | Initialise le SDK |
282
+ | `create_session(gpu_type, gpu_count, vcpu, ram, storage, wait_ready, timeout, verbose)` | Crée une session GPU |
283
+ | `stop_session(session_id, wait_stopped, timeout, verbose)` | Arrête une session |
284
+ | `get_session(session_id)` | Récupère les détails d'une session |
285
+ | `list_sessions(status)` | Liste les sessions (filtre optionnel) |
286
+ | `rename_session(session_id, new_name)` | Renomme une session |
287
+ | `get_inventory()` | Récupère l'inventaire GPU |
288
+ | `generate_sdk_key(session_id, name)` | Génère une clé sk_live_ |
289
+
290
+ ## Attributs GPUSession
291
+
292
+ | Attribut | Type | Description |
293
+ |----------|------|-------------|
294
+ | `id` | str | UUID complet de la session |
295
+ | `short_id` | str | ID court (8 caractères) |
296
+ | `name` | str | Nom de la session |
297
+ | `status` | str | running, stopped, pending, failed |
298
+ | `gpu_type` | str | Type de GPU |
299
+ | `gpu_count` | int | Nombre de GPUs |
300
+ | `vcpu` | int | Nombre de vCPUs |
301
+ | `ram` | str | RAM allouée |
302
+ | `storage` | str | Stockage alloué |
303
+ | `url` | str | URL d'accès |
304
+ | `password` | str | Mot de passe |
305
+
306
+ ## License
307
+
308
+ MIT License
@@ -0,0 +1,272 @@
1
+ # Clouditia Manager SDK
2
+
3
+ SDK Python pour gérer les sessions GPU sur la plateforme Clouditia via l'API Computing (`sk_compute_`).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install clouditia-manager
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```python
14
+ from clouditia_manager import GPUManager
15
+
16
+ # Initialiser avec votre clé API sk_compute_
17
+ manager = GPUManager(api_key="sk_compute_xxxxx")
18
+
19
+ # Créer une session GPU
20
+ # Le SDK attend automatiquement que la session soit prête
21
+ session = manager.create_session(
22
+ gpu_type="nvidia-rtx-3090",
23
+ vcpu=2,
24
+ ram=4,
25
+ storage=20
26
+ )
27
+
28
+ # Output:
29
+ # Creating GPU session with nvidia-rtx-3090...
30
+ # Session created: 0e4c713a
31
+ # Waiting for session 0e4c713a to be ready... Ready!
32
+ #
33
+ # ==================================================
34
+ # SESSION READY
35
+ # ==================================================
36
+ # Name : compute-gpu-0e4c713a
37
+ # Short ID : 0e4c713a
38
+ # Status : running
39
+ # GPU : nvidia-rtx-3090 x1
40
+ # vCPU : 2
41
+ # RAM : 4Gi
42
+ # Storage : 20Gi
43
+ # URL : https://clouditia.com/code-editor/...
44
+ # Password : xxxxxxxxxxxx
45
+ # ==================================================
46
+
47
+ print(f"Session prête: {session.name}")
48
+ ```
49
+
50
+ ## Configuration
51
+
52
+ ```python
53
+ from clouditia_manager import GPUManager
54
+
55
+ # Configuration par défaut (production)
56
+ manager = GPUManager(api_key="sk_compute_xxxxx")
57
+
58
+ # Configuration personnalisée (développement local)
59
+ manager = GPUManager(
60
+ api_key="sk_compute_xxxxx",
61
+ base_url="http://127.0.0.1:8000/jobs", # URL de base de l'API
62
+ timeout=120 # Timeout en secondes
63
+ )
64
+ ```
65
+
66
+ ## Fonctionnalités
67
+
68
+ ### 1. Vérifier la clé API
69
+
70
+ La vérification est automatique à l'initialisation :
71
+
72
+ ```python
73
+ manager = GPUManager(api_key="sk_compute_xxxxx")
74
+ print(f"Utilisateur: {manager.user['username']}")
75
+ print(f"Email: {manager.user['email']}")
76
+ ```
77
+
78
+ ### 2. Créer une session GPU
79
+
80
+ ```python
81
+ # Création standard (attend automatiquement que la session soit prête)
82
+ session = manager.create_session(
83
+ gpu_type="nvidia-rtx-3090", # Type de GPU
84
+ gpu_count=1, # Nombre de GPUs
85
+ vcpu=4, # Nombre de vCPUs
86
+ ram=16, # RAM en GB
87
+ storage=20 # Stockage en GB
88
+ )
89
+
90
+ # La session est prête avec un nom automatique: compute-gpu-{short_id}
91
+ print(f"Nom: {session.name}") # compute-gpu-0e4c713a
92
+ print(f"ID: {session.short_id}") # 0e4c713a
93
+ print(f"Status: {session.status}") # running
94
+ print(f"URL: {session.url}")
95
+ print(f"Password: {session.password}")
96
+
97
+ # Options avancées
98
+ session = manager.create_session(
99
+ gpu_type="nvidia-rtx-3090",
100
+ wait_ready=True, # Attendre que la session soit prête (défaut: True)
101
+ timeout=180, # Timeout en secondes (défaut: 180)
102
+ verbose=True # Afficher les messages de status (défaut: True)
103
+ )
104
+
105
+ # Mode silencieux (sans attente ni messages)
106
+ session = manager.create_session(
107
+ gpu_type="nvidia-rtx-3090",
108
+ wait_ready=False, # Ne pas attendre
109
+ verbose=False # Pas de messages
110
+ )
111
+ ```
112
+
113
+ ### 3. Lister les sessions
114
+
115
+ ```python
116
+ # Toutes les sessions
117
+ sessions = manager.list_sessions()
118
+
119
+ # Filtrer par status
120
+ running = manager.list_sessions(status="running")
121
+ stopped = manager.list_sessions(status="stopped")
122
+
123
+ for session in sessions:
124
+ print(f"{session.name} ({session.short_id}): {session.status} - {session.gpu_type}")
125
+ ```
126
+
127
+ ### 4. Obtenir le status d'une session
128
+
129
+ ```python
130
+ # Par short ID (8 caractères)
131
+ session = manager.get_session("0e4c713a")
132
+
133
+ print(f"Nom: {session.name}") # compute-gpu-0e4c713a
134
+ print(f"Status: {session.status}") # running
135
+ print(f"GPU: {session.gpu_type}") # nvidia-rtx-3090
136
+ print(f"URL: {session.url}")
137
+ ```
138
+
139
+ ### 5. Renommer une session
140
+
141
+ ```python
142
+ # Chaque session a un nom par défaut: compute-gpu-{short_id}
143
+ session = manager.create_session(gpu_type="nvidia-rtx-3090")
144
+ print(f"Nom par défaut: {session.name}") # compute-gpu-0e4c713a
145
+
146
+ # Renommer la session
147
+ session = manager.rename_session("0e4c713a", "mon-projet-ml-v1")
148
+ print(f"Nouveau nom: {session.name}") # mon-projet-ml-v1
149
+ ```
150
+
151
+ ### 6. Arrêter une session
152
+
153
+ ```python
154
+ # Arrêt standard (attend automatiquement la suppression du pod)
155
+ session = manager.stop_session("0e4c713a")
156
+
157
+ # Output:
158
+ # Stopping session 0e4c713a...
159
+ # Waiting for pod termination... Done!
160
+ #
161
+ # ==================================================
162
+ # SESSION STOPPED
163
+ # ==================================================
164
+ # Name : mon-projet-ml-v1
165
+ # Short ID : 0e4c713a
166
+ # Status : stopped
167
+ # GPU : nvidia-rtx-3090 (released)
168
+ # ==================================================
169
+
170
+ print(f"Session arrêtée: {session.name}")
171
+ print(f"Status: {session.status}")
172
+
173
+ # Options avancées
174
+ session = manager.stop_session(
175
+ "0e4c713a",
176
+ wait_stopped=True, # Attendre la suppression complète (défaut: True)
177
+ timeout=120, # Timeout en secondes (défaut: 120)
178
+ verbose=True # Afficher les messages (défaut: True)
179
+ )
180
+
181
+ # Mode silencieux
182
+ session = manager.stop_session("0e4c713a", wait_stopped=False, verbose=False)
183
+ ```
184
+
185
+ ### 7. Consulter l'inventaire GPU
186
+
187
+ ```python
188
+ inventory = manager.get_inventory()
189
+
190
+ for gpu in inventory:
191
+ print(f"{gpu.gpu_name}: {gpu.available}/{gpu.total} disponibles")
192
+ print(f" Prix: {gpu.price_per_hour}€/h")
193
+ ```
194
+
195
+ ### 8. Générer une clé SDK (sk_live_)
196
+
197
+ ```python
198
+ # Générer une clé pour utiliser le SDK clouditia
199
+ sdk_key = manager.generate_sdk_key("0e4c713a", name="Ma clé SDK")
200
+ print(f"Clé SDK: {sdk_key}") # sk_live_xxxxx...
201
+
202
+ # Utiliser avec le SDK clouditia
203
+ from clouditia import GPUSession
204
+ gpu = GPUSession(api_key=sdk_key)
205
+ result = gpu.run("print('Hello GPU!')")
206
+ ```
207
+
208
+ ## Types de GPU disponibles
209
+
210
+ | GPU | Slug |
211
+ |-----|------|
212
+ | NVIDIA RTX 3060 Ti | `nvidia-rtx-3060ti` |
213
+ | NVIDIA RTX 3080 Ti | `nvidia-rtx-3080ti` |
214
+ | NVIDIA RTX 3090 | `nvidia-rtx-3090` |
215
+ | NVIDIA RTX 4090 | `nvidia-rtx-4090` |
216
+
217
+ ## Gestion des erreurs
218
+
219
+ ```python
220
+ from clouditia_manager import (
221
+ GPUManager,
222
+ AuthenticationError,
223
+ SessionNotFoundError,
224
+ InsufficientResourcesError,
225
+ APIError
226
+ )
227
+
228
+ try:
229
+ manager = GPUManager(api_key="sk_compute_xxxxx")
230
+ session = manager.create_session(gpu_type="nvidia-rtx-4090")
231
+ except AuthenticationError:
232
+ print("Clé API invalide")
233
+ except InsufficientResourcesError:
234
+ print("Aucun GPU disponible")
235
+ except SessionNotFoundError:
236
+ print("Session non trouvée")
237
+ except APIError as e:
238
+ print(f"Erreur API: {e}")
239
+ ```
240
+
241
+ ## Référence API
242
+
243
+ | Méthode | Description |
244
+ |---------|-------------|
245
+ | `GPUManager(api_key, base_url, timeout)` | Initialise le SDK |
246
+ | `create_session(gpu_type, gpu_count, vcpu, ram, storage, wait_ready, timeout, verbose)` | Crée une session GPU |
247
+ | `stop_session(session_id, wait_stopped, timeout, verbose)` | Arrête une session |
248
+ | `get_session(session_id)` | Récupère les détails d'une session |
249
+ | `list_sessions(status)` | Liste les sessions (filtre optionnel) |
250
+ | `rename_session(session_id, new_name)` | Renomme une session |
251
+ | `get_inventory()` | Récupère l'inventaire GPU |
252
+ | `generate_sdk_key(session_id, name)` | Génère une clé sk_live_ |
253
+
254
+ ## Attributs GPUSession
255
+
256
+ | Attribut | Type | Description |
257
+ |----------|------|-------------|
258
+ | `id` | str | UUID complet de la session |
259
+ | `short_id` | str | ID court (8 caractères) |
260
+ | `name` | str | Nom de la session |
261
+ | `status` | str | running, stopped, pending, failed |
262
+ | `gpu_type` | str | Type de GPU |
263
+ | `gpu_count` | int | Nombre de GPUs |
264
+ | `vcpu` | int | Nombre de vCPUs |
265
+ | `ram` | str | RAM allouée |
266
+ | `storage` | str | Stockage alloué |
267
+ | `url` | str | URL d'accès |
268
+ | `password` | str | Mot de passe |
269
+
270
+ ## License
271
+
272
+ MIT License
@@ -0,0 +1,43 @@
1
+ """
2
+ Clouditia Manager SDK - Manage GPU sessions via the Computing API
3
+
4
+ Usage:
5
+ from clouditia_manager import GPUManager
6
+
7
+ manager = GPUManager(api_key="sk_compute_...")
8
+
9
+ # Create a session
10
+ session = manager.create_session(
11
+ gpu_type="nvidia-rtx-3090",
12
+ vcpu=2,
13
+ ram=4,
14
+ storage=20
15
+ )
16
+
17
+ # List sessions
18
+ sessions = manager.list_sessions()
19
+
20
+ # Stop a session
21
+ manager.stop_session("369bde33")
22
+ """
23
+
24
+ __version__ = "1.0.0"
25
+ __author__ = "Clouditia"
26
+
27
+ from .client import GPUManager
28
+ from .exceptions import (
29
+ ClouditiaManagerError,
30
+ AuthenticationError,
31
+ SessionNotFoundError,
32
+ InsufficientResourcesError,
33
+ APIError
34
+ )
35
+
36
+ __all__ = [
37
+ "GPUManager",
38
+ "ClouditiaManagerError",
39
+ "AuthenticationError",
40
+ "SessionNotFoundError",
41
+ "InsufficientResourcesError",
42
+ "APIError"
43
+ ]