# scripts/promote_model.py
import mlflow
import argparse
from databricks.sdk import WorkspaceClient
def promote_model(model_name: str, alias: str):
"""평가를 통과한 최신 모델 버전에 Alias를 설정합니다."""
client = mlflow.MlflowClient()
# 최신 버전 조회
versions = client.search_model_versions(f"name='{model_name}'")
latest_version = sorted(versions, key=lambda v: int(v.version))[-1]
# 메트릭 검증 (예: F1-score > 0.85)
run = mlflow.get_run(latest_version.run_id)
f1_score = run.data.metrics.get("f1_score", 0)
if f1_score < 0.85:
raise ValueError(f"F1 score {f1_score:.3f} is below threshold 0.85. Deployment aborted.")
# Alias 업데이트 → Model Serving 엔드포인트 자동 전환
client.set_registered_model_alias(
name=model_name,
alias=alias,
version=latest_version.version
)
print(f"Promoted version {latest_version.version} to '{alias}' (F1: {f1_score:.3f})")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--model-name", required=True)
parser.add_argument("--alias", default="champion")
args = parser.parse_args()
promote_model(args.model_name, args.alias)