Spaces:
Running
Running
feat: fetch directly from hf
Browse files- index.html +83 -1
index.html
CHANGED
@@ -276,7 +276,7 @@
|
|
276 |
|
277 |
<div class="card">
|
278 |
<h2>Configuration</h2>
|
279 |
-
|
280 |
<div class="checkbox-wrapper">
|
281 |
<input type="checkbox" id="addGenerationPrompt">
|
282 |
<label for="addGenerationPrompt">Add Generation Prompt</label>
|
@@ -286,6 +286,10 @@
|
|
286 |
<input type="text" id="eosToken" placeholder="EOS Token (e.g., </s>)" style="flex-grow: 1;">
|
287 |
</div>
|
288 |
</div>
|
|
|
|
|
|
|
|
|
289 |
|
290 |
<h2>Template</h2>
|
291 |
<textarea id="template" placeholder="Enter your template here..."></textarea>
|
@@ -433,6 +437,84 @@
|
|
433 |
|
434 |
// Initialize
|
435 |
updateMessageDisplay();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
436 |
</script>
|
437 |
</body>
|
438 |
</html>
|
|
|
276 |
|
277 |
<div class="card">
|
278 |
<h2>Configuration</h2>
|
279 |
+
<div class="config-group">
|
280 |
<div class="checkbox-wrapper">
|
281 |
<input type="checkbox" id="addGenerationPrompt">
|
282 |
<label for="addGenerationPrompt">Add Generation Prompt</label>
|
|
|
286 |
<input type="text" id="eosToken" placeholder="EOS Token (e.g., </s>)" style="flex-grow: 1;">
|
287 |
</div>
|
288 |
</div>
|
289 |
+
<div class="input-group">
|
290 |
+
<input type="text" id="repoUrl" placeholder="Enter Hugging Face Repo URL" style="flex-grow: 1">
|
291 |
+
<button onclick="handleFetchConfig()">Fetch Config</button>
|
292 |
+
</div>
|
293 |
|
294 |
<h2>Template</h2>
|
295 |
<textarea id="template" placeholder="Enter your template here..."></textarea>
|
|
|
437 |
|
438 |
// Initialize
|
439 |
updateMessageDisplay();
|
440 |
+
|
441 |
+
// New Functions for fetching tokenizer config
|
442 |
+
function parseRepoUrl(url) {
|
443 |
+
const hfUrlRegex = /^(?:https?:\/\/)?(?:huggingface\.co|hf\.co)\/([^/]+)\/([^/]+)$/;
|
444 |
+
const shortRegex = /^([^/]+)\/([^/]+)$/;
|
445 |
+
|
446 |
+
let match = url.match(hfUrlRegex);
|
447 |
+
if (!match) {
|
448 |
+
match = url.match(shortRegex);
|
449 |
+
}
|
450 |
+
|
451 |
+
if (match) {
|
452 |
+
return { user: match[1], repo: match[2] };
|
453 |
+
}
|
454 |
+
return null;
|
455 |
+
}
|
456 |
+
|
457 |
+
async function fetchTokenizerConfig(user, repo) {
|
458 |
+
const apiUrl = `https://huggingface.co/${user}/${repo}/raw/main/tokenizer_config.json`;
|
459 |
+
try {
|
460 |
+
const response = await fetch(apiUrl);
|
461 |
+
if (!response.ok) {
|
462 |
+
throw new Error(`HTTP error! status: ${response.status}`);
|
463 |
+
}
|
464 |
+
return await response.json();
|
465 |
+
} catch (error) {
|
466 |
+
console.error("Error fetching tokenizer config:", error);
|
467 |
+
displayError(`Failed to fetch tokenizer config: ${error.message}`);
|
468 |
+
return null;
|
469 |
+
}
|
470 |
+
}
|
471 |
+
|
472 |
+
function displayError(message) {
|
473 |
+
console.error(message);
|
474 |
+
}
|
475 |
+
|
476 |
+
function populateConfigFields(config) {
|
477 |
+
const bosTokenInput = document.getElementById('bosToken');
|
478 |
+
const eosTokenInput = document.getElementById('eosToken');
|
479 |
+
const templateTextarea = document.getElementById('template');
|
480 |
+
|
481 |
+
bosTokenInput.value = config?.bos_token ?? "";
|
482 |
+
eosTokenInput.value = config?.eos_token ?? "";
|
483 |
+
|
484 |
+
let chatTemplate = config?.chat_template ?? "";
|
485 |
+
|
486 |
+
// Decode HTML entities
|
487 |
+
if (chatTemplate) {
|
488 |
+
const tempElement = document.createElement('div');
|
489 |
+
tempElement.innerHTML = chatTemplate;
|
490 |
+
chatTemplate = tempElement.textContent;
|
491 |
+
}
|
492 |
+
|
493 |
+
templateTextarea.value = chatTemplate;
|
494 |
+
}
|
495 |
+
|
496 |
+
|
497 |
+
async function handleFetchConfig() {
|
498 |
+
const repoUrl = document.getElementById('repoUrl').value;
|
499 |
+
const repoInfo = parseRepoUrl(repoUrl);
|
500 |
+
|
501 |
+
if (!repoInfo) {
|
502 |
+
displayError("Invalid Hugging Face repository URL format.");
|
503 |
+
return;
|
504 |
+
}
|
505 |
+
|
506 |
+
document.getElementById('repoUrl').parentElement.classList.add('loading');
|
507 |
+
|
508 |
+
const { user, repo } = repoInfo;
|
509 |
+
const config = await fetchTokenizerConfig(user, repo);
|
510 |
+
|
511 |
+
document.getElementById('repoUrl').parentElement.classList.remove('loading');
|
512 |
+
|
513 |
+
if (config) {
|
514 |
+
console.log("Tokenizer Config:", JSON.stringify(config, null, 2));
|
515 |
+
populateConfigFields(config);
|
516 |
+
}
|
517 |
+
}
|
518 |
</script>
|
519 |
</body>
|
520 |
</html>
|