| |
| |
|
|
| import sys |
| import time |
| from pathlib import Path |
|
|
| import click |
|
|
| from dyff.client import Client |
| from dyff.schema.platform import * |
| from dyff.schema.requests import * |
|
|
| from app.api.models import PredictionResponse |
|
|
| |
|
|
| WORKDIR = Path(__file__).resolve().parent |
|
|
|
|
| @click.command() |
| @click.option( |
| "--account", |
| type=str, |
| required=True, |
| help="Your account ID", |
| ) |
| @click.option( |
| "--name", |
| type=str, |
| required=True, |
| help="The name of your detector model. For display and querying purposes only.", |
| ) |
| @click.option( |
| "--image", |
| type=str, |
| required=True, |
| help="The Docker image to upload. Must exist in your local Docker deamon.", |
| ) |
| @click.option( |
| "--endpoint", |
| type=str, |
| default="predict", |
| help="The endpoint to call on your model to make a prediction.", |
| ) |
| def main(account: str, name: str, image: str, endpoint: str) -> None: |
| dyffapi = Client() |
|
|
| |
| artifact_id = None |
| service_id = None |
|
|
| |
| if artifact_id is None: |
| |
| artifact = dyffapi.artifacts.create(ArtifactCreateRequest(account=account)) |
| click.echo(f"artifact_id = \"{artifact.id}\"") |
| time.sleep(5) |
| |
| dyffapi.artifacts.push(artifact, source=f"docker-daemon:{image}") |
| time.sleep(5) |
| |
| dyffapi.artifacts.finalize(artifact.id) |
| else: |
| artifact = dyffapi.artifacts.get(artifact_id) |
| assert artifact is not None |
|
|
| |
| if service_id is None: |
| |
| service_request = InferenceServiceCreateRequest( |
| account=account, |
| name=name, |
| model=None, |
| runner=InferenceServiceRunner( |
| kind=InferenceServiceRunnerKind.CONTAINER, |
| imageRef=EntityIdentifier.of(artifact), |
| resources=ModelResources(), |
| ), |
| interface=InferenceInterface( |
| endpoint=endpoint, |
| outputSchema=DataSchema.make_output_schema(PredictionResponse), |
| ), |
| ) |
| service = dyffapi.inferenceservices.create(service_request) |
| click.echo(f"service_id = \"{service.id}\"") |
| else: |
| service = dyffapi.inferenceservices.get(service_id) |
| assert service is not None |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|