Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions deploy/cloud/api-store/ai_dynamo_store/api/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class DynamoComponentVersionApiSchema(BaseModel):

class DynamoComponentVersionManifestSchema(BaseModel):
service: str
bentoml_version: Optional[str] = None
dynamo_version: Optional[str] = None
apis: Dict[str, DynamoComponentVersionApiSchema]
size_bytes: int

Expand All @@ -179,7 +179,7 @@ def _validate_manifest(v):


class DynamoComponentVersionSchema(ResourceSchema):
bento_repository_uid: str
dynamo_repository_uid: str
version: str
description: str
image_build_status: ImageBuildStatus
Expand All @@ -205,9 +205,9 @@ class DynamoComponentVersionFullSchema(DynamoComponentVersionSchema):


class DynamoComponentSchema(ResourceSchema):
latest_bento: Optional[DynamoComponentVersionSchema]
latest_bentos: Optional[List[DynamoComponentVersionSchema]]
n_bentos: int
latest_dynamo: Optional[DynamoComponentVersionSchema]
latest_dynamos: Optional[List[DynamoComponentVersionSchema]]
n_dynamos: int
description: str


Expand Down
10 changes: 5 additions & 5 deletions deploy/cloud/api-store/ai_dynamo_store/api/deployments.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,13 @@ async def create_deployment(deployment: CreateDeploymentSchema):
kube_namespace = get_namespace()

# Generate deployment name
deployment_name = sanitize_deployment_name(deployment.name, deployment.bento)
deployment_name = sanitize_deployment_name(deployment.name, deployment.dynamo)

# Create the deployment using helper function
created_crd = create_dynamo_deployment(
name=deployment_name,
namespace=kube_namespace,
dynamo_component=deployment.bento or deployment.component,
dynamo_component=deployment.dynamo or deployment.component,
labels={
"ngc-organization": ownership["organization_id"],
"ngc-user": ownership["user_id"],
Expand Down Expand Up @@ -323,17 +323,17 @@ def update_deployment(name: str, deployment: UpdateDeploymentSchema):
ownership = {"organization_id": "default-org", "user_id": "default-user"}
kube_namespace = get_namespace()
existing_deployment = get_deployment(name)
if existing_deployment.bento != deployment.bento:
if existing_deployment.dynamo != deployment.dynamo:
raise HTTPException(
status_code=422,
detail="Cannot update the Dynamo components of a deployment.",
)

deployment_name = sanitize_deployment_name(name, deployment.bento)
deployment_name = sanitize_deployment_name(name, deployment.dynamo)
updated_crd = update_dynamo_deployment(
name=deployment_name,
namespace=kube_namespace,
dynamo_nim=deployment.bento,
dynamo_nim=deployment.dynamo,
labels={
"ngc-organization": ownership["organization_id"],
"ngc-user": ownership["user_id"],
Expand Down
40 changes: 20 additions & 20 deletions deploy/cloud/api-store/ai_dynamo_store/api/dynamo.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ async def dynamo_component_handler(


@router.get(
"/bento_repositories/{dynamo_component_name}",
"/dynamo_repositories/{dynamo_component_name}",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -169,16 +169,16 @@ async def get_dynamo_component(
resource_type=ResourceType.DynamoComponent,
labels=[],
description=dynamo_component.description,
latest_bento=None
latest_dynamo=None
if not latest_dynamo_component_versions
else latest_dynamo_component_versions[0],
latest_bentos=latest_dynamo_component_versions,
n_bentos=len(dynamo_components),
latest_dynamos=latest_dynamo_component_versions,
n_dynamos=len(dynamo_components),
)


@router.post(
"/bento_repositories",
"/dynamo_repositories",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -240,14 +240,14 @@ async def create_dynamo_component(
resource_type=ResourceType.DynamoComponent,
labels=[],
description=db_dynamo_component.description,
latest_bentos=None,
latest_bento=None,
n_bentos=0,
latest_dynamos=None,
latest_dynamo=None,
n_dynamos=0,
)


@router.get(
"/bento_repositories",
"/dynamo_repositories",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -375,7 +375,7 @@ async def dynamo_component_version_handler(


@router.get(
"/bento_repositories/{dynamo_component_name}/bentos/{version}",
"/dynamo_repositories/{dynamo_component_name}/dynamos/{version}",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -415,7 +415,7 @@ async def get_dynamo_component_version(


@router.post(
"/bento_repositories/{dynamo_component_name}/bentos",
"/dynamo_repositories/{dynamo_component_name}/dynamos",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -483,7 +483,7 @@ async def create_dynamo_component_version(


@router.get(
"/bento_repositories/{dynamo_component_name}/bentos",
"/dynamo_repositories/{dynamo_component_name}/dynamos",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -544,7 +544,7 @@ async def get_dynamo_component_versions(


@router.patch(
"/bento_repositories/{dynamo_component_name}/bentos/{version}",
"/dynamo_repositories/{dynamo_component_name}/dynamos/{version}",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -588,7 +588,7 @@ async def update_dynamo_component_version(


@router.put(
"/bento_repositories/{dynamo_component_name}/bentos/{version}/upload",
"/dynamo_repositories/{dynamo_component_name}/dynamos/{version}/upload",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -636,7 +636,7 @@ def generate_file_path(version) -> str:


@router.get(
"/bento_repositories/{dynamo_component_name}/bentos/{version}/download",
"/dynamo_repositories/{dynamo_component_name}/dynamos/{version}/download",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -672,7 +672,7 @@ async def download_dynamo_component_version(


@router.patch(
"/bento_repositories/{dynamo_component_name}/bentos/{version}/start_upload",
"/dynamo_repositories/{dynamo_component_name}/dynamos/{version}/start_upload",
responses={
200: {"description": "Successful Response"},
422: {"description": "Validation Error"},
Expand Down Expand Up @@ -769,13 +769,13 @@ async def convert_dynamo_component_model_to_schema(
name=entity.name,
resource_type=ResourceType.DynamoComponent,
labels=[],
latest_bento=(
latest_dynamo=(
None
if not dynamo_component_version_schemas
else dynamo_component_version_schemas[0]
),
latest_bentos=dynamo_component_version_schemas,
n_bentos=total,
latest_dynamos=dynamo_component_version_schemas,
n_dynamos=total,
description=entity.description,
)
)
Expand Down Expand Up @@ -832,7 +832,7 @@ async def convert_dynamo_component_version_model_to_schema(
labels=[],
manifest=entity.manifest,
updated_at=updated_at,
bento_repository_uid=dynamo_component.id,
dynamo_repository_uid=dynamo_component.id,
# upload_started_at=upload_started_at,
# upload_finished_at=upload_finished_at,
transmission_strategy=TransmissionStrategy.Proxy,
Expand Down
4 changes: 2 additions & 2 deletions deploy/cloud/api-store/ai_dynamo_store/api/k8s.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def create_dynamo_deployment(
Args:
name: Deployment name
namespace: Target namespace
dynamo_component: Bento name and version (format: name:version)
dynamo_component: Dynamo artifact name and version (format: name:version)
labels: Resource labels
envs: Optional list of environment variables

Expand Down Expand Up @@ -215,7 +215,7 @@ def update_dynamo_deployment(
Args:
name: Deployment name
namespace: Target namespace
dynamo_nim: Bento name and version (format: name:version)
dynamo_nim: Dynamo artifact name and version (format: name:version)
labels: Resource labels
envs: Optional list of environment variables

Expand Down
34 changes: 17 additions & 17 deletions deploy/cloud/api-store/ai_dynamo_store/api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
def get_deployment_status(resource: Dict[str, Any]) -> str:
"""
Get the current status of a deployment.
Maps operator status to BentoML status values.
Returns lowercase status values matching BentoML's DeploymentStatus enum.
Maps operator status to Dynamo status values.
Returns lowercase status values matching Dynamo's DeploymentStatus enum.
"""
status = resource.get("status", {})
conditions = status.get("conditions", [])
Expand All @@ -43,7 +43,7 @@ def get_deployment_status(resource: Dict[str, Any]) -> str:
if state == "failed":
return "failed"
elif state == "pending":
return "deploying" # map pending to deploying to match BentoML states
return "deploying" # map pending to deploying to match Dynamo states

# Default fallback
return "unknown"
Expand Down Expand Up @@ -72,11 +72,11 @@ def build_latest_revision_from_cr(cr: dict) -> dict:
spec = cr.get("spec", {})
meta = cr.get("metadata", {})
now = datetime.utcnow().isoformat() + "Z"
bento_str = spec.get("dynamoGraph", "unknown:unknown")
if ":" in bento_str:
bento_name, bento_version = bento_str.split(":", 1)
dynamo_str = spec.get("dynamoGraph", "unknown:unknown")
if ":" in dynamo_str:
dynamo_name, dynamo_version = dynamo_str.split(":", 1)
else:
bento_name, bento_version = "unknown", "unknown"
dynamo_name, dynamo_version = "unknown", "unknown"
# Dummy creator
creator = {"name": "system", "email": "", "first_name": "", "last_name": ""}
# Dummy repository
Expand All @@ -85,24 +85,24 @@ def build_latest_revision_from_cr(cr: dict) -> dict:
"created_at": now,
"updated_at": now,
"deleted_at": None,
"name": bento_name,
"resource_type": "bento_repository",
"name": dynamo_name,
"resource_type": "dynamo_repository",
"labels": [],
"description": "",
"latest_bento": None,
"latest_dynamo": None,
}
# Dummy bento
bento = {
"uid": "dummy-bento-uid",
# Dummy dynamo
dynamo = {
"uid": "dummy-dynamo-uid",
"created_at": now,
"updated_at": now,
"deleted_at": None,
"name": bento_version,
"resource_type": "bento",
"name": dynamo_version,
"resource_type": "dynamo",
"labels": [],
"description": "",
"repository": repository,
"version": bento_version,
"version": dynamo_version,
"image_build_status": "",
"upload_status": "",
"upload_finished_reason": "",
Expand All @@ -125,7 +125,7 @@ def build_latest_revision_from_cr(cr: dict) -> dict:
"access_authorization": True,
"envs": spec.get("envs", []),
},
"bento": bento,
"dynamo": dynamo,
}
# Revision
return {
Expand Down
2 changes: 1 addition & 1 deletion deploy/cloud/api-store/ai_dynamo_store/models/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class DeploymentConfigSchema(BaseModel):


class UpdateDeploymentSchema(DeploymentConfigSchema):
bento: Optional[str] = None
dynamo: Optional[str] = None
component: Optional[str] = None


Expand Down
14 changes: 7 additions & 7 deletions deploy/cloud/api-store/ai_dynamo_store/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ def test_build_latest_revision_from_cr_minimal():
rev = build_latest_revision_from_cr(cr)
assert rev["uid"] == "u1"
assert rev["name"] == "n1"
assert rev["targets"][0]["bento"]["repository"]["name"] == "repo"
assert rev["targets"][0]["bento"]["name"] == "ver"
assert rev["targets"][0]["dynamo"]["repository"]["name"] == "repo"
assert rev["targets"][0]["dynamo"]["name"] == "ver"
assert rev["targets"][0]["config"]["services"] == {"svc": {}}
assert rev["targets"][0]["config"]["envs"] == [{"name": "A", "value": "B"}]

Expand All @@ -87,14 +87,14 @@ def test_build_latest_revision_from_cr_missing_fields():
rev = build_latest_revision_from_cr(cr)
assert rev["uid"] == "dummy-uid"
assert rev["name"] == "dummy-revision"
assert rev["targets"][0]["bento"]["repository"]["name"] == "unknown"
assert rev["targets"][0]["bento"]["name"] == "unknown"
assert rev["targets"][0]["dynamo"]["repository"]["name"] == "unknown"
assert rev["targets"][0]["dynamo"]["name"] == "unknown"
assert rev["targets"][0]["config"]["services"] == {}
assert rev["targets"][0]["config"]["envs"] == []


def test_build_latest_revision_from_cr_bento_colonless():
def test_build_latest_revision_from_cr_dynamo_colonless():
cr = {"spec": {"dynamoGraph": "justrepo"}}
rev = build_latest_revision_from_cr(cr)
assert rev["targets"][0]["bento"]["repository"]["name"] == "unknown"
assert rev["targets"][0]["bento"]["name"] == "unknown"
assert rev["targets"][0]["dynamo"]["repository"]["name"] == "unknown"
assert rev["targets"][0]["dynamo"]["name"] == "unknown"
6 changes: 3 additions & 3 deletions deploy/helm/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ docker login "$DOCKER_REGISTRY"
# Change to the specified directory
cd "$DYNAMO_DIRECTORY"

# Build the Bento container
echo "Building Bento image for $DYNAMO_IDENTIFIER..."
# Build the Dynamo application container
echo "Building Dynamo application image for $DYNAMO_IDENTIFIER..."
DOCKER_DEFAULT_PLATFORM=linux/amd64 uv run dynamo build --containerize $DYNAMO_IDENTIFIER

# Extract the module and the bento name
# Extract the module and the dynamo name
DYNAMO_MODULE=$(echo "$DYNAMO_IDENTIFIER" | awk -F':' '{print $1}' | tr '[:upper:]' '[:lower:]')
DYNAMO_NAME=$(echo "$DYNAMO_IDENTIFIER" | awk -F':' '{print $2}' | tr '[:upper:]' '[:lower:]')

Expand Down
2 changes: 0 additions & 2 deletions deploy/sdk/src/dynamo/sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
import warnings
from typing import Any

# Suppress warning from setuptools caused by bentoml
# TODO: Remove this line after the bentoml import is removed from this file
warnings.filterwarnings("ignore", category=UserWarning, message=".*pkg_resources.*")

# flake8: noqa: E402
Expand Down
1 change: 0 additions & 1 deletion deploy/sdk/src/dynamo/sdk/cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ def main(
):
"""
The Dynamo CLI is a CLI for serving, containerizing, and deploying Dynamo applications.
It takes inspiration from and leverages core pieces of the BentoML deployment stack.

At a high level, you use `serve` to run a set of dynamo services locally,
`build` and `containerize` to package them up for deployment, and then `cloud`
Expand Down
2 changes: 1 addition & 1 deletion deploy/sdk/src/dynamo/sdk/cli/serve.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def serve(
target: TargetEnum = typer.Option(
TargetEnum.DYNAMO,
"--target",
help="Specify the target: 'dynamo' or 'bento'.",
help="Specify the target: 'dynamo'",
case_sensitive=False,
),
):
Expand Down
Loading
Loading