pulumiverse-scaleway 1.27.1__py3-none-any.whl → 1.28.0__py3-none-any.whl

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.
Files changed (73) hide show
  1. pulumiverse_scaleway/__init__.py +16 -0
  2. pulumiverse_scaleway/_inputs.py +498 -6
  3. pulumiverse_scaleway/baremetal_server.py +48 -258
  4. pulumiverse_scaleway/database_instance.py +42 -21
  5. pulumiverse_scaleway/databases/_inputs.py +54 -0
  6. pulumiverse_scaleway/databases/get_instance.py +12 -1
  7. pulumiverse_scaleway/databases/instance.py +42 -21
  8. pulumiverse_scaleway/databases/outputs.py +62 -0
  9. pulumiverse_scaleway/databases/snapshot.py +2 -2
  10. pulumiverse_scaleway/elasticmetal/_inputs.py +74 -0
  11. pulumiverse_scaleway/elasticmetal/get_server.py +12 -1
  12. pulumiverse_scaleway/elasticmetal/outputs.py +87 -0
  13. pulumiverse_scaleway/elasticmetal/server.py +48 -258
  14. pulumiverse_scaleway/get_baremetal_server.py +12 -1
  15. pulumiverse_scaleway/get_cockpit_plan.py +2 -38
  16. pulumiverse_scaleway/get_database_instance.py +12 -1
  17. pulumiverse_scaleway/get_instance_private_nic.py +13 -1
  18. pulumiverse_scaleway/get_instance_server.py +12 -1
  19. pulumiverse_scaleway/get_lb_route.py +12 -1
  20. pulumiverse_scaleway/get_loadbalancer.py +12 -1
  21. pulumiverse_scaleway/get_redis_cluster.py +12 -1
  22. pulumiverse_scaleway/get_vpc_gateway_network.py +12 -1
  23. pulumiverse_scaleway/inference/__init__.py +2 -0
  24. pulumiverse_scaleway/inference/_inputs.py +128 -0
  25. pulumiverse_scaleway/inference/deployment.py +70 -55
  26. pulumiverse_scaleway/inference/get_model.py +299 -0
  27. pulumiverse_scaleway/inference/model.py +683 -0
  28. pulumiverse_scaleway/inference/outputs.py +184 -0
  29. pulumiverse_scaleway/inference_deployment.py +70 -55
  30. pulumiverse_scaleway/instance/_inputs.py +108 -0
  31. pulumiverse_scaleway/instance/get_private_nic.py +13 -1
  32. pulumiverse_scaleway/instance/get_server.py +12 -1
  33. pulumiverse_scaleway/instance/outputs.py +124 -0
  34. pulumiverse_scaleway/instance/private_nic.py +30 -0
  35. pulumiverse_scaleway/instance/server.py +28 -0
  36. pulumiverse_scaleway/instance_private_nic.py +30 -0
  37. pulumiverse_scaleway/instance_server.py +28 -0
  38. pulumiverse_scaleway/kubernetes/__init__.py +1 -0
  39. pulumiverse_scaleway/kubernetes/_inputs.py +203 -0
  40. pulumiverse_scaleway/kubernetes/acl.py +446 -0
  41. pulumiverse_scaleway/kubernetes/outputs.py +195 -1
  42. pulumiverse_scaleway/loadbalancer.py +28 -0
  43. pulumiverse_scaleway/loadbalancer_route.py +138 -14
  44. pulumiverse_scaleway/loadbalancers/_inputs.py +54 -0
  45. pulumiverse_scaleway/loadbalancers/get_load_balancer.py +12 -1
  46. pulumiverse_scaleway/loadbalancers/get_route.py +12 -1
  47. pulumiverse_scaleway/loadbalancers/load_balancer.py +28 -0
  48. pulumiverse_scaleway/loadbalancers/outputs.py +62 -0
  49. pulumiverse_scaleway/loadbalancers/route.py +138 -14
  50. pulumiverse_scaleway/mnq/sns_credentials.py +7 -7
  51. pulumiverse_scaleway/mnq/sqs_credentials.py +7 -7
  52. pulumiverse_scaleway/mnq_sns_credentials.py +7 -7
  53. pulumiverse_scaleway/mnq_sqs_credentials.py +7 -7
  54. pulumiverse_scaleway/network/_inputs.py +54 -0
  55. pulumiverse_scaleway/network/gateway_network.py +28 -0
  56. pulumiverse_scaleway/network/get_gateway_network.py +12 -1
  57. pulumiverse_scaleway/network/outputs.py +62 -0
  58. pulumiverse_scaleway/network/route.py +90 -2
  59. pulumiverse_scaleway/observability/get_plan.py +2 -38
  60. pulumiverse_scaleway/outputs.py +574 -5
  61. pulumiverse_scaleway/pulumi-plugin.json +1 -1
  62. pulumiverse_scaleway/rdb_snapshot.py +2 -2
  63. pulumiverse_scaleway/redis/_inputs.py +60 -6
  64. pulumiverse_scaleway/redis/cluster.py +28 -0
  65. pulumiverse_scaleway/redis/get_cluster.py +12 -1
  66. pulumiverse_scaleway/redis/outputs.py +66 -4
  67. pulumiverse_scaleway/redis_cluster.py +28 -0
  68. pulumiverse_scaleway/vpc_gateway_network.py +28 -0
  69. pulumiverse_scaleway/vpc_route.py +90 -2
  70. {pulumiverse_scaleway-1.27.1.dist-info → pulumiverse_scaleway-1.28.0.dist-info}/METADATA +1 -1
  71. {pulumiverse_scaleway-1.27.1.dist-info → pulumiverse_scaleway-1.28.0.dist-info}/RECORD +73 -70
  72. {pulumiverse_scaleway-1.27.1.dist-info → pulumiverse_scaleway-1.28.0.dist-info}/WHEEL +1 -1
  73. {pulumiverse_scaleway-1.27.1.dist-info → pulumiverse_scaleway-1.28.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,683 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import sys
8
+ import pulumi
9
+ import pulumi.runtime
10
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
15
+ from .. import _utilities
16
+ from . import outputs
17
+ from ._inputs import *
18
+
19
+ __all__ = ['ModelArgs', 'Model']
20
+
21
+ @pulumi.input_type
22
+ class ModelArgs:
23
+ def __init__(__self__, *,
24
+ url: pulumi.Input[str],
25
+ name: Optional[pulumi.Input[str]] = None,
26
+ project_id: Optional[pulumi.Input[str]] = None,
27
+ region: Optional[pulumi.Input[str]] = None,
28
+ secret: Optional[pulumi.Input[str]] = None):
29
+ """
30
+ The set of arguments for constructing a Model resource.
31
+ :param pulumi.Input[str] url: The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
32
+ :param pulumi.Input[str] name: The name of the model. This must be unique within the project.
33
+ :param pulumi.Input[str] project_id: `project_id`) The ID of the project the deployment is associated with.
34
+ :param pulumi.Input[str] region: `region`) The region in which the deployment is created.
35
+ :param pulumi.Input[str] secret: Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
36
+ """
37
+ pulumi.set(__self__, "url", url)
38
+ if name is not None:
39
+ pulumi.set(__self__, "name", name)
40
+ if project_id is not None:
41
+ pulumi.set(__self__, "project_id", project_id)
42
+ if region is not None:
43
+ pulumi.set(__self__, "region", region)
44
+ if secret is not None:
45
+ pulumi.set(__self__, "secret", secret)
46
+
47
+ @property
48
+ @pulumi.getter
49
+ def url(self) -> pulumi.Input[str]:
50
+ """
51
+ The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
52
+ """
53
+ return pulumi.get(self, "url")
54
+
55
+ @url.setter
56
+ def url(self, value: pulumi.Input[str]):
57
+ pulumi.set(self, "url", value)
58
+
59
+ @property
60
+ @pulumi.getter
61
+ def name(self) -> Optional[pulumi.Input[str]]:
62
+ """
63
+ The name of the model. This must be unique within the project.
64
+ """
65
+ return pulumi.get(self, "name")
66
+
67
+ @name.setter
68
+ def name(self, value: Optional[pulumi.Input[str]]):
69
+ pulumi.set(self, "name", value)
70
+
71
+ @property
72
+ @pulumi.getter(name="projectId")
73
+ def project_id(self) -> Optional[pulumi.Input[str]]:
74
+ """
75
+ `project_id`) The ID of the project the deployment is associated with.
76
+ """
77
+ return pulumi.get(self, "project_id")
78
+
79
+ @project_id.setter
80
+ def project_id(self, value: Optional[pulumi.Input[str]]):
81
+ pulumi.set(self, "project_id", value)
82
+
83
+ @property
84
+ @pulumi.getter
85
+ def region(self) -> Optional[pulumi.Input[str]]:
86
+ """
87
+ `region`) The region in which the deployment is created.
88
+ """
89
+ return pulumi.get(self, "region")
90
+
91
+ @region.setter
92
+ def region(self, value: Optional[pulumi.Input[str]]):
93
+ pulumi.set(self, "region", value)
94
+
95
+ @property
96
+ @pulumi.getter
97
+ def secret(self) -> Optional[pulumi.Input[str]]:
98
+ """
99
+ Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
100
+ """
101
+ return pulumi.get(self, "secret")
102
+
103
+ @secret.setter
104
+ def secret(self, value: Optional[pulumi.Input[str]]):
105
+ pulumi.set(self, "secret", value)
106
+
107
+
108
+ @pulumi.input_type
109
+ class _ModelState:
110
+ def __init__(__self__, *,
111
+ created_at: Optional[pulumi.Input[str]] = None,
112
+ description: Optional[pulumi.Input[str]] = None,
113
+ has_eula: Optional[pulumi.Input[bool]] = None,
114
+ name: Optional[pulumi.Input[str]] = None,
115
+ nodes_supports: Optional[pulumi.Input[Sequence[pulumi.Input['ModelNodesSupportArgs']]]] = None,
116
+ parameter_size_bits: Optional[pulumi.Input[int]] = None,
117
+ project_id: Optional[pulumi.Input[str]] = None,
118
+ region: Optional[pulumi.Input[str]] = None,
119
+ secret: Optional[pulumi.Input[str]] = None,
120
+ size_bytes: Optional[pulumi.Input[int]] = None,
121
+ status: Optional[pulumi.Input[str]] = None,
122
+ tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
123
+ updated_at: Optional[pulumi.Input[str]] = None,
124
+ url: Optional[pulumi.Input[str]] = None):
125
+ """
126
+ Input properties used for looking up and filtering Model resources.
127
+ :param pulumi.Input[str] created_at: The date and time of the creation of the model
128
+ :param pulumi.Input[str] description: A textual description of the model (if available).
129
+ :param pulumi.Input[bool] has_eula: Whether the model requires end-user license agreement acceptance before use.
130
+ :param pulumi.Input[str] name: The name of the model. This must be unique within the project.
131
+ :param pulumi.Input[Sequence[pulumi.Input['ModelNodesSupportArgs']]] nodes_supports: List of supported node types and their quantization options. Each entry contains:
132
+ :param pulumi.Input[int] parameter_size_bits: Size, in bits, of the model parameters.
133
+ :param pulumi.Input[str] project_id: `project_id`) The ID of the project the deployment is associated with.
134
+ :param pulumi.Input[str] region: `region`) The region in which the deployment is created.
135
+ :param pulumi.Input[str] secret: Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
136
+ :param pulumi.Input[int] size_bytes: Total size, in bytes, of the model archive.
137
+ :param pulumi.Input[str] status: The current status of the model (e.g., ready, error, etc.).
138
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: Tags associated with the model.
139
+ :param pulumi.Input[str] updated_at: The date and time of the last update of the model
140
+ :param pulumi.Input[str] url: The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
141
+ """
142
+ if created_at is not None:
143
+ pulumi.set(__self__, "created_at", created_at)
144
+ if description is not None:
145
+ pulumi.set(__self__, "description", description)
146
+ if has_eula is not None:
147
+ pulumi.set(__self__, "has_eula", has_eula)
148
+ if name is not None:
149
+ pulumi.set(__self__, "name", name)
150
+ if nodes_supports is not None:
151
+ pulumi.set(__self__, "nodes_supports", nodes_supports)
152
+ if parameter_size_bits is not None:
153
+ pulumi.set(__self__, "parameter_size_bits", parameter_size_bits)
154
+ if project_id is not None:
155
+ pulumi.set(__self__, "project_id", project_id)
156
+ if region is not None:
157
+ pulumi.set(__self__, "region", region)
158
+ if secret is not None:
159
+ pulumi.set(__self__, "secret", secret)
160
+ if size_bytes is not None:
161
+ pulumi.set(__self__, "size_bytes", size_bytes)
162
+ if status is not None:
163
+ pulumi.set(__self__, "status", status)
164
+ if tags is not None:
165
+ pulumi.set(__self__, "tags", tags)
166
+ if updated_at is not None:
167
+ pulumi.set(__self__, "updated_at", updated_at)
168
+ if url is not None:
169
+ pulumi.set(__self__, "url", url)
170
+
171
+ @property
172
+ @pulumi.getter(name="createdAt")
173
+ def created_at(self) -> Optional[pulumi.Input[str]]:
174
+ """
175
+ The date and time of the creation of the model
176
+ """
177
+ return pulumi.get(self, "created_at")
178
+
179
+ @created_at.setter
180
+ def created_at(self, value: Optional[pulumi.Input[str]]):
181
+ pulumi.set(self, "created_at", value)
182
+
183
+ @property
184
+ @pulumi.getter
185
+ def description(self) -> Optional[pulumi.Input[str]]:
186
+ """
187
+ A textual description of the model (if available).
188
+ """
189
+ return pulumi.get(self, "description")
190
+
191
+ @description.setter
192
+ def description(self, value: Optional[pulumi.Input[str]]):
193
+ pulumi.set(self, "description", value)
194
+
195
+ @property
196
+ @pulumi.getter(name="hasEula")
197
+ def has_eula(self) -> Optional[pulumi.Input[bool]]:
198
+ """
199
+ Whether the model requires end-user license agreement acceptance before use.
200
+ """
201
+ return pulumi.get(self, "has_eula")
202
+
203
+ @has_eula.setter
204
+ def has_eula(self, value: Optional[pulumi.Input[bool]]):
205
+ pulumi.set(self, "has_eula", value)
206
+
207
+ @property
208
+ @pulumi.getter
209
+ def name(self) -> Optional[pulumi.Input[str]]:
210
+ """
211
+ The name of the model. This must be unique within the project.
212
+ """
213
+ return pulumi.get(self, "name")
214
+
215
+ @name.setter
216
+ def name(self, value: Optional[pulumi.Input[str]]):
217
+ pulumi.set(self, "name", value)
218
+
219
+ @property
220
+ @pulumi.getter(name="nodesSupports")
221
+ def nodes_supports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ModelNodesSupportArgs']]]]:
222
+ """
223
+ List of supported node types and their quantization options. Each entry contains:
224
+ """
225
+ return pulumi.get(self, "nodes_supports")
226
+
227
+ @nodes_supports.setter
228
+ def nodes_supports(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ModelNodesSupportArgs']]]]):
229
+ pulumi.set(self, "nodes_supports", value)
230
+
231
+ @property
232
+ @pulumi.getter(name="parameterSizeBits")
233
+ def parameter_size_bits(self) -> Optional[pulumi.Input[int]]:
234
+ """
235
+ Size, in bits, of the model parameters.
236
+ """
237
+ return pulumi.get(self, "parameter_size_bits")
238
+
239
+ @parameter_size_bits.setter
240
+ def parameter_size_bits(self, value: Optional[pulumi.Input[int]]):
241
+ pulumi.set(self, "parameter_size_bits", value)
242
+
243
+ @property
244
+ @pulumi.getter(name="projectId")
245
+ def project_id(self) -> Optional[pulumi.Input[str]]:
246
+ """
247
+ `project_id`) The ID of the project the deployment is associated with.
248
+ """
249
+ return pulumi.get(self, "project_id")
250
+
251
+ @project_id.setter
252
+ def project_id(self, value: Optional[pulumi.Input[str]]):
253
+ pulumi.set(self, "project_id", value)
254
+
255
+ @property
256
+ @pulumi.getter
257
+ def region(self) -> Optional[pulumi.Input[str]]:
258
+ """
259
+ `region`) The region in which the deployment is created.
260
+ """
261
+ return pulumi.get(self, "region")
262
+
263
+ @region.setter
264
+ def region(self, value: Optional[pulumi.Input[str]]):
265
+ pulumi.set(self, "region", value)
266
+
267
+ @property
268
+ @pulumi.getter
269
+ def secret(self) -> Optional[pulumi.Input[str]]:
270
+ """
271
+ Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
272
+ """
273
+ return pulumi.get(self, "secret")
274
+
275
+ @secret.setter
276
+ def secret(self, value: Optional[pulumi.Input[str]]):
277
+ pulumi.set(self, "secret", value)
278
+
279
+ @property
280
+ @pulumi.getter(name="sizeBytes")
281
+ def size_bytes(self) -> Optional[pulumi.Input[int]]:
282
+ """
283
+ Total size, in bytes, of the model archive.
284
+ """
285
+ return pulumi.get(self, "size_bytes")
286
+
287
+ @size_bytes.setter
288
+ def size_bytes(self, value: Optional[pulumi.Input[int]]):
289
+ pulumi.set(self, "size_bytes", value)
290
+
291
+ @property
292
+ @pulumi.getter
293
+ def status(self) -> Optional[pulumi.Input[str]]:
294
+ """
295
+ The current status of the model (e.g., ready, error, etc.).
296
+ """
297
+ return pulumi.get(self, "status")
298
+
299
+ @status.setter
300
+ def status(self, value: Optional[pulumi.Input[str]]):
301
+ pulumi.set(self, "status", value)
302
+
303
+ @property
304
+ @pulumi.getter
305
+ def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
306
+ """
307
+ Tags associated with the model.
308
+ """
309
+ return pulumi.get(self, "tags")
310
+
311
+ @tags.setter
312
+ def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
313
+ pulumi.set(self, "tags", value)
314
+
315
+ @property
316
+ @pulumi.getter(name="updatedAt")
317
+ def updated_at(self) -> Optional[pulumi.Input[str]]:
318
+ """
319
+ The date and time of the last update of the model
320
+ """
321
+ return pulumi.get(self, "updated_at")
322
+
323
+ @updated_at.setter
324
+ def updated_at(self, value: Optional[pulumi.Input[str]]):
325
+ pulumi.set(self, "updated_at", value)
326
+
327
+ @property
328
+ @pulumi.getter
329
+ def url(self) -> Optional[pulumi.Input[str]]:
330
+ """
331
+ The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
332
+ """
333
+ return pulumi.get(self, "url")
334
+
335
+ @url.setter
336
+ def url(self, value: Optional[pulumi.Input[str]]):
337
+ pulumi.set(self, "url", value)
338
+
339
+
340
+ class Model(pulumi.CustomResource):
341
+ @overload
342
+ def __init__(__self__,
343
+ resource_name: str,
344
+ opts: Optional[pulumi.ResourceOptions] = None,
345
+ name: Optional[pulumi.Input[str]] = None,
346
+ project_id: Optional[pulumi.Input[str]] = None,
347
+ region: Optional[pulumi.Input[str]] = None,
348
+ secret: Optional[pulumi.Input[str]] = None,
349
+ url: Optional[pulumi.Input[str]] = None,
350
+ __props__=None):
351
+ """
352
+ The inference.Model resource allows you to upload and manage inference models in the Scaleway Inference ecosystem. Once registered, a model can be used in any inference.Deployment resource.
353
+
354
+ ## Example Usage
355
+
356
+ ### Basic
357
+
358
+ ```python
359
+ import pulumi
360
+ import pulumiverse_scaleway as scaleway
361
+
362
+ test = scaleway.inference.Model("test",
363
+ name="my-awesome-model",
364
+ url="https://huggingface.co/agentica-org/DeepCoder-14B-Preview",
365
+ secret="my-secret-token")
366
+ ```
367
+
368
+ ### Deploy your own model on your managed inference
369
+
370
+ ```python
371
+ import pulumi
372
+ import pulumiverse_scaleway as scaleway
373
+
374
+ my_model = scaleway.inference.Model("my_model",
375
+ name="my-awesome-model",
376
+ url="https://huggingface.co/agentica-org/DeepCoder-14B-Preview",
377
+ secret="my-secret-token")
378
+ my_deployment = scaleway.inference.Deployment("my_deployment",
379
+ name="test-inference-deployment-basic",
380
+ node_type="H100",
381
+ model_id=my_model.id,
382
+ public_endpoint={
383
+ "is_enabled": True,
384
+ },
385
+ accept_eula=True)
386
+ ```
387
+
388
+ ## Import
389
+
390
+ Models can be imported using, `{region}/{id}`, as shown below:
391
+
392
+ bash
393
+
394
+ ```sh
395
+ $ pulumi import scaleway:inference/model:Model my_model fr-par/11111111-1111-1111-1111-111111111111
396
+ ```
397
+
398
+ :param str resource_name: The name of the resource.
399
+ :param pulumi.ResourceOptions opts: Options for the resource.
400
+ :param pulumi.Input[str] name: The name of the model. This must be unique within the project.
401
+ :param pulumi.Input[str] project_id: `project_id`) The ID of the project the deployment is associated with.
402
+ :param pulumi.Input[str] region: `region`) The region in which the deployment is created.
403
+ :param pulumi.Input[str] secret: Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
404
+ :param pulumi.Input[str] url: The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
405
+ """
406
+ ...
407
+ @overload
408
+ def __init__(__self__,
409
+ resource_name: str,
410
+ args: ModelArgs,
411
+ opts: Optional[pulumi.ResourceOptions] = None):
412
+ """
413
+ The inference.Model resource allows you to upload and manage inference models in the Scaleway Inference ecosystem. Once registered, a model can be used in any inference.Deployment resource.
414
+
415
+ ## Example Usage
416
+
417
+ ### Basic
418
+
419
+ ```python
420
+ import pulumi
421
+ import pulumiverse_scaleway as scaleway
422
+
423
+ test = scaleway.inference.Model("test",
424
+ name="my-awesome-model",
425
+ url="https://huggingface.co/agentica-org/DeepCoder-14B-Preview",
426
+ secret="my-secret-token")
427
+ ```
428
+
429
+ ### Deploy your own model on your managed inference
430
+
431
+ ```python
432
+ import pulumi
433
+ import pulumiverse_scaleway as scaleway
434
+
435
+ my_model = scaleway.inference.Model("my_model",
436
+ name="my-awesome-model",
437
+ url="https://huggingface.co/agentica-org/DeepCoder-14B-Preview",
438
+ secret="my-secret-token")
439
+ my_deployment = scaleway.inference.Deployment("my_deployment",
440
+ name="test-inference-deployment-basic",
441
+ node_type="H100",
442
+ model_id=my_model.id,
443
+ public_endpoint={
444
+ "is_enabled": True,
445
+ },
446
+ accept_eula=True)
447
+ ```
448
+
449
+ ## Import
450
+
451
+ Models can be imported using, `{region}/{id}`, as shown below:
452
+
453
+ bash
454
+
455
+ ```sh
456
+ $ pulumi import scaleway:inference/model:Model my_model fr-par/11111111-1111-1111-1111-111111111111
457
+ ```
458
+
459
+ :param str resource_name: The name of the resource.
460
+ :param ModelArgs args: The arguments to use to populate this resource's properties.
461
+ :param pulumi.ResourceOptions opts: Options for the resource.
462
+ """
463
+ ...
464
+ def __init__(__self__, resource_name: str, *args, **kwargs):
465
+ resource_args, opts = _utilities.get_resource_args_opts(ModelArgs, pulumi.ResourceOptions, *args, **kwargs)
466
+ if resource_args is not None:
467
+ __self__._internal_init(resource_name, opts, **resource_args.__dict__)
468
+ else:
469
+ __self__._internal_init(resource_name, *args, **kwargs)
470
+
471
+ def _internal_init(__self__,
472
+ resource_name: str,
473
+ opts: Optional[pulumi.ResourceOptions] = None,
474
+ name: Optional[pulumi.Input[str]] = None,
475
+ project_id: Optional[pulumi.Input[str]] = None,
476
+ region: Optional[pulumi.Input[str]] = None,
477
+ secret: Optional[pulumi.Input[str]] = None,
478
+ url: Optional[pulumi.Input[str]] = None,
479
+ __props__=None):
480
+ opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
481
+ if not isinstance(opts, pulumi.ResourceOptions):
482
+ raise TypeError('Expected resource options to be a ResourceOptions instance')
483
+ if opts.id is None:
484
+ if __props__ is not None:
485
+ raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
486
+ __props__ = ModelArgs.__new__(ModelArgs)
487
+
488
+ __props__.__dict__["name"] = name
489
+ __props__.__dict__["project_id"] = project_id
490
+ __props__.__dict__["region"] = region
491
+ __props__.__dict__["secret"] = None if secret is None else pulumi.Output.secret(secret)
492
+ if url is None and not opts.urn:
493
+ raise TypeError("Missing required property 'url'")
494
+ __props__.__dict__["url"] = url
495
+ __props__.__dict__["created_at"] = None
496
+ __props__.__dict__["description"] = None
497
+ __props__.__dict__["has_eula"] = None
498
+ __props__.__dict__["nodes_supports"] = None
499
+ __props__.__dict__["parameter_size_bits"] = None
500
+ __props__.__dict__["size_bytes"] = None
501
+ __props__.__dict__["status"] = None
502
+ __props__.__dict__["tags"] = None
503
+ __props__.__dict__["updated_at"] = None
504
+ secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["secret"])
505
+ opts = pulumi.ResourceOptions.merge(opts, secret_opts)
506
+ super(Model, __self__).__init__(
507
+ 'scaleway:inference/model:Model',
508
+ resource_name,
509
+ __props__,
510
+ opts)
511
+
512
+ @staticmethod
513
+ def get(resource_name: str,
514
+ id: pulumi.Input[str],
515
+ opts: Optional[pulumi.ResourceOptions] = None,
516
+ created_at: Optional[pulumi.Input[str]] = None,
517
+ description: Optional[pulumi.Input[str]] = None,
518
+ has_eula: Optional[pulumi.Input[bool]] = None,
519
+ name: Optional[pulumi.Input[str]] = None,
520
+ nodes_supports: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ModelNodesSupportArgs', 'ModelNodesSupportArgsDict']]]]] = None,
521
+ parameter_size_bits: Optional[pulumi.Input[int]] = None,
522
+ project_id: Optional[pulumi.Input[str]] = None,
523
+ region: Optional[pulumi.Input[str]] = None,
524
+ secret: Optional[pulumi.Input[str]] = None,
525
+ size_bytes: Optional[pulumi.Input[int]] = None,
526
+ status: Optional[pulumi.Input[str]] = None,
527
+ tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
528
+ updated_at: Optional[pulumi.Input[str]] = None,
529
+ url: Optional[pulumi.Input[str]] = None) -> 'Model':
530
+ """
531
+ Get an existing Model resource's state with the given name, id, and optional extra
532
+ properties used to qualify the lookup.
533
+
534
+ :param str resource_name: The unique name of the resulting resource.
535
+ :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
536
+ :param pulumi.ResourceOptions opts: Options for the resource.
537
+ :param pulumi.Input[str] created_at: The date and time of the creation of the model
538
+ :param pulumi.Input[str] description: A textual description of the model (if available).
539
+ :param pulumi.Input[bool] has_eula: Whether the model requires end-user license agreement acceptance before use.
540
+ :param pulumi.Input[str] name: The name of the model. This must be unique within the project.
541
+ :param pulumi.Input[Sequence[pulumi.Input[Union['ModelNodesSupportArgs', 'ModelNodesSupportArgsDict']]]] nodes_supports: List of supported node types and their quantization options. Each entry contains:
542
+ :param pulumi.Input[int] parameter_size_bits: Size, in bits, of the model parameters.
543
+ :param pulumi.Input[str] project_id: `project_id`) The ID of the project the deployment is associated with.
544
+ :param pulumi.Input[str] region: `region`) The region in which the deployment is created.
545
+ :param pulumi.Input[str] secret: Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
546
+ :param pulumi.Input[int] size_bytes: Total size, in bytes, of the model archive.
547
+ :param pulumi.Input[str] status: The current status of the model (e.g., ready, error, etc.).
548
+ :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: Tags associated with the model.
549
+ :param pulumi.Input[str] updated_at: The date and time of the last update of the model
550
+ :param pulumi.Input[str] url: The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
551
+ """
552
+ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
553
+
554
+ __props__ = _ModelState.__new__(_ModelState)
555
+
556
+ __props__.__dict__["created_at"] = created_at
557
+ __props__.__dict__["description"] = description
558
+ __props__.__dict__["has_eula"] = has_eula
559
+ __props__.__dict__["name"] = name
560
+ __props__.__dict__["nodes_supports"] = nodes_supports
561
+ __props__.__dict__["parameter_size_bits"] = parameter_size_bits
562
+ __props__.__dict__["project_id"] = project_id
563
+ __props__.__dict__["region"] = region
564
+ __props__.__dict__["secret"] = secret
565
+ __props__.__dict__["size_bytes"] = size_bytes
566
+ __props__.__dict__["status"] = status
567
+ __props__.__dict__["tags"] = tags
568
+ __props__.__dict__["updated_at"] = updated_at
569
+ __props__.__dict__["url"] = url
570
+ return Model(resource_name, opts=opts, __props__=__props__)
571
+
572
+ @property
573
+ @pulumi.getter(name="createdAt")
574
+ def created_at(self) -> pulumi.Output[str]:
575
+ """
576
+ The date and time of the creation of the model
577
+ """
578
+ return pulumi.get(self, "created_at")
579
+
580
+ @property
581
+ @pulumi.getter
582
+ def description(self) -> pulumi.Output[str]:
583
+ """
584
+ A textual description of the model (if available).
585
+ """
586
+ return pulumi.get(self, "description")
587
+
588
+ @property
589
+ @pulumi.getter(name="hasEula")
590
+ def has_eula(self) -> pulumi.Output[bool]:
591
+ """
592
+ Whether the model requires end-user license agreement acceptance before use.
593
+ """
594
+ return pulumi.get(self, "has_eula")
595
+
596
+ @property
597
+ @pulumi.getter
598
+ def name(self) -> pulumi.Output[str]:
599
+ """
600
+ The name of the model. This must be unique within the project.
601
+ """
602
+ return pulumi.get(self, "name")
603
+
604
+ @property
605
+ @pulumi.getter(name="nodesSupports")
606
+ def nodes_supports(self) -> pulumi.Output[Sequence['outputs.ModelNodesSupport']]:
607
+ """
608
+ List of supported node types and their quantization options. Each entry contains:
609
+ """
610
+ return pulumi.get(self, "nodes_supports")
611
+
612
+ @property
613
+ @pulumi.getter(name="parameterSizeBits")
614
+ def parameter_size_bits(self) -> pulumi.Output[int]:
615
+ """
616
+ Size, in bits, of the model parameters.
617
+ """
618
+ return pulumi.get(self, "parameter_size_bits")
619
+
620
+ @property
621
+ @pulumi.getter(name="projectId")
622
+ def project_id(self) -> pulumi.Output[str]:
623
+ """
624
+ `project_id`) The ID of the project the deployment is associated with.
625
+ """
626
+ return pulumi.get(self, "project_id")
627
+
628
+ @property
629
+ @pulumi.getter
630
+ def region(self) -> pulumi.Output[str]:
631
+ """
632
+ `region`) The region in which the deployment is created.
633
+ """
634
+ return pulumi.get(self, "region")
635
+
636
+ @property
637
+ @pulumi.getter
638
+ def secret(self) -> pulumi.Output[Optional[str]]:
639
+ """
640
+ Authentication token used to pull the model from a private or gated URL (e.g., a Hugging Face access token with read permission).
641
+ """
642
+ return pulumi.get(self, "secret")
643
+
644
+ @property
645
+ @pulumi.getter(name="sizeBytes")
646
+ def size_bytes(self) -> pulumi.Output[int]:
647
+ """
648
+ Total size, in bytes, of the model archive.
649
+ """
650
+ return pulumi.get(self, "size_bytes")
651
+
652
+ @property
653
+ @pulumi.getter
654
+ def status(self) -> pulumi.Output[str]:
655
+ """
656
+ The current status of the model (e.g., ready, error, etc.).
657
+ """
658
+ return pulumi.get(self, "status")
659
+
660
+ @property
661
+ @pulumi.getter
662
+ def tags(self) -> pulumi.Output[Sequence[str]]:
663
+ """
664
+ Tags associated with the model.
665
+ """
666
+ return pulumi.get(self, "tags")
667
+
668
+ @property
669
+ @pulumi.getter(name="updatedAt")
670
+ def updated_at(self) -> pulumi.Output[str]:
671
+ """
672
+ The date and time of the last update of the model
673
+ """
674
+ return pulumi.get(self, "updated_at")
675
+
676
+ @property
677
+ @pulumi.getter
678
+ def url(self) -> pulumi.Output[str]:
679
+ """
680
+ The HTTPS source URL from which the model will be downloaded. This is typically a Hugging Face repository URL (e.g., https://huggingface.co/agentica-org/DeepCoder-14B-Preview). The URL must be publicly accessible or require valid credentials via `secret`
681
+ """
682
+ return pulumi.get(self, "url")
683
+