train-modle / templates /index.html
fokan's picture
Force Space rebuild v2.1.0 with incremental training
cca1fa9
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multi-Modal Knowledge Distillation</title>
<link rel="stylesheet" href="/static/css/style.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<!-- Header -->
<header class="header">
<div class="header-content">
<h1><i class="fas fa-brain"></i> Multi-Modal Knowledge Distillation</h1>
<p>Create new AI models through knowledge distillation from multiple pre-trained models</p>
</div>
</header>
<!-- Advanced Features Navigation -->
<nav class="advanced-nav">
<div class="nav-container">
<h3><i class="fas fa-cogs"></i> Advanced Features</h3>
<div class="nav-links">
<a href="/tokens" class="nav-link">
<i class="fas fa-key"></i>
<span>Token Management</span>
<small>Manage HF tokens</small>
</a>
<a href="/medical-datasets" class="nav-link">
<i class="fas fa-database"></i>
<span>Medical Datasets</span>
<small>Specialized medical data</small>
</a>
<a href="#google-models" class="nav-link" onclick="showGoogleModels()">
<i class="fab fa-google"></i>
<span>Google Models</span>
<small>Open source models</small>
</a>
<a href="#system-info" class="nav-link" onclick="showSystemInfo()">
<i class="fas fa-microchip"></i>
<span>System Info</span>
<small>Performance metrics</small>
</a>
</div>
</div>
</nav>
<!-- Main Content -->
<main class="main-content">
<!-- Step 1: Model Selection -->
<section class="step-section" id="step-1">
<div class="step-header">
<h2><span class="step-number">1</span> Select Teacher Models</h2>
<p>Choose 1-10 pre-trained models to serve as teachers for knowledge distillation</p>
</div>
<div class="model-selection">
<!-- Model Management Tabs -->
<div class="card">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs" id="model-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="configured-models-tab" data-bs-toggle="tab" data-bs-target="#configured-models-panel" type="button" role="tab">
<i class="fas fa-list"></i> النماذج المُعدة
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="search-models-tab" data-bs-toggle="tab" data-bs-target="#search-models-panel" type="button" role="tab">
<i class="fas fa-search"></i> البحث عن نماذج
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="upload-models-tab" data-bs-toggle="tab" data-bs-target="#upload-models-panel" type="button" role="tab">
<i class="fas fa-upload"></i> رفع نماذج محلية
</button>
</li>
</ul>
</div>
<div class="card-body">
<div class="tab-content" id="model-tab-content">
<!-- Configured Models Panel -->
<div class="tab-pane fade show active" id="configured-models-panel" role="tabpanel">
<div class="configured-models-section">
<div class="d-flex justify-content-between align-items-center mb-3">
<h6><i class="fas fa-robot"></i> النماذج المعلمة المتاحة</h6>
<button class="btn btn-sm btn-outline-primary" id="refresh-models">
<i class="fas fa-sync"></i> تحديث
</button>
</div>
<div id="configured-models-list" class="models-list">
<div class="text-center">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">جاري تحميل النماذج...</span>
</div>
<p class="mt-2 text-muted">جاري تحميل النماذج المتاحة...</p>
</div>
</div>
</div>
</div>
<!-- Search Models Panel -->
<div class="tab-pane fade" id="search-models-panel" role="tabpanel">
<div class="search-models-section">
<div class="row mb-3">
<div class="col-md-6">
<div class="input-group">
<input type="text" class="form-control" id="model-search-query" placeholder="ابحث عن النماذج...">
<button class="btn btn-primary" type="button" id="search-models-btn">
<i class="fas fa-search"></i> بحث
</button>
</div>
</div>
<div class="col-md-3">
<select class="form-select" id="model-type-filter">
<option value="">جميع الأنواع</option>
<option value="text">نصوص</option>
<option value="vision">رؤية</option>
<option value="audio">صوت</option>
</select>
</div>
<div class="col-md-3">
<button class="btn btn-outline-secondary w-100" id="add-custom-model">
<i class="fas fa-plus"></i> إضافة نموذج مخصص
</button>
</div>
</div>
<!-- Search Results -->
<div id="model-search-results" class="search-results" style="display: none;">
<h6><i class="fas fa-list"></i> نتائج البحث</h6>
<div id="model-search-results-list" class="results-list"></div>
</div>
</div>
</div>
<!-- Upload Models Panel -->
<div class="tab-pane fade" id="upload-models-panel" role="tabpanel">
<div class="upload-section">
<h6><i class="fas fa-upload"></i> رفع نماذج محلية</h6>
<div class="upload-area" id="upload-area">
<div class="upload-content">
<i class="fas fa-cloud-upload-alt"></i>
<p>اسحب وأفلت ملفات النماذج هنا أو انقر للتصفح</p>
<p class="upload-hint">الصيغ المدعومة: .pt, .pth, .bin, .safetensors (حد أقصى 5GB لكل ملف)</p>
</div>
<input type="file" id="file-input" multiple accept=".pt,.pth,.bin,.safetensors" hidden>
</div>
<div class="uploaded-files" id="uploaded-files"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Hugging Face Models -->
<div class="hf-section">
<h3><i class="fab fa-github"></i> Hugging Face Models</h3>
<!-- Token Selection for Model Access -->
<div class="token-selection mb-3">
<label for="model-access-type" class="form-label">
<i class="fas fa-key me-1"></i>نوع الوصول للنموذج
</label>
<select id="model-access-type" class="form-select">
<option value="read">نماذج عامة (رمز القراءة)</option>
<option value="private">نماذج خاصة (رمز مخصص)</option>
<option value="medical">نماذج طبية (رمز مخصص)</option>
<option value="commercial">نماذج تجارية (رمز مخصص)</option>
</select>
<div class="help-text">
<small class="text-muted">سيتم استخدام الرمز المناسب تلقائياً حسب نوع النموذج</small>
</div>
</div>
<div class="hf-input-group">
<input type="text" id="hf-repo" placeholder="Enter Hugging Face model repository (e.g., google/bert_uncased_L-2_H-128_A-2)" class="hf-input">
<button id="test-model" class="btn btn-secondary">
<i class="fas fa-vial"></i> Test
</button>
<button id="add-hf-model" class="btn btn-secondary">
<i class="fas fa-plus"></i> Add Model
</button>
</div>
<div class="hf-token-section">
<label for="hf-token">
<i class="fas fa-key"></i> Hugging Face Token (for private/gated models):
</label>
<div class="token-input-group">
<input type="password" id="hf-token" placeholder="hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" class="hf-input">
<button id="test-token" class="btn btn-secondary">
<i class="fas fa-check"></i> Test Token
</button>
</div>
<small class="token-help">
Optional: Required only for private or gated models.
<a href="https://huggingface.co/settings/tokens" target="_blank">Get your token here</a>
</small>
<div id="token-status" class="token-status hidden"></div>
</div>
<div class="trust-code-section">
<label class="checkbox-label">
<input type="checkbox" id="trust-remote-code">
<span class="checkmark"></span>
<i class="fas fa-shield-alt"></i> Trust Remote Code
</label>
<small class="trust-help">
⚠️ Enable this for models that require custom code execution (e.g., briaai/RMBG-1.4).
<strong>Only enable if you trust the model source!</strong>
</small>
</div>
<!-- Incremental Training Section -->
<div class="incremental-training-section">
<h4><i class="fas fa-layer-group"></i> Incremental Training (Optional)</h4>
<p class="section-description">
Use a previously trained model as a starting point and add new teachers to it.
</p>
<label class="checkbox-label">
<input type="checkbox" id="enable-incremental">
<span class="checkmark"></span>
<i class="fas fa-plus-circle"></i> Enable Incremental Training
</label>
<div id="incremental-options" class="incremental-options hidden">
<div class="form-group">
<label for="student-source">Student Model Source:</label>
<div class="radio-group">
<label class="radio-label">
<input type="radio" name="student-source" value="local" checked>
<span class="radio-mark"></span>
Local Trained Models
</label>
<label class="radio-label">
<input type="radio" name="student-source" value="huggingface">
<span class="radio-mark"></span>
Hugging Face Model
</label>
<label class="radio-label">
<input type="radio" name="student-source" value="space">
<span class="radio-mark"></span>
Hugging Face Space
</label>
<label class="radio-label">
<input type="radio" name="student-source" value="upload">
<span class="radio-mark"></span>
Upload Model Files
</label>
</div>
</div>
<!-- Local Models -->
<div id="local-student-options" class="student-source-options">
<div class="form-group">
<label for="existing-student">Select Local Student Model:</label>
<select id="existing-student" class="form-control">
<option value="">Loading trained models...</option>
</select>
<button id="refresh-students" class="btn btn-secondary btn-sm">
<i class="fas fa-refresh"></i> Refresh
</button>
</div>
</div>
<!-- Hugging Face Models -->
<div id="hf-student-options" class="student-source-options hidden">
<div class="form-group">
<label for="hf-student-repo">Hugging Face Student Model:</label>
<div class="hf-input-group">
<input type="text" id="hf-student-repo" placeholder="username/student-model-name" class="hf-input">
<button id="test-student-model" class="btn btn-secondary">
<i class="fas fa-vial"></i> Test
</button>
<button id="add-hf-student" class="btn btn-secondary">
<i class="fas fa-plus"></i> Add
</button>
</div>
<small>Enter a Hugging Face repository containing a trained student model</small>
</div>
</div>
<!-- Hugging Face Spaces -->
<div id="space-student-options" class="student-source-options hidden">
<div class="form-group">
<label for="hf-space-repo">Hugging Face Space:</label>
<div class="hf-input-group">
<input type="text" id="hf-space-repo" placeholder="username/space-name (e.g., fokan/train-modle2)" class="hf-input">
<button id="test-space-model" class="btn btn-secondary">
<i class="fas fa-vial"></i> Test
</button>
<button id="add-space-student" class="btn btn-secondary">
<i class="fas fa-plus"></i> Add
</button>
</div>
<small>Enter a Hugging Face Space that contains trained models (like fokan/train-modle2)</small>
<div class="alert alert-info" style="margin-top: 0.5rem; font-size: 0.85rem;">
<i class="fas fa-info-circle"></i>
<strong>Note:</strong> This will load models from another training Space. Make sure the Space has completed training and saved models.
</div>
</div>
</div>
<!-- Upload Models -->
<div id="upload-student-options" class="student-source-options hidden">
<div class="form-group">
<label for="student-file-upload">Upload Student Model Files:</label>
<input type="file" id="student-file-upload" multiple accept=".safetensors,.bin,.pt,.json">
<small>Upload model files (.safetensors, .bin, .pt) and config.json</small>
</div>
</div>
<div id="student-info" class="student-info hidden">
<h5>Model Information:</h5>
<div class="info-grid">
<div class="info-item">
<strong>Architecture:</strong> <span id="student-arch">-</span>
</div>
<div class="info-item">
<strong>Original Teachers:</strong> <span id="student-teachers">-</span>
</div>
<div class="info-item">
<strong>Training Sessions:</strong> <span id="student-sessions">-</span>
</div>
<div class="info-item">
<strong>Last Training:</strong> <span id="student-last">-</span>
</div>
</div>
<div class="alert alert-info">
<i class="fas fa-info-circle"></i>
<strong>Note:</strong> New teachers will be added to the existing teachers.
The model will learn from both old and new teachers.
</div>
</div>
</div>
</div>
<div class="suggested-models">
<h4>Suggested Models:</h4>
<div class="model-suggestions">
<button class="suggestion-btn" data-model="google/bert_uncased_L-2_H-128_A-2">BERT Small</button>
<button class="suggestion-btn" data-model="distilbert-base-uncased">DistilBERT</button>
<button class="suggestion-btn" data-model="microsoft/DialoGPT-small">DialoGPT Small</button>
<button class="suggestion-btn" data-model="google/vit-base-patch16-224">ViT Base</button>
<button class="suggestion-btn" data-model="openai/clip-vit-base-patch32">CLIP</button>
<button class="suggestion-btn trust-required" data-model="briaai/RMBG-1.4" title="Requires Trust Remote Code">RMBG-1.4 ⚠️</button>
<button class="suggestion-btn trust-required" data-model="google/siglip-base-patch16-224" title="Advanced Vision Model">SigLIP ⚠️</button>
<button class="suggestion-btn trust-required gated-model" data-model="google/gemma-2b" title="Requires HF Token + Access">Gemma 2B 🔒</button>
</div>
<small class="suggestions-help">
⚠️ Models with warning icon may require "Trust Remote Code" or special requirements.<br>
🔒 Gated models require Hugging Face token and access permission.
</small>
</div>
<div class="hf-models" id="hf-models"></div>
</div>
<!-- URL Models -->
<div class="url-section">
<h3><i class="fas fa-link"></i> Direct URLs</h3>
<div class="url-input-group">
<input type="text" id="model-url" placeholder="Enter direct download URL for model file" class="url-input">
<button id="add-url-model" class="btn btn-secondary">
<i class="fas fa-plus"></i> Add URL
</button>
</div>
<div class="url-models" id="url-models"></div>
</div>
</div>
<!-- Selected Models Summary -->
<div class="selected-models" id="selected-models">
<h3>Selected Teacher Models (<span id="model-count">0</span>/10)</h3>
<div class="models-grid" id="models-grid"></div>
</div>
<div class="step-actions">
<button id="next-step-1" class="btn btn-primary" disabled>
Next: Configure Training <i class="fas fa-arrow-right"></i>
</button>
</div>
</section>
<!-- Step 2: Training Configuration -->
<section class="step-section hidden" id="step-2">
<div class="step-header">
<h2><span class="step-number">2</span> Configure Training</h2>
<p>Set up training parameters for knowledge distillation</p>
</div>
<div class="config-grid">
<!-- Student Model Configuration -->
<div class="config-section">
<h3><i class="fas fa-cog"></i> Student Model</h3>
<div class="form-group">
<label for="hidden-size">Hidden Size</label>
<select id="hidden-size" class="form-control">
<option value="256">256 (Small)</option>
<option value="512">512 (Medium)</option>
<option value="768" selected>768 (Large)</option>
<option value="1024">1024 (Extra Large)</option>
</select>
</div>
<div class="form-group">
<label for="num-layers">Number of Layers</label>
<select id="num-layers" class="form-control">
<option value="3">3 (Fast)</option>
<option value="6" selected>6 (Balanced)</option>
<option value="12">12 (Deep)</option>
</select>
</div>
</div>
<!-- Training Parameters -->
<div class="config-section">
<h3><i class="fas fa-chart-line"></i> Training Parameters</h3>
<div class="form-group">
<label for="max-steps">Training Steps</label>
<select id="max-steps" class="form-control">
<option value="500">500 (Quick)</option>
<option value="1000" selected>1000 (Standard)</option>
<option value="2000">2000 (Thorough)</option>
<option value="5000">5000 (Extensive)</option>
</select>
</div>
<div class="form-group">
<label for="learning-rate">Learning Rate</label>
<select id="learning-rate" class="form-control">
<option value="1e-5">1e-5 (Conservative)</option>
<option value="1e-4" selected>1e-4 (Standard)</option>
<option value="1e-3">1e-3 (Aggressive)</option>
</select>
</div>
<div class="form-group">
<label for="temperature">Temperature</label>
<select id="temperature" class="form-control">
<option value="2">2 (Sharp)</option>
<option value="4" selected>4 (Balanced)</option>
<option value="8">8 (Smooth)</option>
</select>
</div>
</div>
<!-- Distillation Strategy -->
<div class="config-section">
<h3><i class="fas fa-network-wired"></i> Distillation Strategy</h3>
<div class="form-group">
<label for="strategy">Strategy</label>
<select id="strategy" class="form-control">
<option value="ensemble" selected>Ensemble (Average teachers)</option>
<option value="weighted">Weighted (Smart weighting)</option>
<option value="sequential">Sequential (One by one)</option>
</select>
</div>
<div class="form-group">
<label for="alpha">Distillation Weight (α)</label>
<select id="alpha" class="form-control">
<option value="0.5">0.5 (Balanced)</option>
<option value="0.7" selected>0.7 (Favor distillation)</option>
<option value="0.9">0.9 (Strong distillation)</option>
</select>
</div>
</div>
</div>
<div class="step-actions">
<button id="back-step-2" class="btn btn-secondary">
<i class="fas fa-arrow-left"></i> Back
</button>
<button id="start-training" class="btn btn-primary">
<i class="fas fa-play"></i> Start Training
</button>
</div>
</section>
<!-- Step 3: Training Progress -->
<section class="step-section hidden" id="step-3">
<div class="step-header">
<h2><span class="step-number">3</span> Training Progress</h2>
<p>Monitor the knowledge distillation training process</p>
</div>
<div class="progress-container">
<!-- Overall Progress -->
<div class="progress-section">
<h3><i class="fas fa-tasks"></i> Overall Progress</h3>
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress-fill" id="overall-progress"></div>
</div>
<span class="progress-text" id="progress-percentage">0%</span>
</div>
<div class="progress-info">
<div class="info-item">
<span class="info-label">Status:</span>
<span class="info-value" id="training-status">Initializing...</span>
</div>
<div class="info-item">
<span class="info-label">Step:</span>
<span class="info-value" id="current-step">0 / 1000</span>
</div>
<div class="info-item">
<span class="info-label">ETA:</span>
<span class="info-value" id="eta">Calculating...</span>
</div>
</div>
</div>
<!-- Training Metrics -->
<div class="metrics-section">
<h3><i class="fas fa-chart-area"></i> Training Metrics</h3>
<div class="metrics-grid">
<div class="metric-card">
<div class="metric-label">Loss</div>
<div class="metric-value" id="current-loss">-</div>
</div>
<div class="metric-card">
<div class="metric-label">Learning Rate</div>
<div class="metric-value" id="learning-rate-display">-</div>
</div>
<div class="metric-card">
<div class="metric-label">Temperature</div>
<div class="metric-value" id="temperature-display">-</div>
</div>
</div>
</div>
<!-- Live Console -->
<div class="console-section">
<h3><i class="fas fa-terminal"></i> Live Console</h3>
<div class="console" id="training-console">
<div class="console-line">Initializing training session...</div>
</div>
</div>
</div>
<div class="step-actions">
<button id="back-step-3" class="btn btn-secondary">
<i class="fas fa-arrow-left"></i> Back to Configuration
</button>
<button id="cancel-training" class="btn btn-danger">
<i class="fas fa-stop"></i> Cancel Training
</button>
<button id="download-model" class="btn btn-success hidden">
<i class="fas fa-download"></i> Download Trained Model
</button>
<button id="upload-to-hf" class="btn btn-info hidden">
<i class="fab fa-github"></i> Upload to Hugging Face
</button>
<button id="start-new-training" class="btn btn-primary hidden">
<i class="fas fa-plus"></i> Start New Training
</button>
</div>
</section>
</main>
<!-- Footer -->
<footer class="footer">
<p>&copy; 2024 Multi-Modal Knowledge Distillation. Built with FastAPI and PyTorch.</p>
</footer>
</div>
<!-- Modals -->
<!-- Upload to HF Modal -->
<div id="hf-upload-modal" class="modal hidden">
<div class="modal-content">
<div class="modal-header">
<h3><i class="fab fa-github"></i> Upload to Hugging Face</h3>
<button class="modal-close">&times;</button>
</div>
<div class="modal-body">
<form id="hf-upload-form">
<div class="form-group">
<label for="hf-repo-name">Repository Name *</label>
<input type="text" id="hf-repo-name" placeholder="username/model-name" required onblur="app.validateRepoName()">
<small>Format: your-username/your-model-name (will be auto-suggested based on your token)</small>
<div id="repo-validation-status" class="validation-status hidden"></div>
</div>
<div class="form-group">
<label for="hf-description">Model Description</label>
<textarea id="hf-description" placeholder="Describe your model..." rows="3"></textarea>
</div>
<div class="form-group">
<label for="hf-upload-token">Hugging Face Token *</label>
<input type="password" id="hf-upload-token" placeholder="hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" required onblur="app.validateTokenAndSuggestName(this.value)">
<small>Your HF token with <strong>write permissions</strong>. <a href="https://huggingface.co/settings/tokens" target="_blank">Get token here</a></small>
<div class="alert alert-warning" style="margin-top: 0.5rem; font-size: 0.85rem;">
<strong>⚠️ Important:</strong> Make sure your token has "Write" permissions and you're using your correct username in the repository name.
</div>
</div>
<div class="form-group">
<label class="checkbox-label">
<input type="checkbox" id="hf-private">
<span class="checkmark"></span>
Make repository private
</label>
</div>
</form>
</div>
<div class="modal-footer">
<button id="cancel-hf-upload" class="btn btn-secondary">Cancel</button>
<button id="confirm-hf-upload" class="btn btn-primary">
<i class="fas fa-upload"></i> Upload to Hugging Face
</button>
</div>
</div>
</div>
<div class="modal hidden" id="confirm-modal">
<div class="modal-content">
<h3>Confirm Training</h3>
<p>Are you sure you want to start training with the selected configuration?</p>
<div class="modal-actions">
<button id="confirm-cancel" class="btn btn-secondary">Cancel</button>
<button id="confirm-start" class="btn btn-primary">Start Training</button>
</div>
</div>
</div>
<div class="modal hidden" id="error-modal">
<div class="modal-content">
<h3><i class="fas fa-exclamation-triangle"></i> Error</h3>
<p id="error-message">An error occurred.</p>
<div class="modal-actions">
<button id="error-ok" class="btn btn-primary">OK</button>
</div>
</div>
</div>
<script src="/static/js/main.js"></script>
</body>
</html>