Update ISO installer tiers and backend deployment
This commit is contained in:
1 parent
79784a6743
commit
56668f7bdc
38 files changed
+7206
-175
No files matched your search
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Cezen AI Suite — First Boot Web Setup Server
|
||||
Nexus One AI — First Boot Web Setup Server
|
||||
Serves on port 80. Access from any browser on the same network.
|
||||
"""
|
||||
import os, json, subprocess, threading, time, socket, ipaddress
|
||||
@@ -123,7 +123,7 @@ HTML = r"""<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Cezen AI Suite — Server Setup</title>
|
||||
<title>Nexus One AI — Server Setup</title>
|
||||
<style>
|
||||
:root {
|
||||
--navy: #1B2A4A;
|
||||
@@ -317,19 +317,24 @@ HTML = r"""<!DOCTYPE html>
|
||||
<h2>Select AI Package Tier</h2>
|
||||
<p class="desc">Choose the tier that matches your GPU hardware.</p>
|
||||
<div class="tier-grid">
|
||||
<div class="tier-card" id="tier-entry" onclick="selectTier('entry')">
|
||||
<div class="tier-card" id="tier-starter" onclick="selectTier('starter')">
|
||||
<div class="tier-name">Starter</div>
|
||||
<div class="tier-gpu">1× RTX 5090 / 32GB VRAM</div>
|
||||
<div class="tier-users">Small team deployment</div>
|
||||
</div>
|
||||
<div class="tier-card" id="tier-basic" onclick="selectTier('basic')">
|
||||
<div class="tier-name">Entry</div>
|
||||
<div class="tier-gpu">3× NVIDIA L40S</div>
|
||||
<div class="tier-gpu">1× NVIDIA RTX Pro 6000 (96GB)</div>
|
||||
<div class="tier-users">Up to 20 concurrent users</div>
|
||||
</div>
|
||||
<div class="tier-card" id="tier-mid" onclick="selectTier('mid')">
|
||||
<div class="tier-name">Mid</div>
|
||||
<div class="tier-gpu">3× RTX Pro 6000</div>
|
||||
<div class="tier-users">Up to 50 concurrent users</div>
|
||||
<div class="tier-card" id="tier-pro" onclick="selectTier('pro')">
|
||||
<div class="tier-name">Pro</div>
|
||||
<div class="tier-gpu">2× RTX 5090 / RTX Pro class</div>
|
||||
<div class="tier-users">Up to 100 concurrent users</div>
|
||||
</div>
|
||||
<div class="tier-card" id="tier-advanced" onclick="selectTier('advanced')">
|
||||
<div class="tier-name">Advanced</div>
|
||||
<div class="tier-gpu">8× HGX H200</div>
|
||||
<div class="tier-card" id="tier-max" onclick="selectTier('max')">
|
||||
<div class="tier-name">Max</div>
|
||||
<div class="tier-gpu">4–8× H100/H200/A100 class</div>
|
||||
<div class="tier-users">200+ concurrent users</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -369,7 +374,7 @@ HTML = r"""<!DOCTYPE html>
|
||||
|
||||
<div class="progress-wrap" id="progress-wrap">
|
||||
<div class="card">
|
||||
<h2>Installing Cezen AI Suite...</h2>
|
||||
<h2>Installing Nexus One AI...</h2>
|
||||
<div class="progress-bar-bg"><div class="progress-bar" id="progress-bar"></div></div>
|
||||
<p id="progress-label" style="font-size:13px;color:var(--muted);margin-bottom:12px">Starting...</p>
|
||||
<div class="log-box" id="log-box"></div>
|
||||
@@ -379,7 +384,7 @@ HTML = r"""<!DOCTYPE html>
|
||||
<div id="done-screen" class="hidden">
|
||||
<div class="done-icon">✅</div>
|
||||
<h2>Installation Complete!</h2>
|
||||
<p>Your Cezen AI Suite is ready.</p>
|
||||
<p>Your Nexus One AI is ready.</p>
|
||||
<div class="services card" style="margin-top:24px;text-align:left">
|
||||
<div class="summary-row"><span class="key">Open WebUI</span><span class="val badge">:3001</span></div>
|
||||
<div class="summary-row"><span class="key">JupyterLab</span><span class="val badge">:8888</span></div>
|
||||
@@ -400,7 +405,7 @@ HTML = r"""<!DOCTYPE html>
|
||||
<script>
|
||||
// ── State ──────────────────────────────────────────────────
|
||||
let netMode = 'dhcp';
|
||||
let selectedTier = 'entry';
|
||||
let selectedTier = 'basic';
|
||||
let tools = {
|
||||
ollama: { name: 'Ollama + Open WebUI', desc: 'LLM inference & chat', icon: '🤖', on: true },
|
||||
jupyterlab: { name: 'JupyterLab', desc: 'Notebook environment', icon: '📓', on: true },
|
||||
@@ -418,7 +423,7 @@ window.onload = () => {
|
||||
document.getElementById('current-ip').textContent = d.ip || 'unknown';
|
||||
});
|
||||
renderTools();
|
||||
selectTier('entry');
|
||||
selectTier('basic');
|
||||
};
|
||||
|
||||
// ── Navigation ─────────────────────────────────────────────
|
||||
@@ -467,7 +472,7 @@ function applyStaticIP() {
|
||||
// ── Tier ───────────────────────────────────────────────────
|
||||
function selectTier(t) {
|
||||
selectedTier = t;
|
||||
['entry','mid','advanced'].forEach(x =>
|
||||
['starter','basic','pro','max'].forEach(x =>
|
||||
document.getElementById('tier-'+x).classList.toggle('selected', x===t));
|
||||
}
|
||||
|
||||
@@ -707,7 +712,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
|
||||
elif path == "/api/install":
|
||||
global install_proc
|
||||
tier = body.get("tier", "entry")
|
||||
tier = body.get("tier", "basic")
|
||||
skip = body.get("skip_tools", [])
|
||||
if not install_status["running"]:
|
||||
t = threading.Thread(target=run_install, args=(tier, skip), daemon=True)
|
||||
@@ -752,7 +757,7 @@ def show_console_banner(ip):
|
||||
try:
|
||||
with open("/etc/issue", "w") as f:
|
||||
f.write(f"Ubuntu 22.04.5 LTS \\n \\l\n\n")
|
||||
f.write(f" \033[1;36mCezen AI Suite Setup:\033[0m http://{ip} | http://cezenai.local\n\n")
|
||||
f.write(f" \033[1;36mNexus One AI Setup:\033[0m http://{ip} | http://cezenai.local\n\n")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
Reference in new issue
Block a user