Model names map onto Kubernetes objects, and must be DNS compliant. The strings for model names must be lower case ASCII alpha-numeric characters or dash (-) only. .
and _
are not allowed.
The Wallaroo MLOps API allows users to upload different types of ML models and frameworks into Wallaroo.
See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations
/v1/api/models/list
Returns a list of models added to a specific workspace.
Field | Type | Description |
---|---|---|
workspace_id | Integer (REQUIRED) | The workspace id to list. |
Field | Type | Description | |
---|---|---|---|
models | List[models] | List of models in the workspace. | |
id | Integer | The numerical id of the model. | |
**owner_id | String | Identifer of the model owner. | |
created_at | String | DateTime of the model’s creation. | |
updated_at | String | DateTime of the model’s last update. |
Display the models for the workspace. This is assumed to be workspace_id of 10
. Adjust the script for your own use.
List models in workspace via Requests.
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/list"
data = {
"workspace_id": workspace_id
}
response = requests.post(endpoint,
json=data,
headers=headers,
verify=True).json()
display(response)
{
"models": [
{
"id": 15,
"name": "api-upload-pytorch-multi-io",
"owner_id": "\"\"",
"created_at": "2023-11-29T16:30:53.716526+00:00",
"updated_at": "2023-11-29T18:20:39.610964+00:00"
},
{
"id": 14,
"name": "api-sample-model",
"owner_id": "\"\"",
"created_at": "2023-11-29T16:26:06.011817+00:00",
"updated_at": "2023-11-29T16:26:06.011817+00:00"
}
]
}
List models in workspace via curl.
curl {wl.api_endpoint}/v1/api/models/list \
-H "Authorization: {wl.auth.auth_header()['Authorization']}" \
-H "Content-Type: application/json" \
--data '{{"workspace_id": {workspace_id}}}'
{
"models": [
{
"id": 15,
"name": "api-upload-pytorch-multi-io",
"owner_id": "\"\"",
"created_at": "2023-11-29T16:30:53.716526+00:00",
"updated_at": "2023-11-29T18:20:39.610964+00:00"
},
{
"id": 14,
"name": "api-sample-model",
"owner_id": "\"\"",
"created_at": "2023-11-29T16:26:06.011817+00:00",
"updated_at": "2023-11-29T16:26:06.011817+00:00"
}
]
}
/v1/api/models/get_by_id
Returns the model details by the specific model id.
Field | Type | Description |
---|---|---|
workspace_id | Integer (REQUIRED) | The workspace id to list. |
Field | Type | Description |
---|---|---|
id | Integer | Numerical id of the model. |
owner_id | String | Id of the owner of the model. |
workspace_id | Integer | Numerical of the id the model is in. |
name | String | Name of the model. |
updated_at | String | DateTime of the model’s last update. |
created_at | String | DateTime of the model’s creation. |
model_config | String | Details of the model’s configuration. |
Model version configurations are updated with the wallaroo.model_version.config
and include the following parameters. Most are optional unless specified.
Parameter | Type | Description |
---|---|---|
runtime | String (Optional) | The model runtime from wallaroo.framework. } |
tensor_fields | (List[string]) (Optional) | A list of alternate input fields. For example, if the model accepts the input fields ['variable1', 'variable2'] , tensor_fields allows those inputs to be overridden to ['square_feet', 'house_age'] , or other values as required. |
input_schema | pyarrow.lib.Schema | The input schema for the model in pyarrow.lib.Schema format. |
output_schema | pyarrow.lib.Schema | The output schema for the model in pyarrow.lib.Schema format. |
batch_config | (List[string]) (Optional) | Batch config is either None for multiple-input inferences, or single to accept an inference request with only one row of data. |
Retrieve the details for the model uploaded in the Upload Model to Workspace step. This will first list the models in the workspace with the id 10
, then use that first model to display information. This assumes the workspace id and that there is at least one model uploaded to it.
Get Model Details By ID via Requests.
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/list"
data = {
"workspace_id": workspace_id
}
# first get the list of models in the workspace
response = requests.post(endpoint,
json=data,
headers=headers,
verify=True).json()
example_model_id = response['models'][0]['id']
example_model_name = response['models'][0]['name']
# Get model details by id
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/get_by_id"
data = {
"id": example_model_id
}
response = requests.post(endpoint, json=data, headers=headers, verify=True).json()
display(response)
{
'id': 15,
'owner_id': '""',
'workspace_id': 10,
'name': 'api-upload-pytorch-multi-io',
'updated_at': '2023-11-29T18:20:39.610964+00:00',
'created_at': '2023-11-29T16:30:53.716526+00:00',
'model_config': {
'id': 25,
'runtime': 'flight',
'tensor_fields': None,
'filter_threshold': None
}
}
Get Model Details By ID via curl.
curl {wl.api_endpoint}/v1/api/models/get_by_id \
-H "Authorization: {wl.auth.auth_header()['Authorization']}" \
-H "Content-Type: application/json" \
--data '{{"id": {example_model_id}}}'
{
"id": 15,
"owner_id": "\"\"",
"workspace_id": 10,
"name": "api-upload-pytorch-multi-io",
"updated_at": "2023-11-29T18:20:39.610964+00:00",
"created_at": "2023-11-29T16:30:53.716526+00:00",
"model_config": {
"id": 25,
"runtime": "flight",
"tensor_fields": null,
"filter_threshold": null
}
}
/v1/api/models/list_versions
Retrieves all versions of a model based on either the name of the model or the model_pk_id
.
Field | Type | Description |
---|---|---|
model_id | String (REQUIRED) | The model name. |
models_pk_id | Integer (REQUIRED) | The model’s numerical id. |
Field | Type | Description | |
---|---|---|---|
Unnamed | List[models] | A list of model versions for the requested model. | |
sha | String | The sha hash of the model version. | |
models_pk_id | Integer | The pk id of the model. | |
model_version | String | The UUID identifier of the model version. | |
owner_id | String | The unique user id of the model’s owner in UUID format. | |
model_id | String | The name of the model. | |
id | Integer | The integer id of the model. | |
file_name | String | The filename used when uploading the model. | |
image_path | String | The image path of the model. |
Retrieve the versions for a previously uploaded model. This assumes a workspace with id 10
has models already loaded into it.
Retrieve model versions via Requests.
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/list"
data = {
"workspace_id": workspace_id
}
# first get the list of models in the workspace
response = requests.post(endpoint,
json=data,
headers=headers,
verify=True).json()
example_model_id = response['models'][0]['id']
example_model_name = response['models'][0]['name']
## List model versions
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/list_versions"
data = {
"model_id": example_model_name,
"models_pk_id": example_model_id
}
response = requests.post(endpoint, json=data, headers=headers, verify=True).json()
display(response)
[{'sha': '792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8',
'models_pk_id': 15,
'model_version': '271875ae-92ee-4137-b54f-c2ce1e88121c',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 19,
'file_name': 'model-auto-conversion_pytorch_multi_io_model.pt',
'image_path': None,
'status': 'error'},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': 'ce648f2a-faee-4c8d-8a7b-e2789f3ab919',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 17,
'file_name': 'ccfraud.onnx',
'image_path': None,
'status': 'error'},
{'sha': '792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8',
'models_pk_id': 15,
'model_version': 'a6762893-be27-4142-ba09-4ce1b87b74a8',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 15,
'file_name': 'api-upload-pytorch-multi-io',
'image_path': None,
'status': 'error'},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': '0f96fae1-8ebc-41d8-a11d-3eaa3bc26526',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 18,
'file_name': 'ccfraud.onnx',
'image_path': None,
'status': 'error'},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': '9150b046-5df0-4c41-a60b-3016355f89d5',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 16,
'file_name': 'ccfraud.onnx',
'image_path': 'proxy.replicated.com/proxy/wallaroo/ghcr.io/wallaroolabs/mlflow-deploy:v2023.4.0-4103',
'status': 'ready'}]
Retrieve model versions via curl.
curl {wl.api_endpoint}/v1/api/models/list_versions \
-H "Authorization: {wl.auth.auth_header()['Authorization']}" \
-H "Content-Type: application/json" \
-d '{json.dumps(data)}'
[
{
"sha": "792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8",
"models_pk_id": 15,
"model_version": "271875ae-92ee-4137-b54f-c2ce1e88121c",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 19,
"file_name": "model-auto-conversion_pytorch_multi_io_model.pt",
"image_path": null,
"status": "error"
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "ce648f2a-faee-4c8d-8a7b-e2789f3ab919",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 17,
"file_name": "ccfraud.onnx",
"image_path": null,
"status": "error"
},
{
"sha": "792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8",
"models_pk_id": 15,
"model_version": "a6762893-be27-4142-ba09-4ce1b87b74a8",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 15,
"file_name": "api-upload-pytorch-multi-io",
"image_path": null,
"status": "error"
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "0f96fae1-8ebc-41d8-a11d-3eaa3bc26526",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 18,
"file_name": "ccfraud.onnx",
"image_path": null,
"status": "error"
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "9150b046-5df0-4c41-a60b-3016355f89d5",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 16,
"file_name": "ccfraud.onnx",
"image_path": "proxy.replicated.com/proxy/wallaroo/ghcr.io/wallaroolabs/mlflow-deploy:v2023.4.0-4103",
"status": "ready"
}
]
/v1/api/models/get_config_by_id
Returns the model’s configuration details.
Field | Type | Description |
---|---|---|
model_id | Integer (Required) | The numerical value of the model’s id. |
Field | Type | Description |
---|
Submit the model id for the model uploaded in the Upload Model to Workspace step to retrieve configuration details.
Retrieve model configuration via Requests.
## Get model config by id
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/get_config_by_id"
data = {
"model_id": example_model_id
}
response = requests.post(endpoint, json=data, headers=headers, verify=True).json()
response
{'model_config': {'id': 25,
'runtime': 'flight',
'tensor_fields': None,
'filter_threshold': None}}
Retrieve model configuration via curl.
curl {wl.api_endpoint}/v1/api/models/get_config_by_id \
-H "Authorization: {wl.auth.auth_header()['Authorization']}" \
-H "Content-Type: application/json" \
-d '{json.dumps(data)}'
{
"model_config": {
"id": 25,
"runtime": "flight",
"tensor_fields": null,
"filter_threshold": null
}
}
/v1/api/models/insert_model_config
Model configurations are added with the endpoint /v1/api/models/insert_model_config endpoint. This sets the model configuration for the model version. Once uploaded, the model version configuration is set to the uploaded model config.
Field | Type | Description |
---|---|---|
model_version_id | Integer (REQUIRED) | The model version id in numerical format. |
tensor_fields | List[String] (OPTIONAL) | Overrides the model’s default input fields. Mainly used with ONNX models. |
batch_config | String (OPTIONAL) | single : Only accepts one row of data at a time. None : Accepts multiple rows. |
filter_threshold | Integer (OPTIONAL) | The model’s filter threshold. |
input_schema | String (OPTIONAL) | The model’s input schema in PyArrow.Schema format. See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations for details on supported model frameworks. |
output_schema | String (OPTIONAL) | The model’s output schema in PyArrow.Schema format. See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations for details on supported model frameworks. |
tensor_fields | List[String] (OPTIONAL) | The input field names for the model types. Primarily used to override ONNX model input fields. |
Returns the model config with the following fields.
Field | Type | Description |
---|---|---|
id | Integer | The model configuration id. |
model_version_id | Integer | The model version id. |
runtime | String | The Wallaroo runtime. See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations for details on supported model frameworks. |
tensor_fields | List[String] | The model input fields. |
filter_threshold | Integer | The model’s filter threshold. |
input_schema | String | The model’s input schema in PyArrow.Schema format. See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations for details on supported model frameworks. |
output_schema | String | The model’s output schema in PyArrow.Schema format. See Wallaroo MLOps API Essentials Guide: Model Upload and Registrations for details on supported model frameworks. |
tensor_fields | List[String] | The input field names for the model types. Primarily used to override ONNX model input fields. |
The following example uses the Requests library to set a model’s configuration.
# Retrieve the token
headers = wl.auth.auth_header()
api_request = f"{APIURL}/v1/api/models/insert_model_config"
data = {
"model_version_id": 6,
"batch_config": None, # str
"filter_threshold": 0.1,
"input_schema": None, # str
"output_schema": None, # str
"tensor_fields": ["dense_1"] # List[str]
}
response = requests.post(api_request, json=data, headers=headers, verify=True).json()
response
{'model_config': {'id': 20,
'model_version_id': 6,
'runtime': 'onnx',
'filter_threshold': 0.1,
'tensor_fields': ['dense_1'],
'input_schema': None,
'output_schema': None,
'batch_config': None}}
/v1/api/models/get
Returns details regarding a single model, including versions.
Field | Type | Description |
---|---|---|
model_id | Integer (REQUIRED) | The numerical value of the model’s id. |
Field | Type | Description | |
---|---|---|---|
id | Integer | The numerical value of the model’s id. | |
name | String | The name of the model. | |
owner_id | String | The model owner. | |
created_at | String | DateTime of the model’s creation. | |
updated_at | String | DateTime of the model’s last update. | |
models | List[models] | The list of model versions associated with this model. | |
sha | String | The sha hash of the model version. | |
models_pk_id | Integer | The model id. | |
model_version | String | The UUID identifier of the model version. | |
owner_id | String | The model owner. | |
model_id | String | The name of the model. | |
id | Integer | The numerical identifier of the model version. | |
file_name | String | The file name used when uploading the model version | |
image_path | String or None | The image path of the model verison. |
Submit the model id for the model uploaded in the Upload Model to Workspace step to retrieve configuration details.
Get model details via Requests.
# Get model config by id
# Retrieve the token
headers = wl.auth.auth_header()
endpoint = f"{wl.api_endpoint}/v1/api/models/get"
data = {
"id": example_model_id
}
response = requests.post(endpoint, json=data, headers=headers, verify=True).json()
response
{'id': 15,
'name': 'api-upload-pytorch-multi-io',
'owner_id': '""',
'created_at': '2023-11-29T16:30:53.716526+00:00',
'updated_at': '2023-11-29T18:20:39.610964+00:00',
'models': [{'sha': '792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8',
'models_pk_id': 15,
'model_version': '271875ae-92ee-4137-b54f-c2ce1e88121c',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 19,
'file_name': 'model-auto-conversion_pytorch_multi_io_model.pt',
'image_path': None},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': 'ce648f2a-faee-4c8d-8a7b-e2789f3ab919',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 17,
'file_name': 'ccfraud.onnx',
'image_path': None},
{'sha': '792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8',
'models_pk_id': 15,
'model_version': 'a6762893-be27-4142-ba09-4ce1b87b74a8',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 15,
'file_name': 'api-upload-pytorch-multi-io',
'image_path': None},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': '0f96fae1-8ebc-41d8-a11d-3eaa3bc26526',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 18,
'file_name': 'ccfraud.onnx',
'image_path': None},
{'sha': 'bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507',
'models_pk_id': 15,
'model_version': '9150b046-5df0-4c41-a60b-3016355f89d5',
'owner_id': '""',
'model_id': 'api-upload-pytorch-multi-io',
'id': 16,
'file_name': 'ccfraud.onnx',
'image_path': 'proxy.replicated.com/proxy/wallaroo/ghcr.io/wallaroolabs/mlflow-deploy:v2023.4.0-4103'}]}
Get model details via curl.
curl {wl.api_endpoint}/v1/api/models/get \
-H "Authorization: {wl.auth.auth_header()['Authorization']}" \
-H "Content-Type: application/json" \
-d '{{"id": {example_model_id}}}'
{
"id": 15,
"name": "api-upload-pytorch-multi-io",
"owner_id": "\"\"",
"created_at": "2023-11-29T16:30:53.716526+00:00",
"updated_at": "2023-11-29T18:20:39.610964+00:00",
"models": [
{
"sha": "792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8",
"models_pk_id": 15,
"model_version": "271875ae-92ee-4137-b54f-c2ce1e88121c",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 19,
"file_name": "model-auto-conversion_pytorch_multi_io_model.pt",
"image_path": null
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "ce648f2a-faee-4c8d-8a7b-e2789f3ab919",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 17,
"file_name": "ccfraud.onnx",
"image_path": null
},
{
"sha": "792db9ee9f41aded3c1d4705f50ccdedd21cafb8b6232c03e4a849b6da1050a8",
"models_pk_id": 15,
"model_version": "a6762893-be27-4142-ba09-4ce1b87b74a8",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 15,
"file_name": "api-upload-pytorch-multi-io",
"image_path": null
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "0f96fae1-8ebc-41d8-a11d-3eaa3bc26526",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 18,
"file_name": "ccfraud.onnx",
"image_path": null
},
{
"sha": "bc85ce596945f876256f41515c7501c399fd97ebcb9ab3dd41bf03f8937b4507",
"models_pk_id": 15,
"model_version": "9150b046-5df0-4c41-a60b-3016355f89d5",
"owner_id": "\"\"",
"model_id": "api-upload-pytorch-multi-io",
"id": 16,
"file_name": "ccfraud.onnx",
"image_path": "proxy.replicated.com/proxy/wallaroo/ghcr.io/wallaroolabs/mlflow-deploy:v2023.4.0-4103"
}
]
}