diff --git a/changes/3125.fix.md b/changes/3125.fix.md new file mode 100644 index 00000000000..aca040cad64 --- /dev/null +++ b/changes/3125.fix.md @@ -0,0 +1 @@ +Fix outdated image string join logic in `ImageRow.image_ref`. diff --git a/src/ai/backend/common/utils.py b/src/ai/backend/common/utils.py index 5d98b54d337..4eed2a03668 100644 --- a/src/ai/backend/common/utils.py +++ b/src/ai/backend/common/utils.py @@ -419,7 +419,7 @@ def is_ip_address_format(str: str) -> bool: return False -def join_non_empty(*args, sep): +def join_non_empty(*args: Optional[str], sep: str) -> str: """ Joins non-empty strings from the given arguments using the specified separator. """ diff --git a/src/ai/backend/manager/models/image.py b/src/ai/backend/manager/models/image.py index d4724f7db76..b946f334c0f 100644 --- a/src/ai/backend/manager/models/image.py +++ b/src/ai/backend/manager/models/image.py @@ -35,6 +35,7 @@ ImageRegistry, ResourceSlot, ) +from ai.backend.common.utils import join_non_empty from ai.backend.logging import BraceStyleAdapter from ai.backend.manager.models.container_registry import ContainerRegistryRow @@ -264,7 +265,8 @@ def image_ref(self) -> ImageRef: image_name = "" _, tag = ImageRef.parse_image_tag(self.name.split(f"{self.registry}/", maxsplit=1)[1]) else: - image_and_tag = self.name.split(f"{self.registry}/{self.project}/", maxsplit=1)[1] + join = functools.partial(join_non_empty, sep="/") + image_and_tag = self.name.removeprefix(f"{join(self.registry, self.project)}/") image_name, tag = ImageRef.parse_image_tag(image_and_tag) return ImageRef(