Spaces:
Sleeping
Sleeping
File size: 1,102 Bytes
25d4f70 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import numpy as np
from numpy.typing import NDArray
from typing import List
import umap
class ReducerEngine:
_last_fitted_reducer = None
def __init__(self, n_neighbors, min_dist):
self.n_neighbors = n_neighbors
self.min_dist = min_dist
def reduce(self, embeddings: List[List[float]]) -> List[List[float]]:
n_samples = len(embeddings)
if n_samples == 0:
return []
if n_samples == 1:
return [[0.0, 0.1]]
if n_samples < 5:
return [[0.0, i * 0.1] for i in range(n_samples)]
data = np.array(embeddings)
safe_n_neighbors = min(self.n_neighbors, n_samples - 1)
safe_n_neighbors = max(2, safe_n_neighbors)
reducer = umap.UMAP(
n_neighbors=safe_n_neighbors,
min_dist=self.min_dist,
metric="cosine",
random_state=42,
n_components=2,
)
coords_2d: NDArray[np.float32] = np.asarray(reducer.fit_transform(data))
ReducerEngine._last_fitted_reducer = reducer
return coords_2d.tolist()
|