From 8d727eba3e57ebe68f974a3e2cb0460082dec47c Mon Sep 17 00:00:00 2001 From: Nguyen Van Nam Date: Tue, 14 Jul 2026 22:55:23 +0700 Subject: [PATCH] fix: bound face-cluster count by available embeddings (#1793) `find_cluster_centroids()` iterates `k` from 1..`max_k` unconditionally. If `len(embeddings) < max_k`, `KMeans(n_clusters=k)` will raise `ValueError` when `k` exceeds the number of samples. This is an unhandled crash path on small datasets. Affected files: cluster_analysis.py Signed-off-by: Nguyen Van Nam --- modules/cluster_analysis.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/cluster_analysis.py b/modules/cluster_analysis.py index ea1c941..4e62374 100644 --- a/modules/cluster_analysis.py +++ b/modules/cluster_analysis.py @@ -4,6 +4,18 @@ from typing import Any def find_cluster_centroids(embeddings, max_k=10) -> Any: + n_samples = len(embeddings) + if n_samples == 0: + raise ValueError("embeddings must not be empty") + if max_k < 1: + raise ValueError("max_k must be at least 1") + + max_k = min(max_k, n_samples) + if max_k == 1: + kmeans = KMeans(n_clusters=1, random_state=0) + kmeans.fit(embeddings) + return kmeans.cluster_centers_ + inertia = [] cluster_centroids = [] K = range(1, max_k+1)