Commit
·
59846b5
1
Parent(s):
4edfecf
Refactor dataset input and add trending dataset suggestions
Browse files- index.html +122 -21
index.html
CHANGED
|
@@ -112,27 +112,25 @@
|
|
| 112 |
class="card bg-white p-8 rounded-xl shadow-sm border border-gray-100"
|
| 113 |
>
|
| 114 |
<p class="text-gray-600 mb-4">
|
| 115 |
-
Enter a dataset ID to find similar datasets.
|
| 116 |
-
|
| 117 |
-
datasets.
|
| 118 |
</p>
|
| 119 |
<div class="flex gap-3">
|
| 120 |
-
<
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
Search
|
| 132 |
-
</button>
|
| 133 |
-
<div id="similarLoader" class="hidden">
|
| 134 |
-
<i data-lucide="loader-2" class="animate-spin"></i>
|
| 135 |
</div>
|
|
|
|
|
|
|
|
|
|
| 136 |
</div>
|
| 137 |
</div>
|
| 138 |
</div>
|
|
@@ -322,12 +320,80 @@
|
|
| 322 |
}
|
| 323 |
}, DEBOUNCE_MS);
|
| 324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 325 |
// Find similar datasets
|
| 326 |
async function findSimilarDatasets(page = 1) {
|
| 327 |
const datasetId = document.getElementById("datasetInput").value;
|
| 328 |
if (!datasetId) return;
|
| 329 |
|
| 330 |
-
document.getElementById("similarLoader")
|
|
|
|
|
|
|
|
|
|
| 331 |
document.getElementById("errorMessage").classList.add("hidden");
|
| 332 |
|
| 333 |
try {
|
|
@@ -343,7 +409,9 @@
|
|
| 343 |
} catch (error) {
|
| 344 |
showError("Failed to find similar datasets. Please try again.");
|
| 345 |
} finally {
|
| 346 |
-
|
|
|
|
|
|
|
| 347 |
}
|
| 348 |
}
|
| 349 |
|
|
@@ -372,7 +440,7 @@
|
|
| 372 |
</button>`
|
| 373 |
: results.length >= MAX_RESULTS
|
| 374 |
? `<div class="text-center mt-4 p-6 bg-blue-50 rounded-lg">
|
| 375 |
-
<p class="text-gray-700 mb-3"
|
| 376 |
<p class="text-gray-600 mb-4">Can't find what you're looking for? Why not create and share your own dataset?</p>
|
| 377 |
<a href="https://huggingface.co/docs/datasets/upload_dataset"
|
| 378 |
target="_blank"
|
|
@@ -458,6 +526,39 @@
|
|
| 458 |
? "rotate(0deg)"
|
| 459 |
: "rotate(90deg)";
|
| 460 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 461 |
</script>
|
| 462 |
</body>
|
| 463 |
</html>
|
|
|
|
| 112 |
class="card bg-white p-8 rounded-xl shadow-sm border border-gray-100"
|
| 113 |
>
|
| 114 |
<p class="text-gray-600 mb-4">
|
| 115 |
+
Enter a dataset ID to find similar datasets. Popular datasets will
|
| 116 |
+
appear as you type.
|
|
|
|
| 117 |
</p>
|
| 118 |
<div class="flex gap-3">
|
| 119 |
+
<div class="relative w-full">
|
| 120 |
+
<input
|
| 121 |
+
type="text"
|
| 122 |
+
id="datasetInput"
|
| 123 |
+
class="w-full p-3 border border-gray-200 rounded-lg"
|
| 124 |
+
placeholder="e.g. openai/gsm8k"
|
| 125 |
+
/>
|
| 126 |
+
<div
|
| 127 |
+
id="suggestionsBox"
|
| 128 |
+
class="hidden absolute w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-10 max-h-60 overflow-y-auto"
|
| 129 |
+
></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
</div>
|
| 131 |
+
<button onclick="findSimilarDatasets()" class="btn-primary">
|
| 132 |
+
Find Similar
|
| 133 |
+
</button>
|
| 134 |
</div>
|
| 135 |
</div>
|
| 136 |
</div>
|
|
|
|
| 320 |
}
|
| 321 |
}, DEBOUNCE_MS);
|
| 322 |
|
| 323 |
+
// Cache for trending datasets
|
| 324 |
+
let trendingDatasetsCache = null;
|
| 325 |
+
let cacheTimestamp = null;
|
| 326 |
+
const CACHE_DURATION = 1000 * 60 * 15; // 15 minutes
|
| 327 |
+
|
| 328 |
+
async function fetchTrendingDatasets() {
|
| 329 |
+
if (
|
| 330 |
+
trendingDatasetsCache &&
|
| 331 |
+
cacheTimestamp &&
|
| 332 |
+
Date.now() - cacheTimestamp < CACHE_DURATION
|
| 333 |
+
) {
|
| 334 |
+
return trendingDatasetsCache;
|
| 335 |
+
}
|
| 336 |
+
|
| 337 |
+
try {
|
| 338 |
+
const response = await fetch("https://huggingface.co/api/datasets");
|
| 339 |
+
const data = await response.json();
|
| 340 |
+
|
| 341 |
+
// Just take the first 20 dataset IDs since they're already sorted
|
| 342 |
+
const trendingDatasets = data
|
| 343 |
+
.slice(0, 20)
|
| 344 |
+
.map((dataset) => dataset.id);
|
| 345 |
+
|
| 346 |
+
trendingDatasetsCache = trendingDatasets;
|
| 347 |
+
cacheTimestamp = Date.now();
|
| 348 |
+
return trendingDatasets;
|
| 349 |
+
} catch (error) {
|
| 350 |
+
console.error("Error fetching trending datasets:", error);
|
| 351 |
+
return [];
|
| 352 |
+
}
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
function displaySuggestions(datasets, suggestionsBox) {
|
| 356 |
+
if (datasets.length > 0) {
|
| 357 |
+
suggestionsBox.innerHTML = datasets
|
| 358 |
+
.map(
|
| 359 |
+
(datasetId) => `
|
| 360 |
+
<div
|
| 361 |
+
class="p-3 hover:bg-gray-50 cursor-pointer border-b last:border-b-0"
|
| 362 |
+
onclick="selectSuggestion('${datasetId}')"
|
| 363 |
+
>
|
| 364 |
+
<div class="flex items-center gap-2">
|
| 365 |
+
<i data-lucide="database" class="w-4 h-4 text-blue-500"></i>
|
| 366 |
+
<span>${datasetId}</span>
|
| 367 |
+
</div>
|
| 368 |
+
</div>
|
| 369 |
+
`
|
| 370 |
+
)
|
| 371 |
+
.join("");
|
| 372 |
+
suggestionsBox.classList.remove("hidden");
|
| 373 |
+
lucide.createIcons();
|
| 374 |
+
} else {
|
| 375 |
+
suggestionsBox.classList.add("hidden");
|
| 376 |
+
}
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
function selectSuggestion(dataset) {
|
| 380 |
+
const datasetInput = document.getElementById("datasetInput");
|
| 381 |
+
const suggestionsBox = document.getElementById("suggestionsBox");
|
| 382 |
+
|
| 383 |
+
datasetInput.value = dataset;
|
| 384 |
+
suggestionsBox.classList.add("hidden");
|
| 385 |
+
findSimilarDatasets();
|
| 386 |
+
}
|
| 387 |
+
|
| 388 |
// Find similar datasets
|
| 389 |
async function findSimilarDatasets(page = 1) {
|
| 390 |
const datasetId = document.getElementById("datasetInput").value;
|
| 391 |
if (!datasetId) return;
|
| 392 |
|
| 393 |
+
const similarLoader = document.getElementById("similarLoader");
|
| 394 |
+
if (similarLoader) {
|
| 395 |
+
similarLoader.classList.remove("hidden");
|
| 396 |
+
}
|
| 397 |
document.getElementById("errorMessage").classList.add("hidden");
|
| 398 |
|
| 399 |
try {
|
|
|
|
| 409 |
} catch (error) {
|
| 410 |
showError("Failed to find similar datasets. Please try again.");
|
| 411 |
} finally {
|
| 412 |
+
if (similarLoader) {
|
| 413 |
+
similarLoader.classList.add("hidden");
|
| 414 |
+
}
|
| 415 |
}
|
| 416 |
}
|
| 417 |
|
|
|
|
| 440 |
</button>`
|
| 441 |
: results.length >= MAX_RESULTS
|
| 442 |
? `<div class="text-center mt-4 p-6 bg-blue-50 rounded-lg">
|
| 443 |
+
<p class="text-gray-700 mb-3">�� You've reached the end of our dataset journey! (${MAX_RESULTS} results)</p>
|
| 444 |
<p class="text-gray-600 mb-4">Can't find what you're looking for? Why not create and share your own dataset?</p>
|
| 445 |
<a href="https://huggingface.co/docs/datasets/upload_dataset"
|
| 446 |
target="_blank"
|
|
|
|
| 526 |
? "rotate(0deg)"
|
| 527 |
: "rotate(90deg)";
|
| 528 |
}
|
| 529 |
+
|
| 530 |
+
// Update the event listeners section
|
| 531 |
+
document.addEventListener("DOMContentLoaded", () => {
|
| 532 |
+
// ... existing event listeners ...
|
| 533 |
+
|
| 534 |
+
const datasetInput = document.getElementById("datasetInput");
|
| 535 |
+
|
| 536 |
+
// Add input event listener for suggestions
|
| 537 |
+
datasetInput.addEventListener("input", async (e) => {
|
| 538 |
+
const suggestionsBox = document.getElementById("suggestionsBox");
|
| 539 |
+
const value = e.target.value;
|
| 540 |
+
|
| 541 |
+
if (!value) {
|
| 542 |
+
// Show trending datasets when input is empty
|
| 543 |
+
const trending = await fetchTrendingDatasets();
|
| 544 |
+
displaySuggestions(trending, suggestionsBox);
|
| 545 |
+
} else {
|
| 546 |
+
// Filter trending datasets based on input
|
| 547 |
+
const trending = await fetchTrendingDatasets();
|
| 548 |
+
const filtered = trending.filter((dataset) =>
|
| 549 |
+
dataset.toLowerCase().includes(value.toLowerCase())
|
| 550 |
+
);
|
| 551 |
+
displaySuggestions(filtered, suggestionsBox);
|
| 552 |
+
}
|
| 553 |
+
});
|
| 554 |
+
|
| 555 |
+
// Show trending datasets on focus
|
| 556 |
+
datasetInput.addEventListener("focus", async () => {
|
| 557 |
+
const suggestionsBox = document.getElementById("suggestionsBox");
|
| 558 |
+
const trending = await fetchTrendingDatasets();
|
| 559 |
+
displaySuggestions(trending, suggestionsBox);
|
| 560 |
+
});
|
| 561 |
+
});
|
| 562 |
</script>
|
| 563 |
</body>
|
| 564 |
</html>
|