From 0734383af72b2790cec044bbbb2f776d78b8b34a Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Tue, 24 Dec 2024 17:23:31 +0800 Subject: [PATCH] fix: use content hash as the default model version (#5146) * fix: use content hash as the default model version Signed-off-by: Frost Ming * fix: simplify Signed-off-by: Frost Ming --------- Signed-off-by: Frost Ming --- src/_bentoml_sdk/models/huggingface.py | 31 ++++++++++++++------------ 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/_bentoml_sdk/models/huggingface.py b/src/_bentoml_sdk/models/huggingface.py index adfe253e98b..ddacdea3ac9 100644 --- a/src/_bentoml_sdk/models/huggingface.py +++ b/src/_bentoml_sdk/models/huggingface.py @@ -1,5 +1,7 @@ from __future__ import annotations +import hashlib +import json import os import shutil import typing as t @@ -85,25 +87,26 @@ def resolve(self, base_path: t.Union[PathType, FS, None] = None) -> str: def to_info(self, alias: str | None = None) -> BentoModelInfo: model_id = self.model_id.lower() - tag = Tag(model_id.replace("/", "--"), self.commit_hash) + metadata = { + "model_id": model_id, + "revision": self.commit_hash, + "endpoint": self.endpoint or DEFAULT_HF_ENDPOINT, + "include": self.include, + "exclude": self.exclude, + } + content_hash = hashlib.md5( + json.dumps(metadata, sort_keys=True, separators=(",", ":")).encode() + ).hexdigest() + tag = Tag(model_id.replace("/", "--"), content_hash) return BentoModelInfo( - tag, - alias=alias, - registry="huggingface", - metadata={ - "model_id": model_id, - "revision": self.commit_hash, - "endpoint": self.endpoint or DEFAULT_HF_ENDPOINT, - "include": self.include, - "exclude": self.exclude, - }, + tag, alias=alias, registry="huggingface", metadata=metadata ) @classmethod def from_info(cls, info: BentoModelInfo) -> HuggingFaceModel: if not info.metadata: - name, revision = info.tag.name, info.tag.version - return cls(model_id=name.replace("--", "/"), revision=revision or "main") + name = info.tag.name + return cls(model_id=name.replace("--", "/")) model = cls( model_id=info.metadata["model_id"], revision=info.metadata["revision"], @@ -145,7 +148,7 @@ def to_create_schema(self) -> CreateModelSchema: } return CreateModelSchema( description="", - version=revision, + version=self.to_info().tag.version or revision, manifest=ModelManifestSchema( module="", metadata=metadata,