Spaces:
Sleeping
Sleeping
Sahil commited on
Update index.html
Browse files- index.html +29 -40
index.html
CHANGED
|
@@ -4,9 +4,7 @@
|
|
| 4 |
<head>
|
| 5 |
<meta charset="UTF-8">
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 7 |
-
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' https://js.puter.com; connect-src 'self' https://api.puter.com https://puter.com; style-src 'self' 'unsafe-inline';">
|
| 8 |
<title>ContinuumLearner - AI Training Pipeline</title>
|
| 9 |
-
<script src="https://js.puter.com/v2/" crossorigin="anonymous"></script>
|
| 10 |
<style>
|
| 11 |
* {
|
| 12 |
margin: 0;
|
|
@@ -261,29 +259,6 @@
|
|
| 261 |
<script>
|
| 262 |
let selectedModel = "puter:gpt-5-nano";
|
| 263 |
let sessionCount = 0;
|
| 264 |
-
let puterReady = false;
|
| 265 |
-
|
| 266 |
-
// Check if Puter.js is loaded
|
| 267 |
-
function checkPuterLoaded() {
|
| 268 |
-
if (typeof puter !== 'undefined' && puter.ai) {
|
| 269 |
-
puterReady = true;
|
| 270 |
-
addLog('β
Puter.js loaded successfully', 'success');
|
| 271 |
-
return true;
|
| 272 |
-
}
|
| 273 |
-
addLog('β Puter.js not loaded - Check your internet connection', 'error');
|
| 274 |
-
return false;
|
| 275 |
-
}
|
| 276 |
-
|
| 277 |
-
// Wait for Puter.js to load
|
| 278 |
-
window.addEventListener('load', function() {
|
| 279 |
-
setTimeout(() => {
|
| 280 |
-
if (!checkPuterLoaded()) {
|
| 281 |
-
addLog('β οΈ Puter.js failed to load. Retrying...', 'error');
|
| 282 |
-
// Retry after 2 seconds
|
| 283 |
-
setTimeout(checkPuterLoaded, 2000);
|
| 284 |
-
}
|
| 285 |
-
}, 1000);
|
| 286 |
-
});
|
| 287 |
|
| 288 |
// Model selector
|
| 289 |
document.querySelectorAll('.model-btn').forEach(btn => {
|
|
@@ -302,21 +277,35 @@
|
|
| 302 |
return;
|
| 303 |
}
|
| 304 |
|
| 305 |
-
// Check if Puter.js is available
|
| 306 |
-
if (typeof puter === 'undefined' || !puter.ai) {
|
| 307 |
-
alert('β Puter.js is not loaded. Please refresh the page and check your internet connection.');
|
| 308 |
-
addLog('β Puter.js not available', 'error');
|
| 309 |
-
return;
|
| 310 |
-
}
|
| 311 |
-
|
| 312 |
const responseText = document.getElementById('responseText');
|
| 313 |
responseText.innerHTML = '<div class="loading"></div> Generating response...';
|
| 314 |
|
| 315 |
try {
|
| 316 |
-
// Get AI response
|
| 317 |
addLog(`π Calling ${selectedModel}...`, 'success');
|
| 318 |
-
const response = await puter.ai.chat(userInput, { model: selectedModel });
|
| 319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 320 |
responseText.textContent = response;
|
| 321 |
addLog(`β
Generated response using ${selectedModel}`, 'success');
|
| 322 |
|
|
@@ -332,16 +321,16 @@
|
|
| 332 |
});
|
| 333 |
|
| 334 |
const trainData = await trainResponse.json();
|
| 335 |
-
|
| 336 |
if (trainData.success) {
|
| 337 |
sessionCount++;
|
| 338 |
document.getElementById('sessionCount').textContent = sessionCount;
|
| 339 |
document.getElementById('bufferedCount').textContent = trainData.buffered;
|
| 340 |
addLog(trainData.message, 'success');
|
| 341 |
-
|
| 342 |
// Clear input
|
| 343 |
document.getElementById('userInput').value = '';
|
| 344 |
-
|
| 345 |
// Auto-save when buffer is full
|
| 346 |
if (trainData.buffered >= 10) {
|
| 347 |
addLog('Buffer full! Auto-saving to HuggingFace...', 'success');
|
|
@@ -361,7 +350,7 @@
|
|
| 361 |
try {
|
| 362 |
const response = await fetch('/api/flush-buffer', { method: 'POST' });
|
| 363 |
const data = await response.json();
|
| 364 |
-
|
| 365 |
if (data.success) {
|
| 366 |
addLog(`πΎ ${data.message}`, 'success');
|
| 367 |
await refreshStats();
|
|
@@ -377,7 +366,7 @@
|
|
| 377 |
try {
|
| 378 |
const response = await fetch('/api/dataset-stats');
|
| 379 |
const data = await response.json();
|
| 380 |
-
|
| 381 |
if (data.success) {
|
| 382 |
document.getElementById('totalConversations').textContent = data.total_examples;
|
| 383 |
document.getElementById('totalTokens').textContent = data.total_tokens.toLocaleString();
|
|
@@ -395,7 +384,7 @@
|
|
| 395 |
entry.className = `log-entry ${type}`;
|
| 396 |
entry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
|
| 397 |
log.insertBefore(entry, log.firstChild);
|
| 398 |
-
|
| 399 |
// Keep only last 50 entries
|
| 400 |
while (log.children.length > 50) {
|
| 401 |
log.removeChild(log.lastChild);
|
|
|
|
| 4 |
<head>
|
| 5 |
<meta charset="UTF-8">
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 7 |
<title>ContinuumLearner - AI Training Pipeline</title>
|
|
|
|
| 8 |
<style>
|
| 9 |
* {
|
| 10 |
margin: 0;
|
|
|
|
| 259 |
<script>
|
| 260 |
let selectedModel = "puter:gpt-5-nano";
|
| 261 |
let sessionCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 262 |
|
| 263 |
// Model selector
|
| 264 |
document.querySelectorAll('.model-btn').forEach(btn => {
|
|
|
|
| 277 |
return;
|
| 278 |
}
|
| 279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 280 |
const responseText = document.getElementById('responseText');
|
| 281 |
responseText.innerHTML = '<div class="loading"></div> Generating response...';
|
| 282 |
|
| 283 |
try {
|
| 284 |
+
// Get AI response from backend
|
| 285 |
addLog(`π Calling ${selectedModel}...`, 'success');
|
|
|
|
| 286 |
|
| 287 |
+
const generateResponse = await fetch('/api/generate', {
|
| 288 |
+
method: 'POST',
|
| 289 |
+
headers: { 'Content-Type': 'application/json' },
|
| 290 |
+
body: JSON.stringify({
|
| 291 |
+
prompt: userInput,
|
| 292 |
+
model: selectedModel
|
| 293 |
+
})
|
| 294 |
+
});
|
| 295 |
+
|
| 296 |
+
const generateData = await generateResponse.json();
|
| 297 |
+
|
| 298 |
+
if (!generateData.success) {
|
| 299 |
+
responseText.textContent = `Error: ${generateData.error}`;
|
| 300 |
+
addLog(`β Error: ${generateData.error}`, 'error');
|
| 301 |
+
|
| 302 |
+
if (generateData.error.includes('HF_TOKEN')) {
|
| 303 |
+
addLog('π‘ Add HF_TOKEN environment variable to enable AI model training', 'error');
|
| 304 |
+
}
|
| 305 |
+
return;
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
const response = generateData.response;
|
| 309 |
responseText.textContent = response;
|
| 310 |
addLog(`β
Generated response using ${selectedModel}`, 'success');
|
| 311 |
|
|
|
|
| 321 |
});
|
| 322 |
|
| 323 |
const trainData = await trainResponse.json();
|
| 324 |
+
|
| 325 |
if (trainData.success) {
|
| 326 |
sessionCount++;
|
| 327 |
document.getElementById('sessionCount').textContent = sessionCount;
|
| 328 |
document.getElementById('bufferedCount').textContent = trainData.buffered;
|
| 329 |
addLog(trainData.message, 'success');
|
| 330 |
+
|
| 331 |
// Clear input
|
| 332 |
document.getElementById('userInput').value = '';
|
| 333 |
+
|
| 334 |
// Auto-save when buffer is full
|
| 335 |
if (trainData.buffered >= 10) {
|
| 336 |
addLog('Buffer full! Auto-saving to HuggingFace...', 'success');
|
|
|
|
| 350 |
try {
|
| 351 |
const response = await fetch('/api/flush-buffer', { method: 'POST' });
|
| 352 |
const data = await response.json();
|
| 353 |
+
|
| 354 |
if (data.success) {
|
| 355 |
addLog(`πΎ ${data.message}`, 'success');
|
| 356 |
await refreshStats();
|
|
|
|
| 366 |
try {
|
| 367 |
const response = await fetch('/api/dataset-stats');
|
| 368 |
const data = await response.json();
|
| 369 |
+
|
| 370 |
if (data.success) {
|
| 371 |
document.getElementById('totalConversations').textContent = data.total_examples;
|
| 372 |
document.getElementById('totalTokens').textContent = data.total_tokens.toLocaleString();
|
|
|
|
| 384 |
entry.className = `log-entry ${type}`;
|
| 385 |
entry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
|
| 386 |
log.insertBefore(entry, log.firstChild);
|
| 387 |
+
|
| 388 |
// Keep only last 50 entries
|
| 389 |
while (log.children.length > 50) {
|
| 390 |
log.removeChild(log.lastChild);
|