fix async model loading

This commit is contained in:
Dobromir Popov
2025-10-24 23:13:28 +03:00
parent 2233a88d3e
commit e9edf2c5f2
3 changed files with 197 additions and 92 deletions

View File

@@ -102,32 +102,65 @@
</div>
<script>
// Load available models on page load
// Load available models on page load with polling for async loading
let modelLoadingPollInterval = null;
function loadAvailableModels() {
fetch('/api/available-models')
.then(response => response.json())
.then(data => {
const modelSelect = document.getElementById('model-select');
modelSelect.innerHTML = '';
if (data.success && data.models.length > 0) {
data.models.forEach(model => {
const option = document.createElement('option');
option.value = model;
option.textContent = model;
modelSelect.appendChild(option);
});
if (data.loading) {
// Models still loading - show loading message and poll
modelSelect.innerHTML = '<option value="">🔄 Loading models...</option>';
// Start polling if not already polling
if (!modelLoadingPollInterval) {
console.log('Models loading in background, will poll for completion...');
modelLoadingPollInterval = setInterval(loadAvailableModels, 2000); // Poll every 2 seconds
}
} else {
const option = document.createElement('option');
option.value = '';
option.textContent = 'No models available';
modelSelect.appendChild(option);
// Models loaded - stop polling
if (modelLoadingPollInterval) {
clearInterval(modelLoadingPollInterval);
modelLoadingPollInterval = null;
}
modelSelect.innerHTML = '';
if (data.success && data.models.length > 0) {
// Show success notification
if (window.showSuccess) {
window.showSuccess(`${data.models.length} models loaded and ready for training`);
}
data.models.forEach(model => {
const option = document.createElement('option');
option.value = model;
option.textContent = model;
modelSelect.appendChild(option);
});
console.log(`✅ Models loaded: ${data.models.join(', ')}`);
} else {
const option = document.createElement('option');
option.value = '';
option.textContent = 'No models available';
modelSelect.appendChild(option);
}
}
})
.catch(error => {
console.error('Error loading models:', error);
const modelSelect = document.getElementById('model-select');
modelSelect.innerHTML = '<option value="">Error loading models</option>';
// Stop polling on error
if (modelLoadingPollInterval) {
clearInterval(modelLoadingPollInterval);
modelLoadingPollInterval = null;
}
});
}