159 lines
4.3 KiB
Python
159 lines
4.3 KiB
Python
import datetime
|
|
from typing import TYPE_CHECKING, Any, Dict, Tuple, Union
|
|
|
|
if TYPE_CHECKING:
|
|
from replicate.client import Client
|
|
from replicate.model import Model
|
|
|
|
from replicate.pagination import Page
|
|
from replicate.resource import Namespace, Resource
|
|
|
|
|
|
class Version(Resource):
|
|
"""
|
|
A version of a model.
|
|
"""
|
|
|
|
id: str
|
|
"""The unique ID of the version."""
|
|
|
|
created_at: datetime.datetime
|
|
"""When the version was created."""
|
|
|
|
cog_version: str
|
|
"""The version of the Cog used to create the version."""
|
|
|
|
openapi_schema: dict
|
|
"""An OpenAPI description of the model inputs and outputs."""
|
|
|
|
|
|
class Versions(Namespace):
|
|
"""
|
|
Namespace for operations related to model versions.
|
|
"""
|
|
|
|
model: Tuple[str, str]
|
|
|
|
def __init__(
|
|
self, client: "Client", model: Union[str, Tuple[str, str], "Model"]
|
|
) -> None:
|
|
super().__init__(client=client)
|
|
|
|
from replicate.model import Model # pylint: disable=import-outside-toplevel
|
|
|
|
if isinstance(model, Model):
|
|
self.model = (model.owner, model.name)
|
|
elif isinstance(model, str):
|
|
owner, name = model.split("/", 1)
|
|
self.model = (owner, name)
|
|
else:
|
|
self.model = model
|
|
|
|
def get(self, id: str) -> Version:
|
|
"""
|
|
Get a specific model version.
|
|
|
|
Args:
|
|
id: The version ID.
|
|
Returns:
|
|
The model version.
|
|
"""
|
|
|
|
resp = self._client._request(
|
|
"GET", f"/v1/models/{self.model[0]}/{self.model[1]}/versions/{id}"
|
|
)
|
|
|
|
return _json_to_version(resp.json())
|
|
|
|
async def async_get(self, id: str) -> Version:
|
|
"""
|
|
Get a specific model version.
|
|
|
|
Args:
|
|
id: The version ID.
|
|
Returns:
|
|
The model version.
|
|
"""
|
|
|
|
resp = await self._client._async_request(
|
|
"GET", f"/v1/models/{self.model[0]}/{self.model[1]}/versions/{id}"
|
|
)
|
|
|
|
return _json_to_version(resp.json())
|
|
|
|
def list(self) -> Page[Version]:
|
|
"""
|
|
Return a list of all versions for a model.
|
|
|
|
Returns:
|
|
List[Version]: A list of version objects.
|
|
"""
|
|
|
|
resp = self._client._request(
|
|
"GET", f"/v1/models/{self.model[0]}/{self.model[1]}/versions"
|
|
)
|
|
obj = resp.json()
|
|
obj["results"] = [_json_to_version(result) for result in obj["results"]]
|
|
|
|
return Page[Version](**obj)
|
|
|
|
async def async_list(self) -> Page[Version]:
|
|
"""
|
|
Return a list of all versions for a model.
|
|
|
|
Returns:
|
|
List[Version]: A list of version objects.
|
|
"""
|
|
|
|
resp = await self._client._async_request(
|
|
"GET", f"/v1/models/{self.model[0]}/{self.model[1]}/versions"
|
|
)
|
|
obj = resp.json()
|
|
obj["results"] = [_json_to_version(result) for result in obj["results"]]
|
|
|
|
return Page[Version](**obj)
|
|
|
|
def delete(self, id: str) -> bool:
|
|
"""
|
|
Delete a model version and all associated predictions, including all output files.
|
|
|
|
Model version deletion has some restrictions:
|
|
|
|
* You can only delete versions from models you own.
|
|
* You can only delete versions from private models.
|
|
* You cannot delete a version if someone other than you
|
|
has run predictions with it.
|
|
|
|
Args:
|
|
id: The version ID.
|
|
"""
|
|
|
|
resp = self._client._request(
|
|
"DELETE", f"/v1/models/{self.model[0]}/{self.model[1]}/versions/{id}"
|
|
)
|
|
return resp.status_code == 204
|
|
|
|
async def async_delete(self, id: str) -> bool:
|
|
"""
|
|
Delete a model version and all associated predictions, including all output files.
|
|
|
|
Model version deletion has some restrictions:
|
|
|
|
* You can only delete versions from models you own.
|
|
* You can only delete versions from private models.
|
|
* You cannot delete a version if someone other than you
|
|
has run predictions with it.
|
|
|
|
Args:
|
|
id: The version ID.
|
|
"""
|
|
|
|
resp = await self._client._async_request(
|
|
"DELETE", f"/v1/models/{self.model[0]}/{self.model[1]}/versions/{id}"
|
|
)
|
|
return resp.status_code == 204
|
|
|
|
|
|
def _json_to_version(json: Dict[str, Any]) -> Version:
|
|
return Version(**json)
|