diff --git a/README.md b/README.md index e5dc7c0..5f385f7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ No description provided (generated by Openapi Generator https://github.com/opena This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: 0.1.0 -- Package version: 4.32.0 +- Package version: 4.33.0 - Generator version: 7.9.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen @@ -105,6 +105,7 @@ Class | Method | HTTP request | Description *EXTERNALApi* | [**create_job_deployment_deployments_job_post**](docs/EXTERNALApi.md#create_job_deployment_deployments_job_post) | **POST** /deployments/job | Create Job Deployment *EXTERNALApi* | [**create_new_organization_organizations_post**](docs/EXTERNALApi.md#create_new_organization_organizations_post) | **POST** /organizations | Create New Organization *EXTERNALApi* | [**create_service_account_service_accounts_post**](docs/EXTERNALApi.md#create_service_account_service_accounts_post) | **POST** /service-accounts | Create Service Account +*EXTERNALApi* | [**create_unified_deployment_deployments_post**](docs/EXTERNALApi.md#create_unified_deployment_deployments_post) | **POST** /deployments | Create Unified Deployment *EXTERNALApi* | [**create_volume_endpoint_volumes_post**](docs/EXTERNALApi.md#create_volume_endpoint_volumes_post) | **POST** /volumes | Create Volume Endpoint *EXTERNALApi* | [**delete_cluster_clusters_cluster_id_delete**](docs/EXTERNALApi.md#delete_cluster_clusters_cluster_id_delete) | **DELETE** /clusters/{cluster_id} | Delete Cluster *EXTERNALApi* | [**delete_hardware_instance_hardware_instances_hardware_instance_id_delete**](docs/EXTERNALApi.md#delete_hardware_instance_hardware_instances_hardware_instance_id_delete) | **DELETE** /hardware-instances/{hardware_instance_id} | Delete Hardware Instance @@ -289,11 +290,19 @@ Class | Method | HTTP request | Description - [Spire](docs/Spire.md) - [SpireCrds](docs/SpireCrds.md) - [TeleportKubeAgent](docs/TeleportKubeAgent.md) + - [UnifiedWriteComputeDeploymentRequest](docs/UnifiedWriteComputeDeploymentRequest.md) + - [UnifiedWriteDeploymentRequest](docs/UnifiedWriteDeploymentRequest.md) + - [UnifiedWriteDeploymentResponse](docs/UnifiedWriteDeploymentResponse.md) + - [UnifiedWriteDynamoDeploymentRequest](docs/UnifiedWriteDynamoDeploymentRequest.md) + - [UnifiedWriteInferenceV3DeploymentRequest](docs/UnifiedWriteInferenceV3DeploymentRequest.md) + - [UnifiedWriteJobDeploymentRequest](docs/UnifiedWriteJobDeploymentRequest.md) - [UpdateClusterMetadataRequest](docs/UpdateClusterMetadataRequest.md) - [UpdateDeploymentResponse](docs/UpdateDeploymentResponse.md) - [UpdateDeploymentStatusV3Request](docs/UpdateDeploymentStatusV3Request.md) - [UpdateServiceAccountRequest](docs/UpdateServiceAccountRequest.md) - [UpsertUserVaultItemRequest](docs/UpsertUserVaultItemRequest.md) + - [UsageAvailability](docs/UsageAvailability.md) + - [UsageComponent](docs/UsageComponent.md) - [UserVaultItem](docs/UserVaultItem.md) - [UserVaultType](docs/UserVaultType.md) - [ValidationError](docs/ValidationError.md) diff --git a/docs/ClusterCredential.md b/docs/ClusterCredential.md index ab49196..0c04d7a 100644 --- a/docs/ClusterCredential.md +++ b/docs/ClusterCredential.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **server** | **str** | | **bearer_token** | **str** | | -**ca_cert** | **str** | | +**ca_cert** | **str** | Base64-encoded PEM CA certificate of the cluster's API server, as in a kubeconfig's `certificate-authority-data` or the `ca.crt` key of a service-account token Secret's `data`. | ## Example diff --git a/docs/CreateCServeV3DeploymentRequest.md b/docs/CreateCServeV3DeploymentRequest.md index f6d7612..02b9e9a 100644 --- a/docs/CreateCServeV3DeploymentRequest.md +++ b/docs/CreateCServeV3DeploymentRequest.md @@ -14,16 +14,19 @@ Name | Type | Description | Notes **chart_revision** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] **priority** | **str** | | [optional] +**hf_token_ref** | **int** | | [optional] **recipe** | [**CServeV2Recipe**](CServeV2Recipe.md) | | **cserve_version** | **str** | | [optional] **hf_token** | **str** | | [optional] **endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] **endpoint_certificate_authority** | **str** | | [optional] **min_replicas** | **int** | | **max_replicas** | **int** | | **concurrency** | **int** | | [optional] **cooldown_period** | **int** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] **session_affinity** | **bool** | Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state. | [optional] [default to False] diff --git a/docs/CreateComputeDeploymentRequest.md b/docs/CreateComputeDeploymentRequest.md index 12bca85..cb5e5cb 100644 --- a/docs/CreateComputeDeploymentRequest.md +++ b/docs/CreateComputeDeploymentRequest.md @@ -14,6 +14,8 @@ Name | Type | Description | Notes **priority** | **str** | | [optional] **image_url** | **str** | | **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] +**env_vars_refs** | **object** | | [optional] **ssh_public_key** | **str** | | **enable_logging** | **bool** | | [optional] [default to False] diff --git a/docs/CreateDynamoDeploymentRequest.md b/docs/CreateDynamoDeploymentRequest.md index 3f5aea6..8530aed 100644 --- a/docs/CreateDynamoDeploymentRequest.md +++ b/docs/CreateDynamoDeploymentRequest.md @@ -27,9 +27,13 @@ Name | Type | Description | Notes **cooldown_period** | **int** | | [optional] **extra_args** | **str** | | [optional] **hf_token** | **str** | | [optional] +**hf_token_ref** | **int** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] **endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] **endpoint_certificate_authority** | **str** | | [optional] +**image_pull_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] **backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] diff --git a/docs/CreateInferenceV3DeploymentRequest.md b/docs/CreateInferenceV3DeploymentRequest.md index 8883008..0678df1 100644 --- a/docs/CreateInferenceV3DeploymentRequest.md +++ b/docs/CreateInferenceV3DeploymentRequest.md @@ -14,8 +14,10 @@ Name | Type | Description | Notes **chart_revision** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] **priority** | **str** | | [optional] +**hf_token_ref** | **int** | | [optional] **image_url** | **str** | | **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] **port** | **int** | | **min_replicas** | **int** | | **max_replicas** | **int** | | @@ -25,8 +27,10 @@ Name | Type | Description | Notes **env_vars** | **Dict[str, str]** | | [optional] **command** | **str** | | [optional] **endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] **endpoint_certificate_authority** | **str** | | [optional] **hf_token** | **str** | | [optional] +**env_vars_refs** | **object** | | [optional] **backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] **enable_logging** | **bool** | | [optional] [default to False] **enable_node_model_cache** | **bool** | | [optional] [default to False] diff --git a/docs/CreateJobDeploymentRequest.md b/docs/CreateJobDeploymentRequest.md index 7a7de5e..00a7cba 100644 --- a/docs/CreateJobDeploymentRequest.md +++ b/docs/CreateJobDeploymentRequest.md @@ -14,7 +14,9 @@ Name | Type | Description | Notes **priority** | **str** | | [optional] **image_url** | **str** | | **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] **command** | **str** | | [optional] **completions** | **int** | | [optional] [default to 1] **parallelism** | **int** | | [optional] [default to 1] diff --git a/docs/DeploymentResponse.md b/docs/DeploymentResponse.md index dd5a494..7284863 100644 --- a/docs/DeploymentResponse.md +++ b/docs/DeploymentResponse.md @@ -20,6 +20,7 @@ Name | Type | Description | Notes **user_annotations** | **Dict[str, str]** | | [optional] **priority** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**hf_token_ref** | **int** | | [optional] **serving_mode** | [**DynamoServingMode**](DynamoServingMode.md) | | [optional] **worker_pools** | [**DynamoWorkerPools**](DynamoWorkerPools.md) | | [optional] **communications** | [**DynamoCommunicationsOutput**](DynamoCommunicationsOutput.md) | | [optional] @@ -32,8 +33,11 @@ Name | Type | Description | Notes **cooldown_period** | **int** | | [optional] [default to 1800] **extra_args** | **str** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] **endpoint_certificate_authority** | **str** | | [optional] **endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**image_pull_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] **backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] diff --git a/docs/DeploymentType.md b/docs/DeploymentType.md index 4b6ab1a..b3668b0 100644 --- a/docs/DeploymentType.md +++ b/docs/DeploymentType.md @@ -31,6 +31,14 @@ * `DYNAMO` (value: `'dynamo'`) +* `CCL_COMPUTE` (value: `'ccl_compute'`) + +* `CCL_INFERENCE` (value: `'ccl_inference'`) + +* `CCL_JOB` (value: `'ccl_job'`) + +* `CCL_DYNAMO` (value: `'ccl_dynamo'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/EXTERNALApi.md b/docs/EXTERNALApi.md index ef3ddfc..51688dd 100644 --- a/docs/EXTERNALApi.md +++ b/docs/EXTERNALApi.md @@ -15,6 +15,7 @@ Method | HTTP request | Description [**create_job_deployment_deployments_job_post**](EXTERNALApi.md#create_job_deployment_deployments_job_post) | **POST** /deployments/job | Create Job Deployment [**create_new_organization_organizations_post**](EXTERNALApi.md#create_new_organization_organizations_post) | **POST** /organizations | Create New Organization [**create_service_account_service_accounts_post**](EXTERNALApi.md#create_service_account_service_accounts_post) | **POST** /service-accounts | Create Service Account +[**create_unified_deployment_deployments_post**](EXTERNALApi.md#create_unified_deployment_deployments_post) | **POST** /deployments | Create Unified Deployment [**create_volume_endpoint_volumes_post**](EXTERNALApi.md#create_volume_endpoint_volumes_post) | **POST** /volumes | Create Volume Endpoint [**delete_cluster_clusters_cluster_id_delete**](EXTERNALApi.md#delete_cluster_clusters_cluster_id_delete) | **DELETE** /clusters/{cluster_id} | Delete Cluster [**delete_hardware_instance_hardware_instances_hardware_instance_id_delete**](EXTERNALApi.md#delete_hardware_instance_hardware_instances_hardware_instance_id_delete) | **DELETE** /hardware-instances/{hardware_instance_id} | Delete Hardware Instance @@ -903,6 +904,84 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **create_unified_deployment_deployments_post** +> UnifiedWriteDeploymentResponse create_unified_deployment_deployments_post(unified_write_deployment_request) + +Create Unified Deployment + +### Example + +* Bearer Authentication (HTTPBearer): + +```python +import platform_api_python_client +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse +from platform_api_python_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = platform_api_python_client.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: HTTPBearer +configuration = platform_api_python_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with platform_api_python_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = platform_api_python_client.EXTERNALApi(api_client) + unified_write_deployment_request = platform_api_python_client.UnifiedWriteDeploymentRequest() # UnifiedWriteDeploymentRequest | + + try: + # Create Unified Deployment + api_response = api_instance.create_unified_deployment_deployments_post(unified_write_deployment_request) + print("The response of EXTERNALApi->create_unified_deployment_deployments_post:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling EXTERNALApi->create_unified_deployment_deployments_post: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **unified_write_deployment_request** | [**UnifiedWriteDeploymentRequest**](UnifiedWriteDeploymentRequest.md)| | + +### Return type + +[**UnifiedWriteDeploymentResponse**](UnifiedWriteDeploymentResponse.md) + +### Authorization + +[HTTPBearer](../README.md#HTTPBearer) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **create_volume_endpoint_volumes_post** > GetVolumeResponse create_volume_endpoint_volumes_post(create_volume_request) @@ -1212,7 +1291,7 @@ void (empty response body) Delete User Vault Item By Id Endpoint -Delete a vault item by ID. TODO(vault-migration): reject the delete when a selected deployment revision references the secret. Revision-reference tracking lands in a follow-up migration, so nothing is checked yet. +Delete a vault item by ID. Returns 409 while a non-deleted deployment's selected revision references it. ### Example @@ -3619,7 +3698,7 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_usage_deployments_usage_deployment_id_get** -> GetDeploymentUsageResponse get_usage_deployments_usage_deployment_id_get(deployment_id, metric, start_time_in_seconds, end_time_in_seconds, step=step) +> GetDeploymentUsageResponse get_usage_deployments_usage_deployment_id_get(deployment_id, metric, start_time_in_seconds, end_time_in_seconds, step=step, revision_number=revision_number, component=component, pod=pod) Get Usage @@ -3631,6 +3710,7 @@ Get Usage import platform_api_python_client from platform_api_python_client.models.get_deployment_usage_response import GetDeploymentUsageResponse from platform_api_python_client.models.metric import Metric +from platform_api_python_client.models.usage_component import UsageComponent from platform_api_python_client.rest import ApiException from pprint import pprint @@ -3659,10 +3739,13 @@ with platform_api_python_client.ApiClient(configuration) as api_client: start_time_in_seconds = 56 # int | end_time_in_seconds = 56 # int | step = 15 # int | (optional) (default to 15) + revision_number = 56 # int | (optional) + component = platform_api_python_client.UsageComponent() # UsageComponent | (optional) + pod = 'pod_example' # str | (optional) try: # Get Usage - api_response = api_instance.get_usage_deployments_usage_deployment_id_get(deployment_id, metric, start_time_in_seconds, end_time_in_seconds, step=step) + api_response = api_instance.get_usage_deployments_usage_deployment_id_get(deployment_id, metric, start_time_in_seconds, end_time_in_seconds, step=step, revision_number=revision_number, component=component, pod=pod) print("The response of EXTERNALApi->get_usage_deployments_usage_deployment_id_get:\n") pprint(api_response) except Exception as e: @@ -3681,6 +3764,9 @@ Name | Type | Description | Notes **start_time_in_seconds** | **int**| | **end_time_in_seconds** | **int**| | **step** | **int**| | [optional] [default to 15] + **revision_number** | **int**| | [optional] + **component** | [**UsageComponent**](.md)| | [optional] + **pod** | **str**| | [optional] ### Return type @@ -5337,7 +5423,7 @@ Name | Type | Description | Notes Update User Vault Item Endpoint -Create or update a vault item, writing its value to both SSM and PostgreSQL. The key and value rules are declared on UpsertUserVaultItemRequest, so a malformed write is rejected with a 422 before this handler runs. +Create an immutable vault item. Existing secrets cannot be updated. Reusing an active type, key, and visibility returns 409, even for the same value. To replace a secret, create one with a new key and update its consumers before deleting the old secret. Recreating a deleted key allocates a new secret ID. The PUT route and request name are retained for existing clients. ### Example diff --git a/docs/GetCServeV3DeploymentResponse.md b/docs/GetCServeV3DeploymentResponse.md index 2bde8cd..a52dc4d 100644 --- a/docs/GetCServeV3DeploymentResponse.md +++ b/docs/GetCServeV3DeploymentResponse.md @@ -20,6 +20,7 @@ Name | Type | Description | Notes **user_annotations** | **Dict[str, str]** | | [optional] **priority** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**hf_token_ref** | **int** | | [optional] **recipe** | [**CServeV2Recipe**](CServeV2Recipe.md) | | **cserve_version** | **str** | | [optional] **min_replicas** | **int** | | @@ -29,6 +30,8 @@ Name | Type | Description | Notes **concurrency** | **int** | | [optional] **cooldown_period** | **int** | | [optional] [default to 1800] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] +**bearer_token_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] **session_affinity** | **bool** | Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state. | [optional] [default to False] diff --git a/docs/GetClusterResponse.md b/docs/GetClusterResponse.md index 6a0a563..56bf0c0 100644 --- a/docs/GetClusterResponse.md +++ b/docs/GetClusterResponse.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **display_name** | **str** | | **region** | **str** | | [optional] **deployment_creation_disabled** | **bool** | | [optional] [default to False] +**managed_by_ccluster** | **bool** | | ## Example diff --git a/docs/GetComputeDeploymentResponse.md b/docs/GetComputeDeploymentResponse.md index df529b0..7e6bbac 100644 --- a/docs/GetComputeDeploymentResponse.md +++ b/docs/GetComputeDeploymentResponse.md @@ -25,6 +25,8 @@ Name | Type | Description | Notes **ssh_password** | **str** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**env_vars_refs** | **object** | | [optional] +**image_pull_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] ## Example diff --git a/docs/GetDeploymentLogResponse.md b/docs/GetDeploymentLogResponse.md index 430d646..ea0b847 100644 --- a/docs/GetDeploymentLogResponse.md +++ b/docs/GetDeploymentLogResponse.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**events** | **List[Dict[str, object]]** | | +**events** | **List[object]** | | **next_page_token** | **str** | | [optional] ## Example diff --git a/docs/GetDeploymentUsageResponse.md b/docs/GetDeploymentUsageResponse.md index 5818f45..adac014 100644 --- a/docs/GetDeploymentUsageResponse.md +++ b/docs/GetDeploymentUsageResponse.md @@ -6,6 +6,8 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **values** | [**List[DeploymentUsage]**](DeploymentUsage.md) | | +**availability** | [**UsageAvailability**](UsageAvailability.md) | | [optional] +**last_sample_at** | **int** | | [optional] ## Example diff --git a/docs/GetDynamoDeploymentResponse.md b/docs/GetDynamoDeploymentResponse.md index 40ffa7b..72d51ef 100644 --- a/docs/GetDynamoDeploymentResponse.md +++ b/docs/GetDynamoDeploymentResponse.md @@ -21,6 +21,7 @@ Name | Type | Description | Notes **user_annotations** | **Dict[str, str]** | | [optional] **priority** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**hf_token_ref** | **int** | | [optional] **serving_mode** | [**DynamoServingMode**](DynamoServingMode.md) | | [optional] **worker_pools** | [**DynamoWorkerPools**](DynamoWorkerPools.md) | | [optional] **communications** | [**DynamoCommunicationsOutput**](DynamoCommunicationsOutput.md) | | [optional] @@ -33,8 +34,11 @@ Name | Type | Description | Notes **cooldown_period** | **int** | | [optional] **extra_args** | **str** | | [optional] **env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] **endpoint_certificate_authority** | **str** | | [optional] **endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**image_pull_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] **backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] diff --git a/docs/GetInferenceV3DeploymentResponse.md b/docs/GetInferenceV3DeploymentResponse.md index 81363be..98d9968 100644 --- a/docs/GetInferenceV3DeploymentResponse.md +++ b/docs/GetInferenceV3DeploymentResponse.md @@ -20,6 +20,7 @@ Name | Type | Description | Notes **user_annotations** | **Dict[str, str]** | | [optional] **priority** | **str** | | [optional] **volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**hf_token_ref** | **int** | | [optional] **container_port** | **int** | | **min_replicas** | **int** | | **max_replicas** | **int** | | @@ -33,6 +34,9 @@ Name | Type | Description | Notes **command_args** | **List[str]** | | [optional] **original_command** | **str** | | [optional] **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**env_vars_refs** | **object** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**image_pull_ref** | **int** | | [optional] **backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **enable_node_model_cache** | **bool** | | [optional] [default to False] diff --git a/docs/GetJobDeploymentResponse.md b/docs/GetJobDeploymentResponse.md index 6b59b95..c413a12 100644 --- a/docs/GetJobDeploymentResponse.md +++ b/docs/GetJobDeploymentResponse.md @@ -29,6 +29,8 @@ Name | Type | Description | Notes **backoff_limit** | **int** | | [optional] [default to 3] **active_deadline_seconds** | **int** | | [optional] **image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**env_vars_refs** | **object** | | [optional] +**image_pull_ref** | **int** | | [optional] **enable_logging** | **bool** | | [optional] [default to True] **config_file** | [**ConfigFileMount**](ConfigFileMount.md) | | [optional] diff --git a/docs/Metric.md b/docs/Metric.md index db8829c..09f95ff 100644 --- a/docs/Metric.md +++ b/docs/Metric.md @@ -29,6 +29,32 @@ * `PREFIX_CACHE_HIT_RATE` (value: `'prefix_cache_hit_rate'`) +* `DYNAMO_TTFT` (value: `'dynamo_ttft'`) + +* `DYNAMO_TPOT` (value: `'dynamo_tpot'`) + +* `DYNAMO_REQUEST_LATENCY` (value: `'dynamo_request_latency'`) + +* `DYNAMO_OUTPUT_THROUGHPUT` (value: `'dynamo_output_throughput'`) + +* `DYNAMO_REQUESTS` (value: `'dynamo_requests'`) + +* `DYNAMO_QUEUE_DEPTH` (value: `'dynamo_queue_depth'`) + +* `DYNAMO_RUNNING_REQUESTS` (value: `'dynamo_running_requests'`) + +* `DYNAMO_KV_CACHE` (value: `'dynamo_kv_cache'`) + +* `DYNAMO_KV_THROUGHPUT` (value: `'dynamo_kv_throughput'`) + +* `DYNAMO_KV_TRANSFER_LATENCY` (value: `'dynamo_kv_transfer_latency'`) + +* `DYNAMO_KV_TRANSFERS` (value: `'dynamo_kv_transfers'`) + +* `DYNAMO_KV_FAILURES` (value: `'dynamo_kv_failures'`) + +* `DYNAMO_TARGETS` (value: `'dynamo_targets'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/UnifiedWriteComputeDeploymentRequest.md b/docs/UnifiedWriteComputeDeploymentRequest.md new file mode 100644 index 0000000..c971894 --- /dev/null +++ b/docs/UnifiedWriteComputeDeploymentRequest.md @@ -0,0 +1,42 @@ +# UnifiedWriteComputeDeploymentRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**cluster_id** | **int** | | +**hardware_instance_id** | **int** | | +**user_annotations** | **Dict[str, str]** | | [optional] +**chart_revision** | **str** | | [optional] +**volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**priority** | **str** | | [optional] +**image_url** | **str** | | +**image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] +**env_vars_refs** | **object** | | [optional] +**ssh_public_key** | **str** | | +**enable_logging** | **bool** | | [optional] [default to False] +**type** | **str** | | + +## Example + +```python +from platform_api_python_client.models.unified_write_compute_deployment_request import UnifiedWriteComputeDeploymentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteComputeDeploymentRequest from a JSON string +unified_write_compute_deployment_request_instance = UnifiedWriteComputeDeploymentRequest.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteComputeDeploymentRequest.to_json()) + +# convert the object into a dict +unified_write_compute_deployment_request_dict = unified_write_compute_deployment_request_instance.to_dict() +# create an instance of UnifiedWriteComputeDeploymentRequest from a dict +unified_write_compute_deployment_request_from_dict = UnifiedWriteComputeDeploymentRequest.from_dict(unified_write_compute_deployment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UnifiedWriteDeploymentRequest.md b/docs/UnifiedWriteDeploymentRequest.md new file mode 100644 index 0000000..ff842fa --- /dev/null +++ b/docs/UnifiedWriteDeploymentRequest.md @@ -0,0 +1,73 @@ +# UnifiedWriteDeploymentRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**cluster_id** | **int** | | +**hardware_instance_id** | **int** | | +**user_annotations** | **Dict[str, str]** | | [optional] +**chart_revision** | **str** | | [optional] +**volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**priority** | **str** | | [optional] +**image_url** | **str** | | +**image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] +**env_vars_refs** | **object** | | [optional] +**ssh_public_key** | **str** | | +**enable_logging** | **bool** | | [optional] [default to True] +**type** | **str** | | +**max_surge** | **int** | | [optional] +**max_unavailable** | **int** | | [optional] +**hf_token_ref** | **int** | | [optional] +**port** | **int** | | +**min_replicas** | **int** | | +**max_replicas** | **int** | | +**concurrency** | **int** | | [optional] +**cooldown_period** | **int** | | [optional] +**healthcheck** | **str** | | [optional] +**env_vars** | **Dict[str, str]** | | [optional] +**command** | **str** | | [optional] +**endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**endpoint_certificate_authority** | **str** | | [optional] +**hf_token** | **str** | | [optional] +**backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] +**enable_node_model_cache** | **bool** | | [optional] [default to False] +**session_affinity** | **bool** | Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state. | [optional] [default to False] +**config_file** | [**ConfigFileMount**](ConfigFileMount.md) | | [optional] +**metrics** | [**MetricsConfig**](MetricsConfig.md) | | [optional] +**serving_mode** | [**DynamoServingMode**](DynamoServingMode.md) | | [optional] +**worker_pools** | [**DynamoWorkerPools**](DynamoWorkerPools.md) | | [optional] +**communications** | [**DynamoCommunicationsInput**](DynamoCommunicationsInput.md) | | [optional] +**model** | **str** | | +**served_model_name** | **str** | | [optional] +**runtime_version** | **str** | Dynamo runtime image tag (for example 1.4.0). Defaults to the platform's current release; GET /prebuilt-images?type=dynamo lists the versions the platform has validated, but any tag may be requested. require_gpu_direct_rdma needs an EFA-capable image. Changing it restarts every component of a running deployment. | [optional] +**extra_args** | **str** | | [optional] +**completions** | **int** | | [optional] [default to 1] +**parallelism** | **int** | | [optional] [default to 1] +**backoff_limit** | **int** | | [optional] [default to 3] +**active_deadline_seconds** | **int** | | [optional] + +## Example + +```python +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteDeploymentRequest from a JSON string +unified_write_deployment_request_instance = UnifiedWriteDeploymentRequest.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteDeploymentRequest.to_json()) + +# convert the object into a dict +unified_write_deployment_request_dict = unified_write_deployment_request_instance.to_dict() +# create an instance of UnifiedWriteDeploymentRequest from a dict +unified_write_deployment_request_from_dict = UnifiedWriteDeploymentRequest.from_dict(unified_write_deployment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UnifiedWriteDeploymentResponse.md b/docs/UnifiedWriteDeploymentResponse.md new file mode 100644 index 0000000..7a18655 --- /dev/null +++ b/docs/UnifiedWriteDeploymentResponse.md @@ -0,0 +1,34 @@ +# UnifiedWriteDeploymentResponse + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | +**type** | [**DeploymentType**](DeploymentType.md) | | +**created_at** | **datetime** | | +**updated_at** | **datetime** | | +**endpoint_url** | **str** | | +**port** | **int** | | + +## Example + +```python +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteDeploymentResponse from a JSON string +unified_write_deployment_response_instance = UnifiedWriteDeploymentResponse.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteDeploymentResponse.to_json()) + +# convert the object into a dict +unified_write_deployment_response_dict = unified_write_deployment_response_instance.to_dict() +# create an instance of UnifiedWriteDeploymentResponse from a dict +unified_write_deployment_response_from_dict = UnifiedWriteDeploymentResponse.from_dict(unified_write_deployment_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UnifiedWriteDynamoDeploymentRequest.md b/docs/UnifiedWriteDynamoDeploymentRequest.md new file mode 100644 index 0000000..9255278 --- /dev/null +++ b/docs/UnifiedWriteDynamoDeploymentRequest.md @@ -0,0 +1,60 @@ +# UnifiedWriteDynamoDeploymentRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**max_surge** | **int** | | [optional] +**max_unavailable** | **int** | | [optional] +**name** | **str** | | +**cluster_id** | **int** | | +**hardware_instance_id** | **int** | | [optional] +**user_annotations** | **Dict[str, str]** | | [optional] +**chart_revision** | **str** | | [optional] +**volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**priority** | **str** | | [optional] +**serving_mode** | [**DynamoServingMode**](DynamoServingMode.md) | | [optional] +**worker_pools** | [**DynamoWorkerPools**](DynamoWorkerPools.md) | | [optional] +**communications** | [**DynamoCommunicationsInput**](DynamoCommunicationsInput.md) | | [optional] +**model** | **str** | | +**served_model_name** | **str** | | [optional] +**runtime_version** | **str** | Dynamo runtime image tag (for example 1.4.0). Defaults to the platform's current release; GET /prebuilt-images?type=dynamo lists the versions the platform has validated, but any tag may be requested. require_gpu_direct_rdma needs an EFA-capable image. Changing it restarts every component of a running deployment. | [optional] +**min_replicas** | **int** | | [optional] +**max_replicas** | **int** | | [optional] +**concurrency** | **int** | | [optional] +**cooldown_period** | **int** | | [optional] +**extra_args** | **str** | | [optional] +**hf_token** | **str** | | [optional] +**hf_token_ref** | **int** | | [optional] +**env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] +**endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**endpoint_certificate_authority** | **str** | | [optional] +**image_pull_ref** | **int** | | [optional] +**enable_logging** | **bool** | | [optional] [default to True] +**enable_node_model_cache** | **bool** | | [optional] [default to False] +**backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] +**type** | **str** | | + +## Example + +```python +from platform_api_python_client.models.unified_write_dynamo_deployment_request import UnifiedWriteDynamoDeploymentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteDynamoDeploymentRequest from a JSON string +unified_write_dynamo_deployment_request_instance = UnifiedWriteDynamoDeploymentRequest.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteDynamoDeploymentRequest.to_json()) + +# convert the object into a dict +unified_write_dynamo_deployment_request_dict = unified_write_dynamo_deployment_request_instance.to_dict() +# create an instance of UnifiedWriteDynamoDeploymentRequest from a dict +unified_write_dynamo_deployment_request_from_dict = UnifiedWriteDynamoDeploymentRequest.from_dict(unified_write_dynamo_deployment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UnifiedWriteInferenceV3DeploymentRequest.md b/docs/UnifiedWriteInferenceV3DeploymentRequest.md new file mode 100644 index 0000000..1720abc --- /dev/null +++ b/docs/UnifiedWriteInferenceV3DeploymentRequest.md @@ -0,0 +1,61 @@ +# UnifiedWriteInferenceV3DeploymentRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**max_surge** | **int** | | [optional] +**max_unavailable** | **int** | | [optional] +**name** | **str** | | +**cluster_id** | **int** | | +**hardware_instance_id** | **int** | | +**user_annotations** | **Dict[str, str]** | | [optional] +**chart_revision** | **str** | | [optional] +**volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**priority** | **str** | | [optional] +**hf_token_ref** | **int** | | [optional] +**image_url** | **str** | | +**image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] +**port** | **int** | | +**min_replicas** | **int** | | +**max_replicas** | **int** | | +**concurrency** | **int** | | [optional] +**cooldown_period** | **int** | | [optional] +**healthcheck** | **str** | | [optional] +**env_vars** | **Dict[str, str]** | | [optional] +**command** | **str** | | [optional] +**endpoint_bearer_token** | **str** | | [optional] +**bearer_token_ref** | **int** | | [optional] +**endpoint_certificate_authority** | **str** | | [optional] +**hf_token** | **str** | | [optional] +**env_vars_refs** | **object** | | [optional] +**backend_protocol** | [**BackendProtocol**](BackendProtocol.md) | | [optional] +**enable_logging** | **bool** | | [optional] [default to False] +**enable_node_model_cache** | **bool** | | [optional] [default to False] +**session_affinity** | **bool** | Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state. | [optional] [default to False] +**config_file** | [**ConfigFileMount**](ConfigFileMount.md) | | [optional] +**metrics** | [**MetricsConfig**](MetricsConfig.md) | | [optional] +**type** | **str** | | + +## Example + +```python +from platform_api_python_client.models.unified_write_inference_v3_deployment_request import UnifiedWriteInferenceV3DeploymentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteInferenceV3DeploymentRequest from a JSON string +unified_write_inference_v3_deployment_request_instance = UnifiedWriteInferenceV3DeploymentRequest.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteInferenceV3DeploymentRequest.to_json()) + +# convert the object into a dict +unified_write_inference_v3_deployment_request_dict = unified_write_inference_v3_deployment_request_instance.to_dict() +# create an instance of UnifiedWriteInferenceV3DeploymentRequest from a dict +unified_write_inference_v3_deployment_request_from_dict = UnifiedWriteInferenceV3DeploymentRequest.from_dict(unified_write_inference_v3_deployment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UnifiedWriteJobDeploymentRequest.md b/docs/UnifiedWriteJobDeploymentRequest.md new file mode 100644 index 0000000..40016e2 --- /dev/null +++ b/docs/UnifiedWriteJobDeploymentRequest.md @@ -0,0 +1,48 @@ +# UnifiedWriteJobDeploymentRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**cluster_id** | **int** | | +**hardware_instance_id** | **int** | | +**user_annotations** | **Dict[str, str]** | | [optional] +**chart_revision** | **str** | | [optional] +**volume_mounts** | [**List[VolumeMount]**](VolumeMount.md) | | [optional] +**priority** | **str** | | [optional] +**image_url** | **str** | | +**image_pull_secret_credentials** | [**ImagePullSecretCredentials**](ImagePullSecretCredentials.md) | | [optional] +**image_pull_ref** | **int** | | [optional] +**env_vars** | **Dict[str, str]** | | [optional] +**env_vars_refs** | **object** | | [optional] +**command** | **str** | | [optional] +**completions** | **int** | | [optional] [default to 1] +**parallelism** | **int** | | [optional] [default to 1] +**backoff_limit** | **int** | | [optional] [default to 3] +**active_deadline_seconds** | **int** | | [optional] +**enable_logging** | **bool** | | [optional] [default to True] +**config_file** | [**ConfigFileMount**](ConfigFileMount.md) | | [optional] +**type** | **str** | | + +## Example + +```python +from platform_api_python_client.models.unified_write_job_deployment_request import UnifiedWriteJobDeploymentRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UnifiedWriteJobDeploymentRequest from a JSON string +unified_write_job_deployment_request_instance = UnifiedWriteJobDeploymentRequest.from_json(json) +# print the JSON string representation of the object +print(UnifiedWriteJobDeploymentRequest.to_json()) + +# convert the object into a dict +unified_write_job_deployment_request_dict = unified_write_job_deployment_request_instance.to_dict() +# create an instance of UnifiedWriteJobDeploymentRequest from a dict +unified_write_job_deployment_request_from_dict = UnifiedWriteJobDeploymentRequest.from_dict(unified_write_job_deployment_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpsertUserVaultItemRequest.md b/docs/UpsertUserVaultItemRequest.md index d9ae8e7..f085ee3 100644 --- a/docs/UpsertUserVaultItemRequest.md +++ b/docs/UpsertUserVaultItemRequest.md @@ -1,6 +1,6 @@ # UpsertUserVaultItemRequest -Write model for PUT /user_vault, where the key and value rules are enforced. +Create an immutable secret via PUT /user_vault; existing keys return 409. The schema name is retained for SDK compatibility. Secrets cannot be updated. ## Properties diff --git a/docs/UsageAvailability.md b/docs/UsageAvailability.md new file mode 100644 index 0000000..167dfff --- /dev/null +++ b/docs/UsageAvailability.md @@ -0,0 +1,18 @@ +# UsageAvailability + + +## Enum + +* `AVAILABLE` (value: `'available'`) + +* `NO_TRAFFIC` (value: `'no_traffic'`) + +* `UNAVAILABLE` (value: `'unavailable'`) + +* `STALE` (value: `'stale'`) + +* `PARTIAL` (value: `'partial'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsageComponent.md b/docs/UsageComponent.md new file mode 100644 index 0000000..11a1a5a --- /dev/null +++ b/docs/UsageComponent.md @@ -0,0 +1,16 @@ +# UsageComponent + + +## Enum + +* `FRONTEND` (value: `'frontend'`) + +* `WORKER` (value: `'worker'`) + +* `PREFILL` (value: `'prefill'`) + +* `DECODE` (value: `'decode'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/platform_api_python_client/__init__.py b/platform_api_python_client/__init__.py index 8ce31b7..9f49179 100644 --- a/platform_api_python_client/__init__.py +++ b/platform_api_python_client/__init__.py @@ -14,7 +14,7 @@ """ # noqa: E501 -__version__ = "4.32.0" +__version__ = "4.33.0" # import apis into sdk package from platform_api_python_client.api.external_api import EXTERNALApi @@ -153,11 +153,19 @@ from platform_api_python_client.models.spire import Spire from platform_api_python_client.models.spire_crds import SpireCrds from platform_api_python_client.models.teleport_kube_agent import TeleportKubeAgent +from platform_api_python_client.models.unified_write_compute_deployment_request import UnifiedWriteComputeDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse +from platform_api_python_client.models.unified_write_dynamo_deployment_request import UnifiedWriteDynamoDeploymentRequest +from platform_api_python_client.models.unified_write_inference_v3_deployment_request import UnifiedWriteInferenceV3DeploymentRequest +from platform_api_python_client.models.unified_write_job_deployment_request import UnifiedWriteJobDeploymentRequest from platform_api_python_client.models.update_cluster_metadata_request import UpdateClusterMetadataRequest from platform_api_python_client.models.update_deployment_response import UpdateDeploymentResponse from platform_api_python_client.models.update_deployment_status_v3_request import UpdateDeploymentStatusV3Request from platform_api_python_client.models.update_service_account_request import UpdateServiceAccountRequest from platform_api_python_client.models.upsert_user_vault_item_request import UpsertUserVaultItemRequest +from platform_api_python_client.models.usage_availability import UsageAvailability +from platform_api_python_client.models.usage_component import UsageComponent from platform_api_python_client.models.user_vault_item import UserVaultItem from platform_api_python_client.models.user_vault_type import UserVaultType from platform_api_python_client.models.validation_error import ValidationError diff --git a/platform_api_python_client/api/external_api.py b/platform_api_python_client/api/external_api.py index 32ffb00..e3a3b93 100644 --- a/platform_api_python_client/api/external_api.py +++ b/platform_api_python_client/api/external_api.py @@ -80,11 +80,14 @@ from platform_api_python_client.models.organization_gpu_quota_response import OrganizationGpuQuotaResponse from platform_api_python_client.models.rollout_strategy_params import RolloutStrategyParams from platform_api_python_client.models.service_account_response import ServiceAccountResponse +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse from platform_api_python_client.models.update_cluster_metadata_request import UpdateClusterMetadataRequest from platform_api_python_client.models.update_deployment_response import UpdateDeploymentResponse from platform_api_python_client.models.update_deployment_status_v3_request import UpdateDeploymentStatusV3Request from platform_api_python_client.models.update_service_account_request import UpdateServiceAccountRequest from platform_api_python_client.models.upsert_user_vault_item_request import UpsertUserVaultItemRequest +from platform_api_python_client.models.usage_component import UsageComponent from platform_api_python_client.models.user_vault_item import UserVaultItem from platform_api_python_client.models.user_vault_type import UserVaultType from platform_api_python_client.models.volume_status_response import VolumeStatusResponse @@ -3066,6 +3069,280 @@ def _create_service_account_service_accounts_post_serialize( + @validate_call + def create_unified_deployment_deployments_post( + self, + unified_write_deployment_request: UnifiedWriteDeploymentRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> UnifiedWriteDeploymentResponse: + """Create Unified Deployment + + + :param unified_write_deployment_request: (required) + :type unified_write_deployment_request: UnifiedWriteDeploymentRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_unified_deployment_deployments_post_serialize( + unified_write_deployment_request=unified_write_deployment_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UnifiedWriteDeploymentResponse", + '422': "HTTPValidationError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def create_unified_deployment_deployments_post_with_http_info( + self, + unified_write_deployment_request: UnifiedWriteDeploymentRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[UnifiedWriteDeploymentResponse]: + """Create Unified Deployment + + + :param unified_write_deployment_request: (required) + :type unified_write_deployment_request: UnifiedWriteDeploymentRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_unified_deployment_deployments_post_serialize( + unified_write_deployment_request=unified_write_deployment_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UnifiedWriteDeploymentResponse", + '422': "HTTPValidationError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def create_unified_deployment_deployments_post_without_preload_content( + self, + unified_write_deployment_request: UnifiedWriteDeploymentRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Create Unified Deployment + + + :param unified_write_deployment_request: (required) + :type unified_write_deployment_request: UnifiedWriteDeploymentRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_unified_deployment_deployments_post_serialize( + unified_write_deployment_request=unified_write_deployment_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UnifiedWriteDeploymentResponse", + '422': "HTTPValidationError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _create_unified_deployment_deployments_post_serialize( + self, + unified_write_deployment_request, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if unified_write_deployment_request is not None: + _body_params = unified_write_deployment_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'HTTPBearer' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/deployments', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def create_volume_endpoint_volumes_post( self, @@ -4145,7 +4422,7 @@ def delete_user_vault_item_by_id_endpoint_user_vault_secret_id_delete( ) -> object: """Delete User Vault Item By Id Endpoint - Delete a vault item by ID. TODO(vault-migration): reject the delete when a selected deployment revision references the secret. Revision-reference tracking lands in a follow-up migration, so nothing is checked yet. + Delete a vault item by ID. Returns 409 while a non-deleted deployment's selected revision references it. :param secret_id: (required) :type secret_id: int @@ -4213,7 +4490,7 @@ def delete_user_vault_item_by_id_endpoint_user_vault_secret_id_delete_with_http_ ) -> ApiResponse[object]: """Delete User Vault Item By Id Endpoint - Delete a vault item by ID. TODO(vault-migration): reject the delete when a selected deployment revision references the secret. Revision-reference tracking lands in a follow-up migration, so nothing is checked yet. + Delete a vault item by ID. Returns 409 while a non-deleted deployment's selected revision references it. :param secret_id: (required) :type secret_id: int @@ -4281,7 +4558,7 @@ def delete_user_vault_item_by_id_endpoint_user_vault_secret_id_delete_without_pr ) -> RESTResponseType: """Delete User Vault Item By Id Endpoint - Delete a vault item by ID. TODO(vault-migration): reject the delete when a selected deployment revision references the secret. Revision-reference tracking lands in a follow-up migration, so nothing is checked yet. + Delete a vault item by ID. Returns 409 while a non-deleted deployment's selected revision references it. :param secret_id: (required) :type secret_id: int @@ -12595,6 +12872,9 @@ def get_usage_deployments_usage_deployment_id_get( start_time_in_seconds: StrictInt, end_time_in_seconds: StrictInt, step: Optional[StrictInt] = None, + revision_number: Optional[Annotated[int, Field(strict=True, ge=1)]] = None, + component: Optional[UsageComponent] = None, + pod: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12621,6 +12901,12 @@ def get_usage_deployments_usage_deployment_id_get( :type end_time_in_seconds: int :param step: :type step: int + :param revision_number: + :type revision_number: int + :param component: + :type component: UsageComponent + :param pod: + :type pod: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12649,6 +12935,9 @@ def get_usage_deployments_usage_deployment_id_get( start_time_in_seconds=start_time_in_seconds, end_time_in_seconds=end_time_in_seconds, step=step, + revision_number=revision_number, + component=component, + pod=pod, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12678,6 +12967,9 @@ def get_usage_deployments_usage_deployment_id_get_with_http_info( start_time_in_seconds: StrictInt, end_time_in_seconds: StrictInt, step: Optional[StrictInt] = None, + revision_number: Optional[Annotated[int, Field(strict=True, ge=1)]] = None, + component: Optional[UsageComponent] = None, + pod: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12704,6 +12996,12 @@ def get_usage_deployments_usage_deployment_id_get_with_http_info( :type end_time_in_seconds: int :param step: :type step: int + :param revision_number: + :type revision_number: int + :param component: + :type component: UsageComponent + :param pod: + :type pod: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12732,6 +13030,9 @@ def get_usage_deployments_usage_deployment_id_get_with_http_info( start_time_in_seconds=start_time_in_seconds, end_time_in_seconds=end_time_in_seconds, step=step, + revision_number=revision_number, + component=component, + pod=pod, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12761,6 +13062,9 @@ def get_usage_deployments_usage_deployment_id_get_without_preload_content( start_time_in_seconds: StrictInt, end_time_in_seconds: StrictInt, step: Optional[StrictInt] = None, + revision_number: Optional[Annotated[int, Field(strict=True, ge=1)]] = None, + component: Optional[UsageComponent] = None, + pod: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -12787,6 +13091,12 @@ def get_usage_deployments_usage_deployment_id_get_without_preload_content( :type end_time_in_seconds: int :param step: :type step: int + :param revision_number: + :type revision_number: int + :param component: + :type component: UsageComponent + :param pod: + :type pod: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -12815,6 +13125,9 @@ def get_usage_deployments_usage_deployment_id_get_without_preload_content( start_time_in_seconds=start_time_in_seconds, end_time_in_seconds=end_time_in_seconds, step=step, + revision_number=revision_number, + component=component, + pod=pod, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -12839,6 +13152,9 @@ def _get_usage_deployments_usage_deployment_id_get_serialize( start_time_in_seconds, end_time_in_seconds, step, + revision_number, + component, + pod, _request_auth, _content_type, _headers, @@ -12879,6 +13195,18 @@ def _get_usage_deployments_usage_deployment_id_get_serialize( _query_params.append(('step', step)) + if revision_number is not None: + + _query_params.append(('revision_number', revision_number)) + + if component is not None: + + _query_params.append(('component', component.value)) + + if pod is not None: + + _query_params.append(('pod', pod)) + # process the header parameters # process the form parameters # process the body parameter @@ -18733,7 +19061,7 @@ def update_user_vault_item_endpoint_user_vault_put( ) -> UserVaultItem: """Update User Vault Item Endpoint - Create or update a vault item, writing its value to both SSM and PostgreSQL. The key and value rules are declared on UpsertUserVaultItemRequest, so a malformed write is rejected with a 422 before this handler runs. + Create an immutable vault item. Existing secrets cannot be updated. Reusing an active type, key, and visibility returns 409, even for the same value. To replace a secret, create one with a new key and update its consumers before deleting the old secret. Recreating a deleted key allocates a new secret ID. The PUT route and request name are retained for existing clients. :param upsert_user_vault_item_request: (required) :type upsert_user_vault_item_request: UpsertUserVaultItemRequest @@ -18801,7 +19129,7 @@ def update_user_vault_item_endpoint_user_vault_put_with_http_info( ) -> ApiResponse[UserVaultItem]: """Update User Vault Item Endpoint - Create or update a vault item, writing its value to both SSM and PostgreSQL. The key and value rules are declared on UpsertUserVaultItemRequest, so a malformed write is rejected with a 422 before this handler runs. + Create an immutable vault item. Existing secrets cannot be updated. Reusing an active type, key, and visibility returns 409, even for the same value. To replace a secret, create one with a new key and update its consumers before deleting the old secret. Recreating a deleted key allocates a new secret ID. The PUT route and request name are retained for existing clients. :param upsert_user_vault_item_request: (required) :type upsert_user_vault_item_request: UpsertUserVaultItemRequest @@ -18869,7 +19197,7 @@ def update_user_vault_item_endpoint_user_vault_put_without_preload_content( ) -> RESTResponseType: """Update User Vault Item Endpoint - Create or update a vault item, writing its value to both SSM and PostgreSQL. The key and value rules are declared on UpsertUserVaultItemRequest, so a malformed write is rejected with a 422 before this handler runs. + Create an immutable vault item. Existing secrets cannot be updated. Reusing an active type, key, and visibility returns 409, even for the same value. To replace a secret, create one with a new key and update its consumers before deleting the old secret. Recreating a deleted key allocates a new secret ID. The PUT route and request name are retained for existing clients. :param upsert_user_vault_item_request: (required) :type upsert_user_vault_item_request: UpsertUserVaultItemRequest diff --git a/platform_api_python_client/api_client.py b/platform_api_python_client/api_client.py index 90f0834..b57f998 100644 --- a/platform_api_python_client/api_client.py +++ b/platform_api_python_client/api_client.py @@ -90,7 +90,7 @@ def __init__( self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/4.32.0/python' + self.user_agent = 'OpenAPI-Generator/4.33.0/python' self.client_side_validation = configuration.client_side_validation def __enter__(self): diff --git a/platform_api_python_client/configuration.py b/platform_api_python_client/configuration.py index f5aac5b..f8105e3 100644 --- a/platform_api_python_client/configuration.py +++ b/platform_api_python_client/configuration.py @@ -392,7 +392,7 @@ def to_debug_report(self): "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: 0.1.0\n"\ - "SDK Package Version: 4.32.0".\ + "SDK Package Version: 4.33.0".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/platform_api_python_client/models/__init__.py b/platform_api_python_client/models/__init__.py index 8ddd2e9..b655705 100644 --- a/platform_api_python_client/models/__init__.py +++ b/platform_api_python_client/models/__init__.py @@ -136,11 +136,19 @@ from platform_api_python_client.models.spire import Spire from platform_api_python_client.models.spire_crds import SpireCrds from platform_api_python_client.models.teleport_kube_agent import TeleportKubeAgent +from platform_api_python_client.models.unified_write_compute_deployment_request import UnifiedWriteComputeDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse +from platform_api_python_client.models.unified_write_dynamo_deployment_request import UnifiedWriteDynamoDeploymentRequest +from platform_api_python_client.models.unified_write_inference_v3_deployment_request import UnifiedWriteInferenceV3DeploymentRequest +from platform_api_python_client.models.unified_write_job_deployment_request import UnifiedWriteJobDeploymentRequest from platform_api_python_client.models.update_cluster_metadata_request import UpdateClusterMetadataRequest from platform_api_python_client.models.update_deployment_response import UpdateDeploymentResponse from platform_api_python_client.models.update_deployment_status_v3_request import UpdateDeploymentStatusV3Request from platform_api_python_client.models.update_service_account_request import UpdateServiceAccountRequest from platform_api_python_client.models.upsert_user_vault_item_request import UpsertUserVaultItemRequest +from platform_api_python_client.models.usage_availability import UsageAvailability +from platform_api_python_client.models.usage_component import UsageComponent from platform_api_python_client.models.user_vault_item import UserVaultItem from platform_api_python_client.models.user_vault_type import UserVaultType from platform_api_python_client.models.validation_error import ValidationError diff --git a/platform_api_python_client/models/cluster_credential.py b/platform_api_python_client/models/cluster_credential.py index 695dc72..79d2e14 100644 --- a/platform_api_python_client/models/cluster_credential.py +++ b/platform_api_python_client/models/cluster_credential.py @@ -17,7 +17,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictStr from typing import Any, ClassVar, Dict, List from typing import Optional, Set from typing_extensions import Self @@ -28,7 +28,7 @@ class ClusterCredential(BaseModel): """ # noqa: E501 server: StrictStr bearer_token: StrictStr - ca_cert: StrictStr + ca_cert: StrictStr = Field(description="Base64-encoded PEM CA certificate of the cluster's API server, as in a kubeconfig's `certificate-authority-data` or the `ca.crt` key of a service-account token Secret's `data`.") __properties: ClassVar[List[str]] = ["server", "bearer_token", "ca_cert"] model_config = ConfigDict( diff --git a/platform_api_python_client/models/create_c_serve_v3_deployment_request.py b/platform_api_python_client/models/create_c_serve_v3_deployment_request.py index 57885ea..7745e06 100644 --- a/platform_api_python_client/models/create_c_serve_v3_deployment_request.py +++ b/platform_api_python_client/models/create_c_serve_v3_deployment_request.py @@ -38,20 +38,23 @@ class CreateCServeV3DeploymentRequest(BaseModel): chart_revision: Optional[StrictStr] = None volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None recipe: CServeV2Recipe cserve_version: Optional[StrictStr] = None hf_token: Optional[StrictStr] = None endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None endpoint_certificate_authority: Optional[StrictStr] = None min_replicas: StrictInt max_replicas: StrictInt concurrency: Optional[StrictInt] = None - cooldown_period: Optional[StrictInt] = None + cooldown_period: Optional[Annotated[int, Field(le=3600, strict=True, ge=0)]] = None env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None enable_logging: Optional[StrictBool] = True enable_node_model_cache: Optional[StrictBool] = False session_affinity: Optional[StrictBool] = Field(default=False, description="Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state.") - __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "recipe", "cserve_version", "hf_token", "endpoint_bearer_token", "endpoint_certificate_authority", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "env_vars", "enable_logging", "enable_node_model_cache", "session_affinity"] + __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "hf_token_ref", "recipe", "cserve_version", "hf_token", "endpoint_bearer_token", "bearer_token_ref", "endpoint_certificate_authority", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "env_vars", "env_vars_refs", "enable_logging", "enable_node_model_cache", "session_affinity"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -129,6 +132,11 @@ def to_dict(self) -> Dict[str, Any]: if self.priority is None and "priority" in self.model_fields_set: _dict['priority'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if cserve_version (nullable) is None # and model_fields_set contains the field if self.cserve_version is None and "cserve_version" in self.model_fields_set: @@ -144,6 +152,11 @@ def to_dict(self) -> Dict[str, Any]: if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: _dict['endpoint_bearer_token'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + # set to None if endpoint_certificate_authority (nullable) is None # and model_fields_set contains the field if self.endpoint_certificate_authority is None and "endpoint_certificate_authority" in self.model_fields_set: @@ -180,16 +193,19 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "chart_revision": obj.get("chart_revision"), "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, "priority": obj.get("priority"), + "hf_token_ref": obj.get("hf_token_ref"), "recipe": CServeV2Recipe.from_dict(obj["recipe"]) if obj.get("recipe") is not None else None, "cserve_version": obj.get("cserve_version"), "hf_token": obj.get("hf_token"), "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), "min_replicas": obj.get("min_replicas"), "max_replicas": obj.get("max_replicas"), "concurrency": obj.get("concurrency"), "cooldown_period": obj.get("cooldown_period"), "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, "session_affinity": obj.get("session_affinity") if obj.get("session_affinity") is not None else False diff --git a/platform_api_python_client/models/create_compute_deployment_request.py b/platform_api_python_client/models/create_compute_deployment_request.py index 084fb95..c7890a5 100644 --- a/platform_api_python_client/models/create_compute_deployment_request.py +++ b/platform_api_python_client/models/create_compute_deployment_request.py @@ -38,9 +38,11 @@ class CreateComputeDeploymentRequest(BaseModel): priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None image_url: StrictStr image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + env_vars_refs: Optional[Dict[str, Any]] = None ssh_public_key: StrictStr enable_logging: Optional[StrictBool] = False - __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "ssh_public_key", "enable_logging"] + __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "image_pull_ref", "env_vars_refs", "ssh_public_key", "enable_logging"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -113,6 +115,11 @@ def to_dict(self) -> Dict[str, Any]: if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + return _dict @classmethod @@ -134,6 +141,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "priority": obj.get("priority"), "image_url": obj.get("image_url"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), + "env_vars_refs": obj.get("env_vars_refs"), "ssh_public_key": obj.get("ssh_public_key"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else False }) diff --git a/platform_api_python_client/models/create_dynamo_deployment_request.py b/platform_api_python_client/models/create_dynamo_deployment_request.py index 110e059..e78d133 100644 --- a/platform_api_python_client/models/create_dynamo_deployment_request.py +++ b/platform_api_python_client/models/create_dynamo_deployment_request.py @@ -53,13 +53,17 @@ class CreateDynamoDeploymentRequest(BaseModel): cooldown_period: Optional[StrictInt] = None extra_args: Optional[StrictStr] = None hf_token: Optional[StrictStr] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None endpoint_certificate_authority: Optional[StrictStr] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None enable_logging: Optional[StrictBool] = True enable_node_model_cache: Optional[StrictBool] = False backend_protocol: Optional[BackendProtocol] = None - __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "serving_mode", "worker_pools", "communications", "model", "served_model_name", "runtime_version", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "extra_args", "hf_token", "env_vars", "endpoint_bearer_token", "endpoint_certificate_authority", "enable_logging", "enable_node_model_cache", "backend_protocol"] + __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "serving_mode", "worker_pools", "communications", "model", "served_model_name", "runtime_version", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "extra_args", "hf_token", "hf_token_ref", "env_vars", "env_vars_refs", "endpoint_bearer_token", "bearer_token_ref", "endpoint_certificate_authority", "image_pull_ref", "enable_logging", "enable_node_model_cache", "backend_protocol"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -200,16 +204,31 @@ def to_dict(self) -> Dict[str, Any]: if self.hf_token is None and "hf_token" in self.model_fields_set: _dict['hf_token'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if endpoint_bearer_token (nullable) is None # and model_fields_set contains the field if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: _dict['endpoint_bearer_token'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + # set to None if endpoint_certificate_authority (nullable) is None # and model_fields_set contains the field if self.endpoint_certificate_authority is None and "endpoint_certificate_authority" in self.model_fields_set: _dict['endpoint_certificate_authority'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + return _dict @classmethod @@ -243,9 +262,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "cooldown_period": obj.get("cooldown_period"), "extra_args": obj.get("extra_args"), "hf_token": obj.get("hf_token"), + "hf_token_ref": obj.get("hf_token_ref"), "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), + "image_pull_ref": obj.get("image_pull_ref"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, "backend_protocol": obj.get("backend_protocol") diff --git a/platform_api_python_client/models/create_filesystem_volume_request.py b/platform_api_python_client/models/create_filesystem_volume_request.py index 0982b50..6bae519 100644 --- a/platform_api_python_client/models/create_filesystem_volume_request.py +++ b/platform_api_python_client/models/create_filesystem_volume_request.py @@ -32,7 +32,6 @@ class CreateFilesystemVolumeRequest(BaseModel): backend: StrictStr size_gb: Optional[Annotated[int, Field(le=65536, strict=True, ge=1)]] = 100 storage_class: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=253)]] = None - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["name", "cluster_id", "backend", "size_gb", "storage_class"] @field_validator('name') @@ -89,10 +88,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -100,11 +97,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - # set to None if storage_class (nullable) is None # and model_fields_set contains the field if self.storage_class is None and "storage_class" in self.model_fields_set: @@ -128,11 +120,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "size_gb": obj.get("size_gb") if obj.get("size_gb") is not None else 100, "storage_class": obj.get("storage_class") }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/create_inference_v3_deployment_request.py b/platform_api_python_client/models/create_inference_v3_deployment_request.py index 68656ee..9ec174b 100644 --- a/platform_api_python_client/models/create_inference_v3_deployment_request.py +++ b/platform_api_python_client/models/create_inference_v3_deployment_request.py @@ -41,26 +41,30 @@ class CreateInferenceV3DeploymentRequest(BaseModel): chart_revision: Optional[StrictStr] = None volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None image_url: StrictStr image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None port: Annotated[int, Field(le=65535, strict=True, ge=1)] min_replicas: StrictInt max_replicas: StrictInt concurrency: Optional[StrictInt] = None - cooldown_period: Optional[StrictInt] = None + cooldown_period: Optional[Annotated[int, Field(le=3600, strict=True, ge=0)]] = None healthcheck: Optional[StrictStr] = None env_vars: Optional[Dict[str, StrictStr]] = None command: Optional[StrictStr] = None endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None endpoint_certificate_authority: Optional[StrictStr] = None hf_token: Optional[StrictStr] = None + env_vars_refs: Optional[Dict[str, Any]] = None backend_protocol: Optional[BackendProtocol] = None enable_logging: Optional[StrictBool] = False enable_node_model_cache: Optional[StrictBool] = False session_affinity: Optional[StrictBool] = Field(default=False, description="Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state.") config_file: Optional[ConfigFileMount] = None metrics: Optional[MetricsConfig] = None - __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "port", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "healthcheck", "env_vars", "command", "endpoint_bearer_token", "endpoint_certificate_authority", "hf_token", "backend_protocol", "enable_logging", "enable_node_model_cache", "session_affinity", "config_file", "metrics"] + __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "hf_token_ref", "image_url", "image_pull_secret_credentials", "image_pull_ref", "port", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "healthcheck", "env_vars", "command", "endpoint_bearer_token", "bearer_token_ref", "endpoint_certificate_authority", "hf_token", "env_vars_refs", "backend_protocol", "enable_logging", "enable_node_model_cache", "session_affinity", "config_file", "metrics"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -144,11 +148,21 @@ def to_dict(self) -> Dict[str, Any]: if self.priority is None and "priority" in self.model_fields_set: _dict['priority'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if image_pull_secret_credentials (nullable) is None # and model_fields_set contains the field if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + # set to None if concurrency (nullable) is None # and model_fields_set contains the field if self.concurrency is None and "concurrency" in self.model_fields_set: @@ -179,6 +193,11 @@ def to_dict(self) -> Dict[str, Any]: if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: _dict['endpoint_bearer_token'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + # set to None if endpoint_certificate_authority (nullable) is None # and model_fields_set contains the field if self.endpoint_certificate_authority is None and "endpoint_certificate_authority" in self.model_fields_set: @@ -220,8 +239,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "chart_revision": obj.get("chart_revision"), "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, "priority": obj.get("priority"), + "hf_token_ref": obj.get("hf_token_ref"), "image_url": obj.get("image_url"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), "port": obj.get("port"), "min_replicas": obj.get("min_replicas"), "max_replicas": obj.get("max_replicas"), @@ -231,8 +252,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "env_vars": obj.get("env_vars"), "command": obj.get("command"), "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), "hf_token": obj.get("hf_token"), + "env_vars_refs": obj.get("env_vars_refs"), "backend_protocol": obj.get("backend_protocol"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else False, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, diff --git a/platform_api_python_client/models/create_job_deployment_request.py b/platform_api_python_client/models/create_job_deployment_request.py index ea2f0f3..5217413 100644 --- a/platform_api_python_client/models/create_job_deployment_request.py +++ b/platform_api_python_client/models/create_job_deployment_request.py @@ -39,7 +39,9 @@ class CreateJobDeploymentRequest(BaseModel): priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None image_url: StrictStr image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None command: Optional[StrictStr] = None completions: Optional[StrictInt] = 1 parallelism: Optional[StrictInt] = 1 @@ -47,7 +49,7 @@ class CreateJobDeploymentRequest(BaseModel): active_deadline_seconds: Optional[StrictInt] = None enable_logging: Optional[StrictBool] = True config_file: Optional[ConfigFileMount] = None - __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "env_vars", "command", "completions", "parallelism", "backoff_limit", "active_deadline_seconds", "enable_logging", "config_file"] + __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "image_pull_ref", "env_vars", "env_vars_refs", "command", "completions", "parallelism", "backoff_limit", "active_deadline_seconds", "enable_logging", "config_file"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -123,6 +125,11 @@ def to_dict(self) -> Dict[str, Any]: if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + # set to None if env_vars (nullable) is None # and model_fields_set contains the field if self.env_vars is None and "env_vars" in self.model_fields_set: @@ -164,7 +171,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "priority": obj.get("priority"), "image_url": obj.get("image_url"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), "command": obj.get("command"), "completions": obj.get("completions") if obj.get("completions") is not None else 1, "parallelism": obj.get("parallelism") if obj.get("parallelism") is not None else 1, diff --git a/platform_api_python_client/models/create_object_volume_request.py b/platform_api_python_client/models/create_object_volume_request.py index 3647351..ce9108e 100644 --- a/platform_api_python_client/models/create_object_volume_request.py +++ b/platform_api_python_client/models/create_object_volume_request.py @@ -36,7 +36,6 @@ class CreateObjectVolumeRequest(BaseModel): region: Annotated[str, Field(min_length=1, strict=True, max_length=63)] prefix: Optional[Annotated[str, Field(strict=True, max_length=1024)]] = None read_only: Optional[StrictBool] = False - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["name", "cluster_id", "backend", "provider", "bucket", "region", "prefix", "read_only"] @field_validator('name') @@ -97,10 +96,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -108,11 +105,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - # set to None if prefix (nullable) is None # and model_fields_set contains the field if self.prefix is None and "prefix" in self.model_fields_set: @@ -139,11 +131,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "prefix": obj.get("prefix"), "read_only": obj.get("read_only") if obj.get("read_only") is not None else False }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/deployment_type.py b/platform_api_python_client/models/deployment_type.py index 01414ef..d42062a 100644 --- a/platform_api_python_client/models/deployment_type.py +++ b/platform_api_python_client/models/deployment_type.py @@ -40,10 +40,24 @@ class DeploymentType(str, Enum): RAG = 'rag' JOB = 'job' DYNAMO = 'dynamo' + CCL_COMPUTE = 'ccl_compute' + CCL_INFERENCE = 'ccl_inference' + CCL_JOB = 'ccl_job' + CCL_DYNAMO = 'ccl_dynamo' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of DeploymentType from a JSON string""" return cls(json.loads(json_str)) + @classmethod + def _missing_(cls, value): + """Accept a value the server added after this client was generated; it keeps the raw value.""" + if not isinstance(value, str): + return None + member = str.__new__(cls, value) + member._name_ = None + member._value_ = value + return member + diff --git a/platform_api_python_client/models/dynamo_communications_input.py b/platform_api_python_client/models/dynamo_communications_input.py index 28702da..a2873a1 100644 --- a/platform_api_python_client/models/dynamo_communications_input.py +++ b/platform_api_python_client/models/dynamo_communications_input.py @@ -28,7 +28,6 @@ class DynamoCommunicationsInput(BaseModel): DynamoCommunicationsInput """ # noqa: E501 kv_transfer: DynamoKvTransferConfiguration - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["kv_transfer"] model_config = ConfigDict( @@ -61,10 +60,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -75,11 +72,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of kv_transfer if self.kv_transfer: _dict['kv_transfer'] = self.kv_transfer.to_dict() - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - return _dict @classmethod @@ -94,11 +86,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "kv_transfer": DynamoKvTransferConfiguration.from_dict(obj["kv_transfer"]) if obj.get("kv_transfer") is not None else None }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/dynamo_communications_output.py b/platform_api_python_client/models/dynamo_communications_output.py index 297a037..563d83b 100644 --- a/platform_api_python_client/models/dynamo_communications_output.py +++ b/platform_api_python_client/models/dynamo_communications_output.py @@ -28,7 +28,6 @@ class DynamoCommunicationsOutput(BaseModel): DynamoCommunicationsOutput """ # noqa: E501 kv_transfer: DynamoKvTransferConfiguration - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["kv_transfer"] model_config = ConfigDict( @@ -61,10 +60,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -75,11 +72,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of kv_transfer if self.kv_transfer: _dict['kv_transfer'] = self.kv_transfer.to_dict() - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - return _dict @classmethod @@ -94,11 +86,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "kv_transfer": DynamoKvTransferConfiguration.from_dict(obj["kv_transfer"]) if obj.get("kv_transfer") is not None else None }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/dynamo_kv_transfer_configuration.py b/platform_api_python_client/models/dynamo_kv_transfer_configuration.py index d65751a..93f514a 100644 --- a/platform_api_python_client/models/dynamo_kv_transfer_configuration.py +++ b/platform_api_python_client/models/dynamo_kv_transfer_configuration.py @@ -28,7 +28,6 @@ class DynamoKvTransferConfiguration(BaseModel): DynamoKvTransferConfiguration """ # noqa: E501 policy: DynamoKvTransferPolicy = Field(description="allow_tcp uses platform-managed NIXL/UCX and permits TCP; it does not force TCP or guarantee RDMA. require_gpu_direct_rdma selects EKS EFA device requirements and GPU-buffer transfer over LIBFABRIC without TCP fallback. A compatible EFA chart and runtime image are prerequisites; the API does not validate their capabilities. Device availability is resolved during scheduling.") - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["policy"] model_config = ConfigDict( @@ -61,10 +60,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -72,11 +69,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - return _dict @classmethod @@ -91,11 +83,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "policy": obj.get("policy") }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/dynamo_worker_pool_config.py b/platform_api_python_client/models/dynamo_worker_pool_config.py index ee8fb6c..fe85883 100644 --- a/platform_api_python_client/models/dynamo_worker_pool_config.py +++ b/platform_api_python_client/models/dynamo_worker_pool_config.py @@ -33,7 +33,6 @@ class DynamoWorkerPoolConfig(BaseModel): max_replicas: Optional[Annotated[int, Field(strict=True, ge=1)]] = None concurrency: Optional[Annotated[int, Field(strict=True, ge=1)]] = None cooldown_period: Optional[Annotated[int, Field(le=3600, strict=True, ge=0)]] = None - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["hardware_instance_id", "replicas", "min_replicas", "max_replicas", "concurrency", "cooldown_period"] model_config = ConfigDict( @@ -66,10 +65,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -77,11 +74,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - # set to None if replicas (nullable) is None # and model_fields_set contains the field if self.replicas is None and "replicas" in self.model_fields_set: @@ -126,11 +118,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "concurrency": obj.get("concurrency"), "cooldown_period": obj.get("cooldown_period") }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/dynamo_worker_pools.py b/platform_api_python_client/models/dynamo_worker_pools.py index 6962c84..5678089 100644 --- a/platform_api_python_client/models/dynamo_worker_pools.py +++ b/platform_api_python_client/models/dynamo_worker_pools.py @@ -30,7 +30,6 @@ class DynamoWorkerPools(BaseModel): worker: Optional[DynamoWorkerPoolConfig] = None prefill: Optional[DynamoWorkerPoolConfig] = None decode: Optional[DynamoWorkerPoolConfig] = None - additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["worker", "prefill", "decode"] model_config = ConfigDict( @@ -63,10 +62,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * Fields in `self.additional_properties` are added to the output dict. """ excluded_fields: Set[str] = set([ - "additional_properties", ]) _dict = self.model_dump( @@ -83,11 +80,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of decode if self.decode: _dict['decode'] = self.decode.to_dict() - # puts key-value pairs in additional_properties in the top level - if self.additional_properties is not None: - for _key, _value in self.additional_properties.items(): - _dict[_key] = _value - # set to None if worker (nullable) is None # and model_fields_set contains the field if self.worker is None and "worker" in self.model_fields_set: @@ -119,11 +111,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "prefill": DynamoWorkerPoolConfig.from_dict(obj["prefill"]) if obj.get("prefill") is not None else None, "decode": DynamoWorkerPoolConfig.from_dict(obj["decode"]) if obj.get("decode") is not None else None }) - # store additional fields in additional_properties - for _key in obj.keys(): - if _key not in cls.__properties: - _obj.additional_properties[_key] = obj.get(_key) - return _obj diff --git a/platform_api_python_client/models/get_c_serve_v3_deployment_response.py b/platform_api_python_client/models/get_c_serve_v3_deployment_response.py index 848879b..287a1a4 100644 --- a/platform_api_python_client/models/get_c_serve_v3_deployment_response.py +++ b/platform_api_python_client/models/get_c_serve_v3_deployment_response.py @@ -20,6 +20,7 @@ from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from platform_api_python_client.models.c_serve_v2_recipe import CServeV2Recipe from platform_api_python_client.models.deployment_status import DeploymentStatus from platform_api_python_client.models.deployment_type import DeploymentType @@ -46,6 +47,7 @@ class GetCServeV3DeploymentResponse(BaseModel): user_annotations: Optional[Dict[str, StrictStr]] = None priority: Optional[StrictStr] = None volume_mounts: Optional[List[VolumeMount]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None recipe: CServeV2Recipe cserve_version: Optional[StrictStr] = None min_replicas: StrictInt @@ -55,10 +57,12 @@ class GetCServeV3DeploymentResponse(BaseModel): concurrency: Optional[StrictInt] = None cooldown_period: Optional[StrictInt] = 1800 env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None enable_logging: Optional[StrictBool] = True enable_node_model_cache: Optional[StrictBool] = False session_affinity: Optional[StrictBool] = Field(default=False, description="Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state.") - __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "recipe", "cserve_version", "min_replicas", "max_replicas", "endpoint_certificate_authority", "endpoint_bearer_token", "concurrency", "cooldown_period", "env_vars", "enable_logging", "enable_node_model_cache", "session_affinity"] + __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "hf_token_ref", "recipe", "cserve_version", "min_replicas", "max_replicas", "endpoint_certificate_authority", "endpoint_bearer_token", "concurrency", "cooldown_period", "env_vars", "env_vars_refs", "bearer_token_ref", "enable_logging", "enable_node_model_cache", "session_affinity"] model_config = ConfigDict( populate_by_name=True, @@ -129,6 +133,11 @@ def to_dict(self) -> Dict[str, Any]: if self.priority is None and "priority" in self.model_fields_set: _dict['priority'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if cserve_version (nullable) is None # and model_fields_set contains the field if self.cserve_version is None and "cserve_version" in self.model_fields_set: @@ -149,6 +158,11 @@ def to_dict(self) -> Dict[str, Any]: if self.concurrency is None and "concurrency" in self.model_fields_set: _dict['concurrency'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + return _dict @classmethod @@ -176,6 +190,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "user_annotations": obj.get("user_annotations"), "priority": obj.get("priority"), "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "hf_token_ref": obj.get("hf_token_ref"), "recipe": CServeV2Recipe.from_dict(obj["recipe"]) if obj.get("recipe") is not None else None, "cserve_version": obj.get("cserve_version"), "min_replicas": obj.get("min_replicas"), @@ -185,6 +200,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "concurrency": obj.get("concurrency"), "cooldown_period": obj.get("cooldown_period") if obj.get("cooldown_period") is not None else 1800, "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), + "bearer_token_ref": obj.get("bearer_token_ref"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, "session_affinity": obj.get("session_affinity") if obj.get("session_affinity") is not None else False diff --git a/platform_api_python_client/models/get_cluster_response.py b/platform_api_python_client/models/get_cluster_response.py index 7c11cc4..9e2dd6e 100644 --- a/platform_api_python_client/models/get_cluster_response.py +++ b/platform_api_python_client/models/get_cluster_response.py @@ -31,7 +31,8 @@ class GetClusterResponse(BaseModel): display_name: StrictStr region: Optional[StrictStr] = None deployment_creation_disabled: Optional[StrictBool] = False - __properties: ClassVar[List[str]] = ["id", "cluster_name", "display_name", "region", "deployment_creation_disabled"] + managed_by_ccluster: StrictBool + __properties: ClassVar[List[str]] = ["id", "cluster_name", "display_name", "region", "deployment_creation_disabled", "managed_by_ccluster"] model_config = ConfigDict( populate_by_name=True, @@ -93,7 +94,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "cluster_name": obj.get("cluster_name"), "display_name": obj.get("display_name"), "region": obj.get("region"), - "deployment_creation_disabled": obj.get("deployment_creation_disabled") if obj.get("deployment_creation_disabled") is not None else False + "deployment_creation_disabled": obj.get("deployment_creation_disabled") if obj.get("deployment_creation_disabled") is not None else False, + "managed_by_ccluster": obj.get("managed_by_ccluster") }) return _obj diff --git a/platform_api_python_client/models/get_compute_deployment_response.py b/platform_api_python_client/models/get_compute_deployment_response.py index 15a26fa..17b7db9 100644 --- a/platform_api_python_client/models/get_compute_deployment_response.py +++ b/platform_api_python_client/models/get_compute_deployment_response.py @@ -18,8 +18,9 @@ import json from datetime import datetime -from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from platform_api_python_client.models.deployment_status import DeploymentStatus from platform_api_python_client.models.deployment_type import DeploymentType from platform_api_python_client.models.image_pull_secret_credentials import ImagePullSecretCredentials @@ -51,8 +52,10 @@ class GetComputeDeploymentResponse(BaseModel): ssh_password: Optional[StrictStr] = None env_vars: Optional[Dict[str, StrictStr]] = None image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + env_vars_refs: Optional[Dict[str, Any]] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None enable_logging: Optional[StrictBool] = True - __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "exposed_port", "ssh_public_key", "ssh_password", "env_vars", "image_pull_secret_credentials", "enable_logging"] + __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "exposed_port", "ssh_public_key", "ssh_password", "env_vars", "image_pull_secret_credentials", "env_vars_refs", "image_pull_ref", "enable_logging"] model_config = ConfigDict( populate_by_name=True, @@ -143,6 +146,11 @@ def to_dict(self) -> Dict[str, Any]: if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + return _dict @classmethod @@ -175,6 +183,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ssh_password": obj.get("ssh_password"), "env_vars": obj.get("env_vars"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "env_vars_refs": obj.get("env_vars_refs"), + "image_pull_ref": obj.get("image_pull_ref"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True }) return _obj diff --git a/platform_api_python_client/models/get_deployment_usage_response.py b/platform_api_python_client/models/get_deployment_usage_response.py index a10e9f3..9242168 100644 --- a/platform_api_python_client/models/get_deployment_usage_response.py +++ b/platform_api_python_client/models/get_deployment_usage_response.py @@ -17,9 +17,10 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict -from typing import Any, ClassVar, Dict, List +from pydantic import BaseModel, ConfigDict, StrictInt +from typing import Any, ClassVar, Dict, List, Optional from platform_api_python_client.models.deployment_usage import DeploymentUsage +from platform_api_python_client.models.usage_availability import UsageAvailability from typing import Optional, Set from typing_extensions import Self @@ -28,7 +29,9 @@ class GetDeploymentUsageResponse(BaseModel): GetDeploymentUsageResponse """ # noqa: E501 values: List[DeploymentUsage] - __properties: ClassVar[List[str]] = ["values"] + availability: Optional[UsageAvailability] = None + last_sample_at: Optional[StrictInt] = None + __properties: ClassVar[List[str]] = ["values", "availability", "last_sample_at"] model_config = ConfigDict( populate_by_name=True, @@ -76,6 +79,16 @@ def to_dict(self) -> Dict[str, Any]: if _item_values: _items.append(_item_values.to_dict()) _dict['values'] = _items + # set to None if availability (nullable) is None + # and model_fields_set contains the field + if self.availability is None and "availability" in self.model_fields_set: + _dict['availability'] = None + + # set to None if last_sample_at (nullable) is None + # and model_fields_set contains the field + if self.last_sample_at is None and "last_sample_at" in self.model_fields_set: + _dict['last_sample_at'] = None + return _dict @classmethod @@ -88,7 +101,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "values": [DeploymentUsage.from_dict(_item) for _item in obj["values"]] if obj.get("values") is not None else None + "values": [DeploymentUsage.from_dict(_item) for _item in obj["values"]] if obj.get("values") is not None else None, + "availability": obj.get("availability"), + "last_sample_at": obj.get("last_sample_at") }) return _obj diff --git a/platform_api_python_client/models/get_dynamo_deployment_response.py b/platform_api_python_client/models/get_dynamo_deployment_response.py index 9ff09f9..29b83a9 100644 --- a/platform_api_python_client/models/get_dynamo_deployment_response.py +++ b/platform_api_python_client/models/get_dynamo_deployment_response.py @@ -20,6 +20,7 @@ from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from platform_api_python_client.models.backend_protocol import BackendProtocol from platform_api_python_client.models.deployment_status import DeploymentStatus from platform_api_python_client.models.deployment_type import DeploymentType @@ -49,6 +50,7 @@ class GetDynamoDeploymentResponse(BaseModel): user_annotations: Optional[Dict[str, StrictStr]] = None priority: Optional[StrictStr] = None volume_mounts: Optional[List[VolumeMount]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None serving_mode: Optional[DynamoServingMode] = None worker_pools: Optional[DynamoWorkerPools] = None communications: Optional[DynamoCommunicationsOutput] = None @@ -61,12 +63,15 @@ class GetDynamoDeploymentResponse(BaseModel): cooldown_period: Optional[StrictInt] = None extra_args: Optional[StrictStr] = None env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None endpoint_certificate_authority: Optional[StrictStr] = None endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None enable_logging: Optional[StrictBool] = True enable_node_model_cache: Optional[StrictBool] = False backend_protocol: Optional[BackendProtocol] = None - __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "serving_mode", "worker_pools", "communications", "model", "served_model_name", "runtime_version", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "extra_args", "env_vars", "endpoint_certificate_authority", "endpoint_bearer_token", "enable_logging", "enable_node_model_cache", "backend_protocol"] + __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "hf_token_ref", "serving_mode", "worker_pools", "communications", "model", "served_model_name", "runtime_version", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "extra_args", "env_vars", "env_vars_refs", "endpoint_certificate_authority", "endpoint_bearer_token", "bearer_token_ref", "image_pull_ref", "enable_logging", "enable_node_model_cache", "backend_protocol"] model_config = ConfigDict( populate_by_name=True, @@ -140,6 +145,11 @@ def to_dict(self) -> Dict[str, Any]: if self.priority is None and "priority" in self.model_fields_set: _dict['priority'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if worker_pools (nullable) is None # and model_fields_set contains the field if self.worker_pools is None and "worker_pools" in self.model_fields_set: @@ -185,6 +195,16 @@ def to_dict(self) -> Dict[str, Any]: if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: _dict['endpoint_bearer_token'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + return _dict @classmethod @@ -212,6 +232,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "user_annotations": obj.get("user_annotations"), "priority": obj.get("priority"), "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "hf_token_ref": obj.get("hf_token_ref"), "serving_mode": obj.get("serving_mode"), "worker_pools": DynamoWorkerPools.from_dict(obj["worker_pools"]) if obj.get("worker_pools") is not None else None, "communications": DynamoCommunicationsOutput.from_dict(obj["communications"]) if obj.get("communications") is not None else None, @@ -224,8 +245,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "cooldown_period": obj.get("cooldown_period"), "extra_args": obj.get("extra_args"), "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), + "image_pull_ref": obj.get("image_pull_ref"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, "backend_protocol": obj.get("backend_protocol") diff --git a/platform_api_python_client/models/get_inference_v3_deployment_response.py b/platform_api_python_client/models/get_inference_v3_deployment_response.py index 71035d6..d65394d 100644 --- a/platform_api_python_client/models/get_inference_v3_deployment_response.py +++ b/platform_api_python_client/models/get_inference_v3_deployment_response.py @@ -20,6 +20,7 @@ from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from platform_api_python_client.models.backend_protocol import BackendProtocol from platform_api_python_client.models.config_file_mount import ConfigFileMount from platform_api_python_client.models.deployment_status import DeploymentStatus @@ -49,6 +50,7 @@ class GetInferenceV3DeploymentResponse(BaseModel): user_annotations: Optional[Dict[str, StrictStr]] = None priority: Optional[StrictStr] = None volume_mounts: Optional[List[VolumeMount]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None container_port: StrictInt min_replicas: StrictInt max_replicas: StrictInt @@ -62,13 +64,16 @@ class GetInferenceV3DeploymentResponse(BaseModel): command_args: Optional[List[StrictStr]] = None original_command: Optional[StrictStr] = None image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + env_vars_refs: Optional[Dict[str, Any]] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None backend_protocol: Optional[BackendProtocol] = None enable_logging: Optional[StrictBool] = True enable_node_model_cache: Optional[StrictBool] = False session_affinity: Optional[StrictBool] = Field(default=False, description="Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state.") config_file: Optional[ConfigFileMount] = None metrics: Optional[MetricsConfig] = None - __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "container_port", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "healthcheck", "endpoint_certificate_authority", "endpoint_bearer_token", "env_vars", "command", "command_args", "original_command", "image_pull_secret_credentials", "backend_protocol", "enable_logging", "enable_node_model_cache", "session_affinity", "config_file", "metrics"] + __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "hf_token_ref", "container_port", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "healthcheck", "endpoint_certificate_authority", "endpoint_bearer_token", "env_vars", "command", "command_args", "original_command", "image_pull_secret_credentials", "env_vars_refs", "bearer_token_ref", "image_pull_ref", "backend_protocol", "enable_logging", "enable_node_model_cache", "session_affinity", "config_file", "metrics"] model_config = ConfigDict( populate_by_name=True, @@ -145,6 +150,11 @@ def to_dict(self) -> Dict[str, Any]: if self.priority is None and "priority" in self.model_fields_set: _dict['priority'] = None + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + # set to None if concurrency (nullable) is None # and model_fields_set contains the field if self.concurrency is None and "concurrency" in self.model_fields_set: @@ -190,6 +200,16 @@ def to_dict(self) -> Dict[str, Any]: if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + # set to None if config_file (nullable) is None # and model_fields_set contains the field if self.config_file is None and "config_file" in self.model_fields_set: @@ -227,6 +247,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "user_annotations": obj.get("user_annotations"), "priority": obj.get("priority"), "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "hf_token_ref": obj.get("hf_token_ref"), "container_port": obj.get("container_port"), "min_replicas": obj.get("min_replicas"), "max_replicas": obj.get("max_replicas"), @@ -240,6 +261,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "command_args": obj.get("command_args"), "original_command": obj.get("original_command"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "env_vars_refs": obj.get("env_vars_refs"), + "bearer_token_ref": obj.get("bearer_token_ref"), + "image_pull_ref": obj.get("image_pull_ref"), "backend_protocol": obj.get("backend_protocol"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, diff --git a/platform_api_python_client/models/get_job_deployment_response.py b/platform_api_python_client/models/get_job_deployment_response.py index b0e9412..ac191a7 100644 --- a/platform_api_python_client/models/get_job_deployment_response.py +++ b/platform_api_python_client/models/get_job_deployment_response.py @@ -18,8 +18,9 @@ import json from datetime import datetime -from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from platform_api_python_client.models.config_file_mount import ConfigFileMount from platform_api_python_client.models.deployment_status import DeploymentStatus from platform_api_python_client.models.deployment_type import DeploymentType @@ -56,9 +57,11 @@ class GetJobDeploymentResponse(BaseModel): backoff_limit: Optional[StrictInt] = 3 active_deadline_seconds: Optional[StrictInt] = None image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + env_vars_refs: Optional[Dict[str, Any]] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None enable_logging: Optional[StrictBool] = True config_file: Optional[ConfigFileMount] = None - __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "env_vars", "command", "args", "original_command", "completions", "parallelism", "backoff_limit", "active_deadline_seconds", "image_pull_secret_credentials", "enable_logging", "config_file"] + __properties: ClassVar[List[str]] = ["creator_email", "cluster_id", "id", "name", "endpoint_url", "image_url", "type", "status", "created_at", "hardware_instance_id", "revision_number", "chart_revision", "user_annotations", "priority", "volume_mounts", "env_vars", "command", "args", "original_command", "completions", "parallelism", "backoff_limit", "active_deadline_seconds", "image_pull_secret_credentials", "env_vars_refs", "image_pull_ref", "enable_logging", "config_file"] model_config = ConfigDict( populate_by_name=True, @@ -162,6 +165,11 @@ def to_dict(self) -> Dict[str, Any]: if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: _dict['image_pull_secret_credentials'] = None + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + # set to None if config_file (nullable) is None # and model_fields_set contains the field if self.config_file is None and "config_file" in self.model_fields_set: @@ -203,6 +211,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "backoff_limit": obj.get("backoff_limit") if obj.get("backoff_limit") is not None else 3, "active_deadline_seconds": obj.get("active_deadline_seconds"), "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "env_vars_refs": obj.get("env_vars_refs"), + "image_pull_ref": obj.get("image_pull_ref"), "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, "config_file": ConfigFileMount.from_dict(obj["config_file"]) if obj.get("config_file") is not None else None }) diff --git a/platform_api_python_client/models/metric.py b/platform_api_python_client/models/metric.py index aea7192..02d42a3 100644 --- a/platform_api_python_client/models/metric.py +++ b/platform_api_python_client/models/metric.py @@ -39,6 +39,19 @@ class Metric(str, Enum): TOKENS_PER_SECOND = 'tokens_per_second' TIME_TO_FIRST_TOKEN = 'time_to_first_token' PREFIX_CACHE_HIT_RATE = 'prefix_cache_hit_rate' + DYNAMO_TTFT = 'dynamo_ttft' + DYNAMO_TPOT = 'dynamo_tpot' + DYNAMO_REQUEST_LATENCY = 'dynamo_request_latency' + DYNAMO_OUTPUT_THROUGHPUT = 'dynamo_output_throughput' + DYNAMO_REQUESTS = 'dynamo_requests' + DYNAMO_QUEUE_DEPTH = 'dynamo_queue_depth' + DYNAMO_RUNNING_REQUESTS = 'dynamo_running_requests' + DYNAMO_KV_CACHE = 'dynamo_kv_cache' + DYNAMO_KV_THROUGHPUT = 'dynamo_kv_throughput' + DYNAMO_KV_TRANSFER_LATENCY = 'dynamo_kv_transfer_latency' + DYNAMO_KV_TRANSFERS = 'dynamo_kv_transfers' + DYNAMO_KV_FAILURES = 'dynamo_kv_failures' + DYNAMO_TARGETS = 'dynamo_targets' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/platform_api_python_client/models/unified_write_compute_deployment_request.py b/platform_api_python_client/models/unified_write_compute_deployment_request.py new file mode 100644 index 0000000..662ec58 --- /dev/null +++ b/platform_api_python_client/models/unified_write_compute_deployment_request.py @@ -0,0 +1,160 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from platform_api_python_client.models.image_pull_secret_credentials import ImagePullSecretCredentials +from platform_api_python_client.models.volume_mount import VolumeMount +from typing import Optional, Set +from typing_extensions import Self + +class UnifiedWriteComputeDeploymentRequest(BaseModel): + """ + UnifiedWriteComputeDeploymentRequest + """ # noqa: E501 + name: Annotated[str, Field(min_length=1, strict=True, max_length=20)] + cluster_id: StrictInt + hardware_instance_id: StrictInt + user_annotations: Optional[Dict[str, StrictStr]] = None + chart_revision: Optional[StrictStr] = None + volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None + priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + image_url: StrictStr + image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + env_vars_refs: Optional[Dict[str, Any]] = None + ssh_public_key: StrictStr + enable_logging: Optional[StrictBool] = False + type: StrictStr + __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "image_pull_ref", "env_vars_refs", "ssh_public_key", "enable_logging", "type"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z][a-z0-9-]*$", value): + raise ValueError(r"must validate the regular expression /^[a-z][a-z0-9-]*$/") + return value + + @field_validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ccl_compute']): + raise ValueError("must be one of enum values ('ccl_compute')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UnifiedWriteComputeDeploymentRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in volume_mounts (list) + _items = [] + if self.volume_mounts: + for _item_volume_mounts in self.volume_mounts: + if _item_volume_mounts: + _items.append(_item_volume_mounts.to_dict()) + _dict['volume_mounts'] = _items + # override the default output from pydantic by calling `to_dict()` of image_pull_secret_credentials + if self.image_pull_secret_credentials: + _dict['image_pull_secret_credentials'] = self.image_pull_secret_credentials.to_dict() + # set to None if user_annotations (nullable) is None + # and model_fields_set contains the field + if self.user_annotations is None and "user_annotations" in self.model_fields_set: + _dict['user_annotations'] = None + + # set to None if priority (nullable) is None + # and model_fields_set contains the field + if self.priority is None and "priority" in self.model_fields_set: + _dict['priority'] = None + + # set to None if image_pull_secret_credentials (nullable) is None + # and model_fields_set contains the field + if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: + _dict['image_pull_secret_credentials'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UnifiedWriteComputeDeploymentRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "name": obj.get("name"), + "cluster_id": obj.get("cluster_id"), + "hardware_instance_id": obj.get("hardware_instance_id"), + "user_annotations": obj.get("user_annotations"), + "chart_revision": obj.get("chart_revision"), + "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "priority": obj.get("priority"), + "image_url": obj.get("image_url"), + "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), + "env_vars_refs": obj.get("env_vars_refs"), + "ssh_public_key": obj.get("ssh_public_key"), + "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else False, + "type": obj.get("type") + }) + return _obj + + diff --git a/platform_api_python_client/models/unified_write_deployment_request.py b/platform_api_python_client/models/unified_write_deployment_request.py new file mode 100644 index 0000000..d71c9b1 --- /dev/null +++ b/platform_api_python_client/models/unified_write_deployment_request.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +from inspect import getfullargspec +import json +import pprint +import re # noqa: F401 +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Optional +from platform_api_python_client.models.unified_write_compute_deployment_request import UnifiedWriteComputeDeploymentRequest +from platform_api_python_client.models.unified_write_dynamo_deployment_request import UnifiedWriteDynamoDeploymentRequest +from platform_api_python_client.models.unified_write_inference_v3_deployment_request import UnifiedWriteInferenceV3DeploymentRequest +from platform_api_python_client.models.unified_write_job_deployment_request import UnifiedWriteJobDeploymentRequest +from typing import Union, Any, List, Set, TYPE_CHECKING, Optional, Dict +from typing_extensions import Literal, Self +from pydantic import Field + +UNIFIEDWRITEDEPLOYMENTREQUEST_ANY_OF_SCHEMAS = ["UnifiedWriteComputeDeploymentRequest", "UnifiedWriteDynamoDeploymentRequest", "UnifiedWriteInferenceV3DeploymentRequest", "UnifiedWriteJobDeploymentRequest"] + +class UnifiedWriteDeploymentRequest(BaseModel): + """ + UnifiedWriteDeploymentRequest + """ + + # data type: UnifiedWriteComputeDeploymentRequest + anyof_schema_1_validator: Optional[UnifiedWriteComputeDeploymentRequest] = None + # data type: UnifiedWriteInferenceV3DeploymentRequest + anyof_schema_2_validator: Optional[UnifiedWriteInferenceV3DeploymentRequest] = None + # data type: UnifiedWriteDynamoDeploymentRequest + anyof_schema_3_validator: Optional[UnifiedWriteDynamoDeploymentRequest] = None + # data type: UnifiedWriteJobDeploymentRequest + anyof_schema_4_validator: Optional[UnifiedWriteJobDeploymentRequest] = None + if TYPE_CHECKING: + actual_instance: Optional[Union[UnifiedWriteComputeDeploymentRequest, UnifiedWriteDynamoDeploymentRequest, UnifiedWriteInferenceV3DeploymentRequest, UnifiedWriteJobDeploymentRequest]] = None + else: + actual_instance: Any = None + any_of_schemas: Set[str] = { "UnifiedWriteComputeDeploymentRequest", "UnifiedWriteDynamoDeploymentRequest", "UnifiedWriteInferenceV3DeploymentRequest", "UnifiedWriteJobDeploymentRequest" } + + model_config = { + "validate_assignment": True, + "protected_namespaces": (), + } + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_anyof(cls, v): + instance = UnifiedWriteDeploymentRequest.model_construct() + error_messages = [] + # validate data type: UnifiedWriteComputeDeploymentRequest + if not isinstance(v, UnifiedWriteComputeDeploymentRequest): + error_messages.append(f"Error! Input type `{type(v)}` is not `UnifiedWriteComputeDeploymentRequest`") + else: + return v + + # validate data type: UnifiedWriteInferenceV3DeploymentRequest + if not isinstance(v, UnifiedWriteInferenceV3DeploymentRequest): + error_messages.append(f"Error! Input type `{type(v)}` is not `UnifiedWriteInferenceV3DeploymentRequest`") + else: + return v + + # validate data type: UnifiedWriteDynamoDeploymentRequest + if not isinstance(v, UnifiedWriteDynamoDeploymentRequest): + error_messages.append(f"Error! Input type `{type(v)}` is not `UnifiedWriteDynamoDeploymentRequest`") + else: + return v + + # validate data type: UnifiedWriteJobDeploymentRequest + if not isinstance(v, UnifiedWriteJobDeploymentRequest): + error_messages.append(f"Error! Input type `{type(v)}` is not `UnifiedWriteJobDeploymentRequest`") + else: + return v + + if error_messages: + # no match + raise ValueError("No match found when setting the actual_instance in UnifiedWriteDeploymentRequest with anyOf schemas: UnifiedWriteComputeDeploymentRequest, UnifiedWriteDynamoDeploymentRequest, UnifiedWriteInferenceV3DeploymentRequest, UnifiedWriteJobDeploymentRequest. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Dict[str, Any]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() + error_messages = [] + # anyof_schema_1_validator: Optional[UnifiedWriteComputeDeploymentRequest] = None + try: + instance.actual_instance = UnifiedWriteComputeDeploymentRequest.from_json(json_str) + return instance + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # anyof_schema_2_validator: Optional[UnifiedWriteInferenceV3DeploymentRequest] = None + try: + instance.actual_instance = UnifiedWriteInferenceV3DeploymentRequest.from_json(json_str) + return instance + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # anyof_schema_3_validator: Optional[UnifiedWriteDynamoDeploymentRequest] = None + try: + instance.actual_instance = UnifiedWriteDynamoDeploymentRequest.from_json(json_str) + return instance + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # anyof_schema_4_validator: Optional[UnifiedWriteJobDeploymentRequest] = None + try: + instance.actual_instance = UnifiedWriteJobDeploymentRequest.from_json(json_str) + return instance + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + if error_messages: + # no match + raise ValueError("No match found when deserializing the JSON string into UnifiedWriteDeploymentRequest with anyOf schemas: UnifiedWriteComputeDeploymentRequest, UnifiedWriteDynamoDeploymentRequest, UnifiedWriteInferenceV3DeploymentRequest, UnifiedWriteJobDeploymentRequest. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], UnifiedWriteComputeDeploymentRequest, UnifiedWriteDynamoDeploymentRequest, UnifiedWriteInferenceV3DeploymentRequest, UnifiedWriteJobDeploymentRequest]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/platform_api_python_client/models/unified_write_deployment_response.py b/platform_api_python_client/models/unified_write_deployment_response.py new file mode 100644 index 0000000..595bbfb --- /dev/null +++ b/platform_api_python_client/models/unified_write_deployment_response.py @@ -0,0 +1,109 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from platform_api_python_client.models.deployment_type import DeploymentType +from typing import Optional, Set +from typing_extensions import Self + +class UnifiedWriteDeploymentResponse(BaseModel): + """ + UnifiedWriteDeploymentResponse + """ # noqa: E501 + id: StrictInt + type: DeploymentType + created_at: datetime + updated_at: datetime + endpoint_url: Optional[StrictStr] + port: Optional[StrictInt] + __properties: ClassVar[List[str]] = ["id", "type", "created_at", "updated_at", "endpoint_url", "port"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UnifiedWriteDeploymentResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # set to None if endpoint_url (nullable) is None + # and model_fields_set contains the field + if self.endpoint_url is None and "endpoint_url" in self.model_fields_set: + _dict['endpoint_url'] = None + + # set to None if port (nullable) is None + # and model_fields_set contains the field + if self.port is None and "port" in self.model_fields_set: + _dict['port'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UnifiedWriteDeploymentResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "id": obj.get("id"), + "type": obj.get("type"), + "created_at": obj.get("created_at"), + "updated_at": obj.get("updated_at"), + "endpoint_url": obj.get("endpoint_url"), + "port": obj.get("port") + }) + return _obj + + diff --git a/platform_api_python_client/models/unified_write_dynamo_deployment_request.py b/platform_api_python_client/models/unified_write_dynamo_deployment_request.py new file mode 100644 index 0000000..d63218c --- /dev/null +++ b/platform_api_python_client/models/unified_write_dynamo_deployment_request.py @@ -0,0 +1,287 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from platform_api_python_client.models.backend_protocol import BackendProtocol +from platform_api_python_client.models.dynamo_communications_input import DynamoCommunicationsInput +from platform_api_python_client.models.dynamo_serving_mode import DynamoServingMode +from platform_api_python_client.models.dynamo_worker_pools import DynamoWorkerPools +from platform_api_python_client.models.volume_mount import VolumeMount +from typing import Optional, Set +from typing_extensions import Self + +class UnifiedWriteDynamoDeploymentRequest(BaseModel): + """ + UnifiedWriteDynamoDeploymentRequest + """ # noqa: E501 + max_surge: Optional[StrictInt] = None + max_unavailable: Optional[StrictInt] = None + name: Annotated[str, Field(min_length=1, strict=True, max_length=20)] + cluster_id: StrictInt + hardware_instance_id: Optional[StrictInt] = None + user_annotations: Optional[Dict[str, StrictStr]] = None + chart_revision: Optional[StrictStr] = None + volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None + priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + serving_mode: Optional[DynamoServingMode] = None + worker_pools: Optional[DynamoWorkerPools] = None + communications: Optional[DynamoCommunicationsInput] = None + model: StrictStr + served_model_name: Optional[StrictStr] = None + runtime_version: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="Dynamo runtime image tag (for example 1.4.0). Defaults to the platform's current release; GET /prebuilt-images?type=dynamo lists the versions the platform has validated, but any tag may be requested. require_gpu_direct_rdma needs an EFA-capable image. Changing it restarts every component of a running deployment.") + min_replicas: Optional[StrictInt] = None + max_replicas: Optional[StrictInt] = None + concurrency: Optional[StrictInt] = None + cooldown_period: Optional[StrictInt] = None + extra_args: Optional[StrictStr] = None + hf_token: Optional[StrictStr] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None + endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + endpoint_certificate_authority: Optional[StrictStr] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + enable_logging: Optional[StrictBool] = True + enable_node_model_cache: Optional[StrictBool] = False + backend_protocol: Optional[BackendProtocol] = None + type: StrictStr + __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "serving_mode", "worker_pools", "communications", "model", "served_model_name", "runtime_version", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "extra_args", "hf_token", "hf_token_ref", "env_vars", "env_vars_refs", "endpoint_bearer_token", "bearer_token_ref", "endpoint_certificate_authority", "image_pull_ref", "enable_logging", "enable_node_model_cache", "backend_protocol", "type"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z][a-z0-9-]*$", value): + raise ValueError(r"must validate the regular expression /^[a-z][a-z0-9-]*$/") + return value + + @field_validator('runtime_version') + def runtime_version_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^[A-Za-z0-9_][A-Za-z0-9._-]{0,127}$", value): + raise ValueError(r"must validate the regular expression /^[A-Za-z0-9_][A-Za-z0-9._-]{0,127}$/") + return value + + @field_validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ccl_dynamo']): + raise ValueError("must be one of enum values ('ccl_dynamo')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UnifiedWriteDynamoDeploymentRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in volume_mounts (list) + _items = [] + if self.volume_mounts: + for _item_volume_mounts in self.volume_mounts: + if _item_volume_mounts: + _items.append(_item_volume_mounts.to_dict()) + _dict['volume_mounts'] = _items + # override the default output from pydantic by calling `to_dict()` of worker_pools + if self.worker_pools: + _dict['worker_pools'] = self.worker_pools.to_dict() + # override the default output from pydantic by calling `to_dict()` of communications + if self.communications: + _dict['communications'] = self.communications.to_dict() + # set to None if max_surge (nullable) is None + # and model_fields_set contains the field + if self.max_surge is None and "max_surge" in self.model_fields_set: + _dict['max_surge'] = None + + # set to None if max_unavailable (nullable) is None + # and model_fields_set contains the field + if self.max_unavailable is None and "max_unavailable" in self.model_fields_set: + _dict['max_unavailable'] = None + + # set to None if hardware_instance_id (nullable) is None + # and model_fields_set contains the field + if self.hardware_instance_id is None and "hardware_instance_id" in self.model_fields_set: + _dict['hardware_instance_id'] = None + + # set to None if user_annotations (nullable) is None + # and model_fields_set contains the field + if self.user_annotations is None and "user_annotations" in self.model_fields_set: + _dict['user_annotations'] = None + + # set to None if priority (nullable) is None + # and model_fields_set contains the field + if self.priority is None and "priority" in self.model_fields_set: + _dict['priority'] = None + + # set to None if worker_pools (nullable) is None + # and model_fields_set contains the field + if self.worker_pools is None and "worker_pools" in self.model_fields_set: + _dict['worker_pools'] = None + + # set to None if communications (nullable) is None + # and model_fields_set contains the field + if self.communications is None and "communications" in self.model_fields_set: + _dict['communications'] = None + + # set to None if served_model_name (nullable) is None + # and model_fields_set contains the field + if self.served_model_name is None and "served_model_name" in self.model_fields_set: + _dict['served_model_name'] = None + + # set to None if min_replicas (nullable) is None + # and model_fields_set contains the field + if self.min_replicas is None and "min_replicas" in self.model_fields_set: + _dict['min_replicas'] = None + + # set to None if max_replicas (nullable) is None + # and model_fields_set contains the field + if self.max_replicas is None and "max_replicas" in self.model_fields_set: + _dict['max_replicas'] = None + + # set to None if concurrency (nullable) is None + # and model_fields_set contains the field + if self.concurrency is None and "concurrency" in self.model_fields_set: + _dict['concurrency'] = None + + # set to None if cooldown_period (nullable) is None + # and model_fields_set contains the field + if self.cooldown_period is None and "cooldown_period" in self.model_fields_set: + _dict['cooldown_period'] = None + + # set to None if extra_args (nullable) is None + # and model_fields_set contains the field + if self.extra_args is None and "extra_args" in self.model_fields_set: + _dict['extra_args'] = None + + # set to None if hf_token (nullable) is None + # and model_fields_set contains the field + if self.hf_token is None and "hf_token" in self.model_fields_set: + _dict['hf_token'] = None + + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + + # set to None if endpoint_bearer_token (nullable) is None + # and model_fields_set contains the field + if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: + _dict['endpoint_bearer_token'] = None + + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + + # set to None if endpoint_certificate_authority (nullable) is None + # and model_fields_set contains the field + if self.endpoint_certificate_authority is None and "endpoint_certificate_authority" in self.model_fields_set: + _dict['endpoint_certificate_authority'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UnifiedWriteDynamoDeploymentRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "max_surge": obj.get("max_surge"), + "max_unavailable": obj.get("max_unavailable"), + "name": obj.get("name"), + "cluster_id": obj.get("cluster_id"), + "hardware_instance_id": obj.get("hardware_instance_id"), + "user_annotations": obj.get("user_annotations"), + "chart_revision": obj.get("chart_revision"), + "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "priority": obj.get("priority"), + "serving_mode": obj.get("serving_mode"), + "worker_pools": DynamoWorkerPools.from_dict(obj["worker_pools"]) if obj.get("worker_pools") is not None else None, + "communications": DynamoCommunicationsInput.from_dict(obj["communications"]) if obj.get("communications") is not None else None, + "model": obj.get("model"), + "served_model_name": obj.get("served_model_name"), + "runtime_version": obj.get("runtime_version"), + "min_replicas": obj.get("min_replicas"), + "max_replicas": obj.get("max_replicas"), + "concurrency": obj.get("concurrency"), + "cooldown_period": obj.get("cooldown_period"), + "extra_args": obj.get("extra_args"), + "hf_token": obj.get("hf_token"), + "hf_token_ref": obj.get("hf_token_ref"), + "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), + "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), + "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), + "image_pull_ref": obj.get("image_pull_ref"), + "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, + "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, + "backend_protocol": obj.get("backend_protocol"), + "type": obj.get("type") + }) + return _obj + + diff --git a/platform_api_python_client/models/unified_write_inference_v3_deployment_request.py b/platform_api_python_client/models/unified_write_inference_v3_deployment_request.py new file mode 100644 index 0000000..237b9cf --- /dev/null +++ b/platform_api_python_client/models/unified_write_inference_v3_deployment_request.py @@ -0,0 +1,277 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from platform_api_python_client.models.backend_protocol import BackendProtocol +from platform_api_python_client.models.config_file_mount import ConfigFileMount +from platform_api_python_client.models.image_pull_secret_credentials import ImagePullSecretCredentials +from platform_api_python_client.models.metrics_config import MetricsConfig +from platform_api_python_client.models.volume_mount import VolumeMount +from typing import Optional, Set +from typing_extensions import Self + +class UnifiedWriteInferenceV3DeploymentRequest(BaseModel): + """ + UnifiedWriteInferenceV3DeploymentRequest + """ # noqa: E501 + max_surge: Optional[StrictInt] = None + max_unavailable: Optional[StrictInt] = None + name: Annotated[str, Field(min_length=1, strict=True, max_length=20)] + cluster_id: StrictInt + hardware_instance_id: StrictInt + user_annotations: Optional[Dict[str, StrictStr]] = None + chart_revision: Optional[StrictStr] = None + volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None + priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + hf_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + image_url: StrictStr + image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + port: Annotated[int, Field(le=65535, strict=True, ge=1)] + min_replicas: StrictInt + max_replicas: StrictInt + concurrency: Optional[StrictInt] = None + cooldown_period: Optional[Annotated[int, Field(le=3600, strict=True, ge=0)]] = None + healthcheck: Optional[StrictStr] = None + env_vars: Optional[Dict[str, StrictStr]] = None + command: Optional[StrictStr] = None + endpoint_bearer_token: Optional[StrictStr] = None + bearer_token_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + endpoint_certificate_authority: Optional[StrictStr] = None + hf_token: Optional[StrictStr] = None + env_vars_refs: Optional[Dict[str, Any]] = None + backend_protocol: Optional[BackendProtocol] = None + enable_logging: Optional[StrictBool] = False + enable_node_model_cache: Optional[StrictBool] = False + session_affinity: Optional[StrictBool] = Field(default=False, description="Enable best-effort sticky routing via the `X-Session-Id` request header. Requests carrying the same header value land on the same pod, improving KV cache reuse for agentic workloads. Requests without the header are routed at random. Affinity is NOT durable: scaling, rollouts, restarts, or readiness-probe transitions will remap sessions to different pods. Do not use for irreplaceable in-pod state.") + config_file: Optional[ConfigFileMount] = None + metrics: Optional[MetricsConfig] = None + type: StrictStr + __properties: ClassVar[List[str]] = ["max_surge", "max_unavailable", "name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "hf_token_ref", "image_url", "image_pull_secret_credentials", "image_pull_ref", "port", "min_replicas", "max_replicas", "concurrency", "cooldown_period", "healthcheck", "env_vars", "command", "endpoint_bearer_token", "bearer_token_ref", "endpoint_certificate_authority", "hf_token", "env_vars_refs", "backend_protocol", "enable_logging", "enable_node_model_cache", "session_affinity", "config_file", "metrics", "type"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z][a-z0-9-]*$", value): + raise ValueError(r"must validate the regular expression /^[a-z][a-z0-9-]*$/") + return value + + @field_validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ccl_inference']): + raise ValueError("must be one of enum values ('ccl_inference')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UnifiedWriteInferenceV3DeploymentRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in volume_mounts (list) + _items = [] + if self.volume_mounts: + for _item_volume_mounts in self.volume_mounts: + if _item_volume_mounts: + _items.append(_item_volume_mounts.to_dict()) + _dict['volume_mounts'] = _items + # override the default output from pydantic by calling `to_dict()` of image_pull_secret_credentials + if self.image_pull_secret_credentials: + _dict['image_pull_secret_credentials'] = self.image_pull_secret_credentials.to_dict() + # override the default output from pydantic by calling `to_dict()` of config_file + if self.config_file: + _dict['config_file'] = self.config_file.to_dict() + # override the default output from pydantic by calling `to_dict()` of metrics + if self.metrics: + _dict['metrics'] = self.metrics.to_dict() + # set to None if max_surge (nullable) is None + # and model_fields_set contains the field + if self.max_surge is None and "max_surge" in self.model_fields_set: + _dict['max_surge'] = None + + # set to None if max_unavailable (nullable) is None + # and model_fields_set contains the field + if self.max_unavailable is None and "max_unavailable" in self.model_fields_set: + _dict['max_unavailable'] = None + + # set to None if user_annotations (nullable) is None + # and model_fields_set contains the field + if self.user_annotations is None and "user_annotations" in self.model_fields_set: + _dict['user_annotations'] = None + + # set to None if priority (nullable) is None + # and model_fields_set contains the field + if self.priority is None and "priority" in self.model_fields_set: + _dict['priority'] = None + + # set to None if hf_token_ref (nullable) is None + # and model_fields_set contains the field + if self.hf_token_ref is None and "hf_token_ref" in self.model_fields_set: + _dict['hf_token_ref'] = None + + # set to None if image_pull_secret_credentials (nullable) is None + # and model_fields_set contains the field + if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: + _dict['image_pull_secret_credentials'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + + # set to None if concurrency (nullable) is None + # and model_fields_set contains the field + if self.concurrency is None and "concurrency" in self.model_fields_set: + _dict['concurrency'] = None + + # set to None if cooldown_period (nullable) is None + # and model_fields_set contains the field + if self.cooldown_period is None and "cooldown_period" in self.model_fields_set: + _dict['cooldown_period'] = None + + # set to None if healthcheck (nullable) is None + # and model_fields_set contains the field + if self.healthcheck is None and "healthcheck" in self.model_fields_set: + _dict['healthcheck'] = None + + # set to None if env_vars (nullable) is None + # and model_fields_set contains the field + if self.env_vars is None and "env_vars" in self.model_fields_set: + _dict['env_vars'] = None + + # set to None if command (nullable) is None + # and model_fields_set contains the field + if self.command is None and "command" in self.model_fields_set: + _dict['command'] = None + + # set to None if endpoint_bearer_token (nullable) is None + # and model_fields_set contains the field + if self.endpoint_bearer_token is None and "endpoint_bearer_token" in self.model_fields_set: + _dict['endpoint_bearer_token'] = None + + # set to None if bearer_token_ref (nullable) is None + # and model_fields_set contains the field + if self.bearer_token_ref is None and "bearer_token_ref" in self.model_fields_set: + _dict['bearer_token_ref'] = None + + # set to None if endpoint_certificate_authority (nullable) is None + # and model_fields_set contains the field + if self.endpoint_certificate_authority is None and "endpoint_certificate_authority" in self.model_fields_set: + _dict['endpoint_certificate_authority'] = None + + # set to None if hf_token (nullable) is None + # and model_fields_set contains the field + if self.hf_token is None and "hf_token" in self.model_fields_set: + _dict['hf_token'] = None + + # set to None if config_file (nullable) is None + # and model_fields_set contains the field + if self.config_file is None and "config_file" in self.model_fields_set: + _dict['config_file'] = None + + # set to None if metrics (nullable) is None + # and model_fields_set contains the field + if self.metrics is None and "metrics" in self.model_fields_set: + _dict['metrics'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UnifiedWriteInferenceV3DeploymentRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "max_surge": obj.get("max_surge"), + "max_unavailable": obj.get("max_unavailable"), + "name": obj.get("name"), + "cluster_id": obj.get("cluster_id"), + "hardware_instance_id": obj.get("hardware_instance_id"), + "user_annotations": obj.get("user_annotations"), + "chart_revision": obj.get("chart_revision"), + "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "priority": obj.get("priority"), + "hf_token_ref": obj.get("hf_token_ref"), + "image_url": obj.get("image_url"), + "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), + "port": obj.get("port"), + "min_replicas": obj.get("min_replicas"), + "max_replicas": obj.get("max_replicas"), + "concurrency": obj.get("concurrency"), + "cooldown_period": obj.get("cooldown_period"), + "healthcheck": obj.get("healthcheck"), + "env_vars": obj.get("env_vars"), + "command": obj.get("command"), + "endpoint_bearer_token": obj.get("endpoint_bearer_token"), + "bearer_token_ref": obj.get("bearer_token_ref"), + "endpoint_certificate_authority": obj.get("endpoint_certificate_authority"), + "hf_token": obj.get("hf_token"), + "env_vars_refs": obj.get("env_vars_refs"), + "backend_protocol": obj.get("backend_protocol"), + "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else False, + "enable_node_model_cache": obj.get("enable_node_model_cache") if obj.get("enable_node_model_cache") is not None else False, + "session_affinity": obj.get("session_affinity") if obj.get("session_affinity") is not None else False, + "config_file": ConfigFileMount.from_dict(obj["config_file"]) if obj.get("config_file") is not None else None, + "metrics": MetricsConfig.from_dict(obj["metrics"]) if obj.get("metrics") is not None else None, + "type": obj.get("type") + }) + return _obj + + diff --git a/platform_api_python_client/models/unified_write_job_deployment_request.py b/platform_api_python_client/models/unified_write_job_deployment_request.py new file mode 100644 index 0000000..546e557 --- /dev/null +++ b/platform_api_python_client/models/unified_write_job_deployment_request.py @@ -0,0 +1,196 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from platform_api_python_client.models.config_file_mount import ConfigFileMount +from platform_api_python_client.models.image_pull_secret_credentials import ImagePullSecretCredentials +from platform_api_python_client.models.volume_mount import VolumeMount +from typing import Optional, Set +from typing_extensions import Self + +class UnifiedWriteJobDeploymentRequest(BaseModel): + """ + UnifiedWriteJobDeploymentRequest + """ # noqa: E501 + name: Annotated[str, Field(min_length=1, strict=True, max_length=20)] + cluster_id: StrictInt + hardware_instance_id: StrictInt + user_annotations: Optional[Dict[str, StrictStr]] = None + chart_revision: Optional[StrictStr] = None + volume_mounts: Optional[Annotated[List[VolumeMount], Field(max_length=10)]] = None + priority: Optional[Annotated[str, Field(strict=True, max_length=253)]] = None + image_url: StrictStr + image_pull_secret_credentials: Optional[ImagePullSecretCredentials] = None + image_pull_ref: Optional[Annotated[int, Field(strict=True, ge=1)]] = None + env_vars: Optional[Dict[str, StrictStr]] = None + env_vars_refs: Optional[Dict[str, Any]] = None + command: Optional[StrictStr] = None + completions: Optional[StrictInt] = 1 + parallelism: Optional[StrictInt] = 1 + backoff_limit: Optional[StrictInt] = 3 + active_deadline_seconds: Optional[StrictInt] = None + enable_logging: Optional[StrictBool] = True + config_file: Optional[ConfigFileMount] = None + type: StrictStr + __properties: ClassVar[List[str]] = ["name", "cluster_id", "hardware_instance_id", "user_annotations", "chart_revision", "volume_mounts", "priority", "image_url", "image_pull_secret_credentials", "image_pull_ref", "env_vars", "env_vars_refs", "command", "completions", "parallelism", "backoff_limit", "active_deadline_seconds", "enable_logging", "config_file", "type"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z][a-z0-9-]*$", value): + raise ValueError(r"must validate the regular expression /^[a-z][a-z0-9-]*$/") + return value + + @field_validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ccl_job']): + raise ValueError("must be one of enum values ('ccl_job')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UnifiedWriteJobDeploymentRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in volume_mounts (list) + _items = [] + if self.volume_mounts: + for _item_volume_mounts in self.volume_mounts: + if _item_volume_mounts: + _items.append(_item_volume_mounts.to_dict()) + _dict['volume_mounts'] = _items + # override the default output from pydantic by calling `to_dict()` of image_pull_secret_credentials + if self.image_pull_secret_credentials: + _dict['image_pull_secret_credentials'] = self.image_pull_secret_credentials.to_dict() + # override the default output from pydantic by calling `to_dict()` of config_file + if self.config_file: + _dict['config_file'] = self.config_file.to_dict() + # set to None if user_annotations (nullable) is None + # and model_fields_set contains the field + if self.user_annotations is None and "user_annotations" in self.model_fields_set: + _dict['user_annotations'] = None + + # set to None if priority (nullable) is None + # and model_fields_set contains the field + if self.priority is None and "priority" in self.model_fields_set: + _dict['priority'] = None + + # set to None if image_pull_secret_credentials (nullable) is None + # and model_fields_set contains the field + if self.image_pull_secret_credentials is None and "image_pull_secret_credentials" in self.model_fields_set: + _dict['image_pull_secret_credentials'] = None + + # set to None if image_pull_ref (nullable) is None + # and model_fields_set contains the field + if self.image_pull_ref is None and "image_pull_ref" in self.model_fields_set: + _dict['image_pull_ref'] = None + + # set to None if env_vars (nullable) is None + # and model_fields_set contains the field + if self.env_vars is None and "env_vars" in self.model_fields_set: + _dict['env_vars'] = None + + # set to None if command (nullable) is None + # and model_fields_set contains the field + if self.command is None and "command" in self.model_fields_set: + _dict['command'] = None + + # set to None if active_deadline_seconds (nullable) is None + # and model_fields_set contains the field + if self.active_deadline_seconds is None and "active_deadline_seconds" in self.model_fields_set: + _dict['active_deadline_seconds'] = None + + # set to None if config_file (nullable) is None + # and model_fields_set contains the field + if self.config_file is None and "config_file" in self.model_fields_set: + _dict['config_file'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UnifiedWriteJobDeploymentRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "name": obj.get("name"), + "cluster_id": obj.get("cluster_id"), + "hardware_instance_id": obj.get("hardware_instance_id"), + "user_annotations": obj.get("user_annotations"), + "chart_revision": obj.get("chart_revision"), + "volume_mounts": [VolumeMount.from_dict(_item) for _item in obj["volume_mounts"]] if obj.get("volume_mounts") is not None else None, + "priority": obj.get("priority"), + "image_url": obj.get("image_url"), + "image_pull_secret_credentials": ImagePullSecretCredentials.from_dict(obj["image_pull_secret_credentials"]) if obj.get("image_pull_secret_credentials") is not None else None, + "image_pull_ref": obj.get("image_pull_ref"), + "env_vars": obj.get("env_vars"), + "env_vars_refs": obj.get("env_vars_refs"), + "command": obj.get("command"), + "completions": obj.get("completions") if obj.get("completions") is not None else 1, + "parallelism": obj.get("parallelism") if obj.get("parallelism") is not None else 1, + "backoff_limit": obj.get("backoff_limit") if obj.get("backoff_limit") is not None else 3, + "active_deadline_seconds": obj.get("active_deadline_seconds"), + "enable_logging": obj.get("enable_logging") if obj.get("enable_logging") is not None else True, + "config_file": ConfigFileMount.from_dict(obj["config_file"]) if obj.get("config_file") is not None else None, + "type": obj.get("type") + }) + return _obj + + diff --git a/platform_api_python_client/models/upsert_user_vault_item_request.py b/platform_api_python_client/models/upsert_user_vault_item_request.py index 7d2705b..3b552d8 100644 --- a/platform_api_python_client/models/upsert_user_vault_item_request.py +++ b/platform_api_python_client/models/upsert_user_vault_item_request.py @@ -27,7 +27,7 @@ class UpsertUserVaultItemRequest(BaseModel): """ - Write model for PUT /user_vault, where the key and value rules are enforced. + Create an immutable secret via PUT /user_vault; existing keys return 409. The schema name is retained for SDK compatibility. Secrets cannot be updated. """ # noqa: E501 id: Optional[Annotated[int, Field(strict=True, ge=1)]] = None type: UserVaultType diff --git a/platform_api_python_client/models/usage_availability.py b/platform_api_python_client/models/usage_availability.py new file mode 100644 index 0000000..d057940 --- /dev/null +++ b/platform_api_python_client/models/usage_availability.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class UsageAvailability(str, Enum): + """ + UsageAvailability + """ + + """ + allowed enum values + """ + AVAILABLE = 'available' + NO_TRAFFIC = 'no_traffic' + UNAVAILABLE = 'unavailable' + STALE = 'stale' + PARTIAL = 'partial' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of UsageAvailability from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/platform_api_python_client/models/usage_component.py b/platform_api_python_client/models/usage_component.py new file mode 100644 index 0000000..8d6114a --- /dev/null +++ b/platform_api_python_client/models/usage_component.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class UsageComponent(str, Enum): + """ + UsageComponent + """ + + """ + allowed enum values + """ + FRONTEND = 'frontend' + WORKER = 'worker' + PREFILL = 'prefill' + DECODE = 'decode' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of UsageComponent from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyproject.toml b/pyproject.toml index 398f427..fd0dd46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "platform_api_python_client" -version = "4.32.0" +version = "4.33.0" description = "Platform External API" authors = ["OpenAPI Generator Community "] license = "NoLicense" diff --git a/setup.py b/setup.py index 2e7ccdc..19a68d2 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools NAME = "platform-api-python-client" -VERSION = "4.32.0" +VERSION = "4.33.0" PYTHON_REQUIRES = ">= 3.8" REQUIRES = [ "urllib3 >= 1.25.3, < 3.0.0", diff --git a/test/test_c_serve_recipe_perf.py b/test/test_c_serve_recipe_perf.py index 6eed193..04920b8 100644 --- a/test/test_c_serve_recipe_perf.py +++ b/test/test_c_serve_recipe_perf.py @@ -35,7 +35,9 @@ def make_instance(self, include_optional) -> CServeRecipePerf: model = CServeRecipePerf() if include_optional: return CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -50,7 +52,9 @@ def make_instance(self, include_optional) -> CServeRecipePerf: ) else: return CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ diff --git a/test/test_c_serve_recipe_response.py b/test/test_c_serve_recipe_response.py index 9459e7a..3c70636 100644 --- a/test/test_c_serve_recipe_response.py +++ b/test/test_c_serve_recipe_response.py @@ -37,7 +37,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: return CServeRecipeResponse( model = '', fastest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -50,7 +52,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: ] ], ), cheapest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -63,7 +67,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: ] ], ), best_value = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -80,7 +86,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: return CServeRecipeResponse( model = '', fastest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -93,7 +101,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: ] ], ), cheapest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -106,7 +116,9 @@ def make_instance(self, include_optional) -> CServeRecipeResponse: ] ], ), best_value = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ diff --git a/test/test_create_c_serve_v3_deployment_request.py b/test/test_create_c_serve_v3_deployment_request.py index e06e1d8..fa89e60 100644 --- a/test/test_create_c_serve_v3_deployment_request.py +++ b/test/test_create_c_serve_v3_deployment_request.py @@ -51,18 +51,23 @@ def make_instance(self, include_optional) -> CreateCServeV3DeploymentRequest: read_only = True, ) ], priority = '', - recipe = { }, + hf_token_ref = 1.0, + recipe = { + 'key' : null + }, cserve_version = '', hf_token = '', endpoint_bearer_token = '', + bearer_token_ref = 1.0, endpoint_certificate_authority = '', min_replicas = 56, max_replicas = 56, concurrency = 56, - cooldown_period = 56, + cooldown_period = 0.0, env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), enable_logging = True, enable_node_model_cache = True, session_affinity = True @@ -72,7 +77,9 @@ def make_instance(self, include_optional) -> CreateCServeV3DeploymentRequest: name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', cluster_id = 56, hardware_instance_id = 56, - recipe = { }, + recipe = { + 'key' : null + }, min_replicas = 56, max_replicas = 56, ) diff --git a/test/test_create_compute_deployment_request.py b/test/test_create_compute_deployment_request.py index ff749f8..6fc5449 100644 --- a/test/test_create_compute_deployment_request.py +++ b/test/test_create_compute_deployment_request.py @@ -53,6 +53,8 @@ def make_instance(self, include_optional) -> CreateComputeDeploymentRequest: image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + image_pull_ref = 1.0, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), ssh_public_key = '', enable_logging = True ) diff --git a/test/test_create_dynamo_deployment_request.py b/test/test_create_dynamo_deployment_request.py index ec00598..d0f907e 100644 --- a/test/test_create_dynamo_deployment_request.py +++ b/test/test_create_dynamo_deployment_request.py @@ -52,8 +52,25 @@ def make_instance(self, include_optional) -> CreateDynamoDeploymentRequest: ], priority = '', serving_mode = 'aggregated', - worker_pools = { }, - communications = { }, + worker_pools = platform_api_python_client.models.dynamo_worker_pools.DynamoWorkerPools( + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = , ), + communications = platform_api_python_client.models.dynamo_communications.DynamoCommunications( + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ), model = '', served_model_name = '', runtime_version = 'e6bUUGjjNSwg0_bs9ZayIMrKdgNvb6gvxmPb9GcsM61ate1RA89q3w1l4eH4XxEz.5awxoFZxHzs6ED.kjUSnTINkYPUndNl8pmPg5K897Fu1JEFj9R1_dz9rEoBi0L', @@ -63,11 +80,15 @@ def make_instance(self, include_optional) -> CreateDynamoDeploymentRequest: cooldown_period = 56, extra_args = '', hf_token = '', + hf_token_ref = 1.0, env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), endpoint_bearer_token = '', + bearer_token_ref = 1.0, endpoint_certificate_authority = '', + image_pull_ref = 1.0, enable_logging = True, enable_node_model_cache = True, backend_protocol = 'HTTP' diff --git a/test/test_create_inference_v3_deployment_request.py b/test/test_create_inference_v3_deployment_request.py index e53c903..f51ed92 100644 --- a/test/test_create_inference_v3_deployment_request.py +++ b/test/test_create_inference_v3_deployment_request.py @@ -51,23 +51,27 @@ def make_instance(self, include_optional) -> CreateInferenceV3DeploymentRequest: read_only = True, ) ], priority = '', + hf_token_ref = 1.0, image_url = '', image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + image_pull_ref = 1.0, port = 1.0, min_replicas = 56, max_replicas = 56, concurrency = 56, - cooldown_period = 56, + cooldown_period = 0.0, healthcheck = '', env_vars = { 'key' : '' }, command = '', endpoint_bearer_token = '', + bearer_token_ref = 1.0, endpoint_certificate_authority = '', hf_token = '', + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), backend_protocol = 'HTTP', enable_logging = True, enable_node_model_cache = True, diff --git a/test/test_create_job_deployment_request.py b/test/test_create_job_deployment_request.py index e89f52f..0743c85 100644 --- a/test/test_create_job_deployment_request.py +++ b/test/test_create_job_deployment_request.py @@ -53,9 +53,11 @@ def make_instance(self, include_optional) -> CreateJobDeploymentRequest: image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + image_pull_ref = 1.0, env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), command = '', completions = 56, parallelism = 56, diff --git a/test/test_deployment_response.py b/test/test_deployment_response.py index df30a8c..debe1b3 100644 --- a/test/test_deployment_response.py +++ b/test/test_deployment_response.py @@ -57,9 +57,27 @@ def make_instance(self, include_optional) -> DeploymentResponse: mount_path = '0', read_only = True, ) ], + hf_token_ref = 1.0, serving_mode = 'aggregated', - worker_pools = { }, - communications = { }, + worker_pools = platform_api_python_client.models.dynamo_worker_pools.DynamoWorkerPools( + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = , ), + communications = platform_api_python_client.models.dynamo_communications.DynamoCommunications( + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ), model = '', served_model_name = '', runtime_version = '', @@ -71,12 +89,17 @@ def make_instance(self, include_optional) -> DeploymentResponse: env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), endpoint_certificate_authority = '', endpoint_bearer_token = '', + bearer_token_ref = 1.0, + image_pull_ref = 1.0, enable_logging = True, enable_node_model_cache = True, backend_protocol = 'HTTP', - recipe = { }, + recipe = { + 'key' : null + }, cserve_version = '', session_affinity = True, container_port = 56, @@ -124,7 +147,9 @@ def make_instance(self, include_optional) -> DeploymentResponse: model = '', min_replicas = 56, max_replicas = 56, - recipe = { }, + recipe = { + 'key' : null + }, container_port = 56, exposed_port = 56, ) diff --git a/test/test_dynamo_communications_input.py b/test/test_dynamo_communications_input.py index 0ec0b8a..8de64be 100644 --- a/test/test_dynamo_communications_input.py +++ b/test/test_dynamo_communications_input.py @@ -35,11 +35,13 @@ def make_instance(self, include_optional) -> DynamoCommunicationsInput: model = DynamoCommunicationsInput() if include_optional: return DynamoCommunicationsInput( - kv_transfer = { } + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ) ) else: return DynamoCommunicationsInput( - kv_transfer = { }, + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ) """ diff --git a/test/test_dynamo_communications_output.py b/test/test_dynamo_communications_output.py index 091b170..35f500c 100644 --- a/test/test_dynamo_communications_output.py +++ b/test/test_dynamo_communications_output.py @@ -35,11 +35,13 @@ def make_instance(self, include_optional) -> DynamoCommunicationsOutput: model = DynamoCommunicationsOutput() if include_optional: return DynamoCommunicationsOutput( - kv_transfer = { } + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ) ) else: return DynamoCommunicationsOutput( - kv_transfer = { }, + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ) """ diff --git a/test/test_dynamo_worker_pools.py b/test/test_dynamo_worker_pools.py index 30d7b93..f732de0 100644 --- a/test/test_dynamo_worker_pools.py +++ b/test/test_dynamo_worker_pools.py @@ -35,9 +35,27 @@ def make_instance(self, include_optional) -> DynamoWorkerPools: model = DynamoWorkerPools() if include_optional: return DynamoWorkerPools( - worker = { }, - prefill = { }, - decode = { } + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ) ) else: return DynamoWorkerPools( diff --git a/test/test_external_api.py b/test/test_external_api.py index 8c88235..3684eec 100644 --- a/test/test_external_api.py +++ b/test/test_external_api.py @@ -103,6 +103,13 @@ def test_create_service_account_service_accounts_post(self) -> None: """ pass + def test_create_unified_deployment_deployments_post(self) -> None: + """Test case for create_unified_deployment_deployments_post + + Create Unified Deployment + """ + pass + def test_create_volume_endpoint_volumes_post(self) -> None: """Test case for create_volume_endpoint_volumes_post diff --git a/test/test_get_c_serve_v2_deployment_response.py b/test/test_get_c_serve_v2_deployment_response.py index 0204a8d..ede2ead 100644 --- a/test/test_get_c_serve_v2_deployment_response.py +++ b/test/test_get_c_serve_v2_deployment_response.py @@ -57,7 +57,9 @@ def make_instance(self, include_optional) -> GetCServeV2DeploymentResponse: mount_path = '0', read_only = True, ) ], - recipe = { }, + recipe = { + 'key' : null + }, cserve_version = '', min_scale = 56, max_scale = 56, @@ -81,7 +83,9 @@ def make_instance(self, include_optional) -> GetCServeV2DeploymentResponse: created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), hardware_instance_id = 56, revision_number = 56, - recipe = { }, + recipe = { + 'key' : null + }, min_scale = 56, max_scale = 56, ) diff --git a/test/test_get_c_serve_v3_deployment_response.py b/test/test_get_c_serve_v3_deployment_response.py index 8661367..a4de92b 100644 --- a/test/test_get_c_serve_v3_deployment_response.py +++ b/test/test_get_c_serve_v3_deployment_response.py @@ -57,7 +57,10 @@ def make_instance(self, include_optional) -> GetCServeV3DeploymentResponse: mount_path = '0', read_only = True, ) ], - recipe = { }, + hf_token_ref = 1.0, + recipe = { + 'key' : null + }, cserve_version = '', min_replicas = 56, max_replicas = 56, @@ -68,6 +71,8 @@ def make_instance(self, include_optional) -> GetCServeV3DeploymentResponse: env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + bearer_token_ref = 1.0, enable_logging = True, enable_node_model_cache = True, session_affinity = True @@ -84,7 +89,9 @@ def make_instance(self, include_optional) -> GetCServeV3DeploymentResponse: created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), hardware_instance_id = 56, revision_number = 56, - recipe = { }, + recipe = { + 'key' : null + }, min_replicas = 56, max_replicas = 56, ) diff --git a/test/test_get_cluster_response.py b/test/test_get_cluster_response.py index f3a33cb..17bf895 100644 --- a/test/test_get_cluster_response.py +++ b/test/test_get_cluster_response.py @@ -39,13 +39,15 @@ def make_instance(self, include_optional) -> GetClusterResponse: cluster_name = '', display_name = '', region = '', - deployment_creation_disabled = True + deployment_creation_disabled = True, + managed_by_ccluster = True ) else: return GetClusterResponse( id = 56, cluster_name = '', display_name = '', + managed_by_ccluster = True, ) """ diff --git a/test/test_get_compute_deployment_response.py b/test/test_get_compute_deployment_response.py index b589de0..4fb1d43 100644 --- a/test/test_get_compute_deployment_response.py +++ b/test/test_get_compute_deployment_response.py @@ -66,6 +66,8 @@ def make_instance(self, include_optional) -> GetComputeDeploymentResponse: image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + image_pull_ref = 1.0, enable_logging = True ) else: diff --git a/test/test_get_deployment_log_response.py b/test/test_get_deployment_log_response.py index 7aa764b..afbb0e4 100644 --- a/test/test_get_deployment_log_response.py +++ b/test/test_get_deployment_log_response.py @@ -36,14 +36,14 @@ def make_instance(self, include_optional) -> GetDeploymentLogResponse: if include_optional: return GetDeploymentLogResponse( events = [ - { } + None ], next_page_token = '' ) else: return GetDeploymentLogResponse( events = [ - { } + None ], ) """ diff --git a/test/test_get_deployment_usage_response.py b/test/test_get_deployment_usage_response.py index 36ac8d2..4a5d289 100644 --- a/test/test_get_deployment_usage_response.py +++ b/test/test_get_deployment_usage_response.py @@ -45,7 +45,9 @@ def make_instance(self, include_optional) -> GetDeploymentUsageResponse: timestamp = 56, value = 1.337, ) ], ) - ] + ], + availability = 'available', + last_sample_at = 56 ) else: return GetDeploymentUsageResponse( diff --git a/test/test_get_dynamo_deployment_response.py b/test/test_get_dynamo_deployment_response.py index 2a2aca1..86197a9 100644 --- a/test/test_get_dynamo_deployment_response.py +++ b/test/test_get_dynamo_deployment_response.py @@ -57,9 +57,27 @@ def make_instance(self, include_optional) -> GetDynamoDeploymentResponse: mount_path = '0', read_only = True, ) ], + hf_token_ref = 1.0, serving_mode = 'aggregated', - worker_pools = { }, - communications = { }, + worker_pools = platform_api_python_client.models.dynamo_worker_pools.DynamoWorkerPools( + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = , ), + communications = platform_api_python_client.models.dynamo_communications.DynamoCommunications( + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ), model = '', served_model_name = '', runtime_version = '', @@ -71,8 +89,11 @@ def make_instance(self, include_optional) -> GetDynamoDeploymentResponse: env_vars = { 'key' : '' }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), endpoint_certificate_authority = '', endpoint_bearer_token = '', + bearer_token_ref = 1.0, + image_pull_ref = 1.0, enable_logging = True, enable_node_model_cache = True, backend_protocol = 'HTTP' diff --git a/test/test_get_inference_v3_deployment_response.py b/test/test_get_inference_v3_deployment_response.py index ede916c..9a8ec12 100644 --- a/test/test_get_inference_v3_deployment_response.py +++ b/test/test_get_inference_v3_deployment_response.py @@ -57,6 +57,7 @@ def make_instance(self, include_optional) -> GetInferenceV3DeploymentResponse: mount_path = '0', read_only = True, ) ], + hf_token_ref = 1.0, container_port = 56, min_replicas = 56, max_replicas = 56, @@ -78,6 +79,9 @@ def make_instance(self, include_optional) -> GetInferenceV3DeploymentResponse: image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + bearer_token_ref = 1.0, + image_pull_ref = 1.0, backend_protocol = 'HTTP', enable_logging = True, enable_node_model_cache = True, diff --git a/test/test_get_job_deployment_response.py b/test/test_get_job_deployment_response.py index 55d5cff..7fcdff2 100644 --- a/test/test_get_job_deployment_response.py +++ b/test/test_get_job_deployment_response.py @@ -74,6 +74,8 @@ def make_instance(self, include_optional) -> GetJobDeploymentResponse: image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( username = '', password = '', ), + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + image_pull_ref = 1.0, enable_logging = True, config_file = platform_api_python_client.models.config_file_mount.ConfigFileMount( filename = '20', diff --git a/test/test_list_c_serve_recipe_response.py b/test/test_list_c_serve_recipe_response.py index 96fe2c9..8ad2e7b 100644 --- a/test/test_list_c_serve_recipe_response.py +++ b/test/test_list_c_serve_recipe_response.py @@ -39,7 +39,9 @@ def make_instance(self, include_optional) -> ListCServeRecipeResponse: platform_api_python_client.models.c_serve_recipe_response.CServeRecipeResponse( model = '', fastest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -52,7 +54,9 @@ def make_instance(self, include_optional) -> ListCServeRecipeResponse: ] ], ), cheapest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -73,7 +77,9 @@ def make_instance(self, include_optional) -> ListCServeRecipeResponse: platform_api_python_client.models.c_serve_recipe_response.CServeRecipeResponse( model = '', fastest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ @@ -86,7 +92,9 @@ def make_instance(self, include_optional) -> ListCServeRecipeResponse: ] ], ), cheapest = platform_api_python_client.models.c_serve_recipe_perf.CServeRecipePerf( - recipe = { }, + recipe = { + 'key' : null + }, hardware_instance_id = 56, output_tp = [ [ diff --git a/test/test_list_get_cluster_response.py b/test/test_list_get_cluster_response.py index e22d089..e34f222 100644 --- a/test/test_list_get_cluster_response.py +++ b/test/test_list_get_cluster_response.py @@ -41,7 +41,8 @@ def make_instance(self, include_optional) -> ListGetClusterResponse: cluster_name = '', display_name = '', region = '', - deployment_creation_disabled = True, ) + deployment_creation_disabled = True, + managed_by_ccluster = True, ) ] ) else: @@ -52,7 +53,8 @@ def make_instance(self, include_optional) -> ListGetClusterResponse: cluster_name = '', display_name = '', region = '', - deployment_creation_disabled = True, ) + deployment_creation_disabled = True, + managed_by_ccluster = True, ) ], ) """ diff --git a/test/test_unified_write_compute_deployment_request.py b/test/test_unified_write_compute_deployment_request.py new file mode 100644 index 0000000..c2b149b --- /dev/null +++ b/test/test_unified_write_compute_deployment_request.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_compute_deployment_request import UnifiedWriteComputeDeploymentRequest + +class TestUnifiedWriteComputeDeploymentRequest(unittest.TestCase): + """UnifiedWriteComputeDeploymentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteComputeDeploymentRequest: + """Test UnifiedWriteComputeDeploymentRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteComputeDeploymentRequest` + """ + model = UnifiedWriteComputeDeploymentRequest() + if include_optional: + return UnifiedWriteComputeDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + user_annotations = { + 'key' : '' + }, + chart_revision = '', + volume_mounts = [ + platform_api_python_client.models.volume_mount.VolumeMount( + volume_id = 56, + mount_path = '0', + read_only = True, ) + ], + priority = '', + image_url = '', + image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( + username = '', + password = '', ), + image_pull_ref = 1.0, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + ssh_public_key = '', + enable_logging = True, + type = 'ccl_compute' + ) + else: + return UnifiedWriteComputeDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + image_url = '', + ssh_public_key = '', + type = 'ccl_compute', + ) + """ + + def testUnifiedWriteComputeDeploymentRequest(self): + """Test UnifiedWriteComputeDeploymentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_unified_write_deployment_request.py b/test/test_unified_write_deployment_request.py new file mode 100644 index 0000000..680a576 --- /dev/null +++ b/test/test_unified_write_deployment_request.py @@ -0,0 +1,138 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_deployment_request import UnifiedWriteDeploymentRequest + +class TestUnifiedWriteDeploymentRequest(unittest.TestCase): + """UnifiedWriteDeploymentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteDeploymentRequest: + """Test UnifiedWriteDeploymentRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteDeploymentRequest` + """ + model = UnifiedWriteDeploymentRequest() + if include_optional: + return UnifiedWriteDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + user_annotations = { + 'key' : '' + }, + chart_revision = '', + volume_mounts = [ + platform_api_python_client.models.volume_mount.VolumeMount( + volume_id = 56, + mount_path = '0', + read_only = True, ) + ], + priority = '', + image_url = '', + image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( + username = '', + password = '', ), + image_pull_ref = 1.0, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + ssh_public_key = '', + enable_logging = True, + type = 'ccl_compute', + max_surge = 56, + max_unavailable = 56, + hf_token_ref = 1.0, + port = 1.0, + min_replicas = 56, + max_replicas = 56, + concurrency = 56, + cooldown_period = 56, + healthcheck = '', + env_vars = { + 'key' : '' + }, + command = '', + endpoint_bearer_token = '', + bearer_token_ref = 1.0, + endpoint_certificate_authority = '', + hf_token = '', + backend_protocol = 'HTTP', + enable_node_model_cache = True, + session_affinity = True, + config_file = platform_api_python_client.models.config_file_mount.ConfigFileMount( + filename = '20', + mount_path = '0', + content = '0', ), + metrics = platform_api_python_client.models.metrics_config.MetricsConfig( + port = 1.0, + path = '/W(,j>6>eow3jCO&}nl`:&~', ), + serving_mode = 'aggregated', + worker_pools = platform_api_python_client.models.dynamo_worker_pools.DynamoWorkerPools( + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = , ), + communications = platform_api_python_client.models.dynamo_communications.DynamoCommunications( + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ), + model = '', + served_model_name = '', + runtime_version = 'e6bUUGjjNSwg0_bs9ZayIMrKdgNvb6gvxmPb9GcsM61ate1RA89q3w1l4eH4XxEz.5awxoFZxHzs6ED.kjUSnTINkYPUndNl8pmPg5K897Fu1JEFj9R1_dz9rEoBi0L', + extra_args = '', + completions = 56, + parallelism = 56, + backoff_limit = 56, + active_deadline_seconds = 56 + ) + else: + return UnifiedWriteDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + image_url = '', + ssh_public_key = '', + type = 'ccl_compute', + port = 1.0, + min_replicas = 56, + max_replicas = 56, + model = '', + ) + """ + + def testUnifiedWriteDeploymentRequest(self): + """Test UnifiedWriteDeploymentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_unified_write_deployment_response.py b/test/test_unified_write_deployment_response.py new file mode 100644 index 0000000..cef559e --- /dev/null +++ b/test/test_unified_write_deployment_response.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_deployment_response import UnifiedWriteDeploymentResponse + +class TestUnifiedWriteDeploymentResponse(unittest.TestCase): + """UnifiedWriteDeploymentResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteDeploymentResponse: + """Test UnifiedWriteDeploymentResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteDeploymentResponse` + """ + model = UnifiedWriteDeploymentResponse() + if include_optional: + return UnifiedWriteDeploymentResponse( + id = 56, + type = 'inference', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + endpoint_url = '', + port = 56 + ) + else: + return UnifiedWriteDeploymentResponse( + id = 56, + type = 'inference', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + endpoint_url = '', + port = 56, + ) + """ + + def testUnifiedWriteDeploymentResponse(self): + """Test UnifiedWriteDeploymentResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_unified_write_dynamo_deployment_request.py b/test/test_unified_write_dynamo_deployment_request.py new file mode 100644 index 0000000..98d3094 --- /dev/null +++ b/test/test_unified_write_dynamo_deployment_request.py @@ -0,0 +1,112 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_dynamo_deployment_request import UnifiedWriteDynamoDeploymentRequest + +class TestUnifiedWriteDynamoDeploymentRequest(unittest.TestCase): + """UnifiedWriteDynamoDeploymentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteDynamoDeploymentRequest: + """Test UnifiedWriteDynamoDeploymentRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteDynamoDeploymentRequest` + """ + model = UnifiedWriteDynamoDeploymentRequest() + if include_optional: + return UnifiedWriteDynamoDeploymentRequest( + max_surge = 56, + max_unavailable = 56, + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + user_annotations = { + 'key' : '' + }, + chart_revision = '', + volume_mounts = [ + platform_api_python_client.models.volume_mount.VolumeMount( + volume_id = 56, + mount_path = '0', + read_only = True, ) + ], + priority = '', + serving_mode = 'aggregated', + worker_pools = platform_api_python_client.models.dynamo_worker_pools.DynamoWorkerPools( + worker = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + prefill = platform_api_python_client.models.dynamo_worker_pool_config.DynamoWorkerPoolConfig( + hardware_instance_id = 56, + replicas = 1.0, + min_replicas = 1.0, + max_replicas = 1.0, + concurrency = 1.0, + cooldown_period = 0.0, ), + decode = , ), + communications = platform_api_python_client.models.dynamo_communications.DynamoCommunications( + kv_transfer = platform_api_python_client.models.dynamo_kv_transfer_configuration.DynamoKvTransferConfiguration( + policy = 'allow_tcp', ), ), + model = '', + served_model_name = '', + runtime_version = 'e6bUUGjjNSwg0_bs9ZayIMrKdgNvb6gvxmPb9GcsM61ate1RA89q3w1l4eH4XxEz.5awxoFZxHzs6ED.kjUSnTINkYPUndNl8pmPg5K897Fu1JEFj9R1_dz9rEoBi0L', + min_replicas = 56, + max_replicas = 56, + concurrency = 56, + cooldown_period = 56, + extra_args = '', + hf_token = '', + hf_token_ref = 1.0, + env_vars = { + 'key' : '' + }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + endpoint_bearer_token = '', + bearer_token_ref = 1.0, + endpoint_certificate_authority = '', + image_pull_ref = 1.0, + enable_logging = True, + enable_node_model_cache = True, + backend_protocol = 'HTTP', + type = 'ccl_dynamo' + ) + else: + return UnifiedWriteDynamoDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + model = '', + type = 'ccl_dynamo', + ) + """ + + def testUnifiedWriteDynamoDeploymentRequest(self): + """Test UnifiedWriteDynamoDeploymentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_unified_write_inference_v3_deployment_request.py b/test/test_unified_write_inference_v3_deployment_request.py new file mode 100644 index 0000000..c79f43d --- /dev/null +++ b/test/test_unified_write_inference_v3_deployment_request.py @@ -0,0 +1,107 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_inference_v3_deployment_request import UnifiedWriteInferenceV3DeploymentRequest + +class TestUnifiedWriteInferenceV3DeploymentRequest(unittest.TestCase): + """UnifiedWriteInferenceV3DeploymentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteInferenceV3DeploymentRequest: + """Test UnifiedWriteInferenceV3DeploymentRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteInferenceV3DeploymentRequest` + """ + model = UnifiedWriteInferenceV3DeploymentRequest() + if include_optional: + return UnifiedWriteInferenceV3DeploymentRequest( + max_surge = 56, + max_unavailable = 56, + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + user_annotations = { + 'key' : '' + }, + chart_revision = '', + volume_mounts = [ + platform_api_python_client.models.volume_mount.VolumeMount( + volume_id = 56, + mount_path = '0', + read_only = True, ) + ], + priority = '', + hf_token_ref = 1.0, + image_url = '', + image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( + username = '', + password = '', ), + image_pull_ref = 1.0, + port = 1.0, + min_replicas = 56, + max_replicas = 56, + concurrency = 56, + cooldown_period = 0.0, + healthcheck = '', + env_vars = { + 'key' : '' + }, + command = '', + endpoint_bearer_token = '', + bearer_token_ref = 1.0, + endpoint_certificate_authority = '', + hf_token = '', + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + backend_protocol = 'HTTP', + enable_logging = True, + enable_node_model_cache = True, + session_affinity = True, + config_file = platform_api_python_client.models.config_file_mount.ConfigFileMount( + filename = '20', + mount_path = '0', + content = '0', ), + metrics = platform_api_python_client.models.metrics_config.MetricsConfig( + port = 1.0, + path = '/W(,j>6>eow3jCO&}nl`:&~', ), + type = 'ccl_inference' + ) + else: + return UnifiedWriteInferenceV3DeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + image_url = '', + port = 1.0, + min_replicas = 56, + max_replicas = 56, + type = 'ccl_inference', + ) + """ + + def testUnifiedWriteInferenceV3DeploymentRequest(self): + """Test UnifiedWriteInferenceV3DeploymentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_unified_write_job_deployment_request.py b/test/test_unified_write_job_deployment_request.py new file mode 100644 index 0000000..4ec1b13 --- /dev/null +++ b/test/test_unified_write_job_deployment_request.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.unified_write_job_deployment_request import UnifiedWriteJobDeploymentRequest + +class TestUnifiedWriteJobDeploymentRequest(unittest.TestCase): + """UnifiedWriteJobDeploymentRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UnifiedWriteJobDeploymentRequest: + """Test UnifiedWriteJobDeploymentRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UnifiedWriteJobDeploymentRequest` + """ + model = UnifiedWriteJobDeploymentRequest() + if include_optional: + return UnifiedWriteJobDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + user_annotations = { + 'key' : '' + }, + chart_revision = '', + volume_mounts = [ + platform_api_python_client.models.volume_mount.VolumeMount( + volume_id = 56, + mount_path = '0', + read_only = True, ) + ], + priority = '', + image_url = '', + image_pull_secret_credentials = platform_api_python_client.models.image_pull_secret_credentials.ImagePullSecretCredentials( + username = '', + password = '', ), + image_pull_ref = 1.0, + env_vars = { + 'key' : '' + }, + env_vars_refs = platform_api_python_client.models.env_vars_refs.Env Vars Refs(), + command = '', + completions = 56, + parallelism = 56, + backoff_limit = 56, + active_deadline_seconds = 56, + enable_logging = True, + config_file = platform_api_python_client.models.config_file_mount.ConfigFileMount( + filename = '20', + mount_path = '0', + content = '0', ), + type = 'ccl_job' + ) + else: + return UnifiedWriteJobDeploymentRequest( + name = 'ar1c2v7s6djuy1zmetozkhdomha1b0', + cluster_id = 56, + hardware_instance_id = 56, + image_url = '', + type = 'ccl_job', + ) + """ + + def testUnifiedWriteJobDeploymentRequest(self): + """Test UnifiedWriteJobDeploymentRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_usage_availability.py b/test/test_usage_availability.py new file mode 100644 index 0000000..2ad1cab --- /dev/null +++ b/test/test_usage_availability.py @@ -0,0 +1,33 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.usage_availability import UsageAvailability + +class TestUsageAvailability(unittest.TestCase): + """UsageAvailability unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUsageAvailability(self): + """Test UsageAvailability""" + # inst = UsageAvailability() + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_usage_component.py b/test/test_usage_component.py new file mode 100644 index 0000000..207fac4 --- /dev/null +++ b/test/test_usage_component.py @@ -0,0 +1,33 @@ +# coding: utf-8 + +""" + Platform External API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from platform_api_python_client.models.usage_component import UsageComponent + +class TestUsageComponent(unittest.TestCase): + """UsageComponent unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUsageComponent(self): + """Test UsageComponent""" + # inst = UsageComponent() + +if __name__ == '__main__': + unittest.main()