Spaces:
Running
Running
ping98k
Implement event handler functions for heatmap, K-Means, cluster plot, and naming events; refactor main.js to use these handlers.
f2e1fb8 Download kmeans_event.js from ping98k/Embedding-Playground: direct link, hf CLI and curl.
- Browser
- Download file 1.8 kB
-
https://huggingface.co/spaces/ping98k/Embedding-Playground/resolve/main/kmeans_event.js
- Command line
-
hf download hf://spaces/ping98k/Embedding-Playground/kmeans_event.js
-
curl -L -o kmeans_event.js https://huggingface.co/spaces/ping98k/Embedding-Playground/resolve/main/kmeans_event.js
1.8 kB
| // Handles K-Means and Balanced K-Means clustering event | |
| import { getLineEmbeddings } from './embedding.js'; | |
| import { kmeans, balancedKMeans } from './clustering.js'; | |
| const task = "Given a textual input sentence, retrieve relevant categories that best describe it."; | |
| export async function handleKMeansEvent() { | |
| const progressBar = document.getElementById("progress-bar"); | |
| const progressBarInner = document.getElementById("progress-bar-inner"); | |
| progressBar.style.display = "block"; | |
| progressBarInner.style.width = "0%"; | |
| const text = document.getElementById("input").value; | |
| // Remove ## lines for embedding | |
| const lines = text.split(/\n/).map(x => x.trim()).filter(x => x && !x.startsWith("##")); | |
| const embeddings = await getLineEmbeddings(lines, task); | |
| const n = embeddings.length; | |
| if (n < 2) return; | |
| const requestedK = parseInt(document.getElementById("kmeans-k").value) || 3; | |
| const k = Math.max(2, Math.min(requestedK, n)); | |
| // Read clustering type and beta | |
| const clusteringType = document.getElementById("kmeans-type").value; | |
| const beta = parseFloat(document.getElementById("kmeans-beta").value) || 0.01; | |
| let labels; | |
| if (clusteringType === "balancedKMeans") { | |
| labels = balancedKMeans(embeddings, k, beta).labels; | |
| } else { | |
| labels = kmeans(embeddings, k).labels; | |
| } | |
| // Build clustered text for textarea | |
| const clustered = Array.from({ length: k }, () => []); | |
| for (let i = 0; i < n; ++i) | |
| clustered[labels[i]].push(lines[i]); | |
| const clusterNames = Array.from({ length: k }, (_, c) => `Cluster ${c + 1}`); | |
| document.getElementById("input").value = clustered.map((g, i) => | |
| `## ${clusterNames[i]}\n${g.join("\n")}` | |
| ).join("\n\n\n"); | |
| progressBarInner.style.width = "100%"; | |
| } | |