Spaces:
Sleeping
Sleeping
""" | |
Evolution Aurora - WORKING DEMO with Real Visual Effects | |
""" | |
import json | |
import os | |
import random | |
import time | |
from datetime import datetime | |
import gradio as gr | |
import plotly.graph_objects as go | |
import numpy as np | |
# Global state | |
state = { | |
"fitness_history": [0.9333], | |
"events": [], | |
"particles": [], | |
"iteration": 0, | |
"running": False, | |
"variants_evaluated": 0, | |
"start_time": None, | |
"achievements": [], | |
"high_score": 0.9333, | |
"player_name": f"Player_{random.randint(1000, 9999)}", | |
"multiplayer_active": False, | |
"other_players": {}, | |
"global_best": 0.9333, | |
"boss_active": False, | |
"boss_health": 0, | |
"boss_defeated": False | |
} | |
# Simulated multiplayer data | |
FAKE_PLAYERS = [ | |
{"name": "NeuralNinja_JP", "country": "π―π΅", "fitness": 0.9455, "status": "evolving"}, | |
{"name": "CodeEvolver_US", "country": "πΊπΈ", "fitness": 0.9523, "status": "evolving"}, | |
{"name": "AIWizard_UK", "country": "π¬π§", "fitness": 0.9812, "status": "leading"}, | |
{"name": "QuantumCoder_DE", "country": "π©πͺ", "fitness": 0.9234, "status": "struggling"}, | |
{"name": "MatrixMaster_FR", "country": "π«π·", "fitness": 0.9667, "status": "evolving"} | |
] | |
# Achievement definitions | |
ACHIEVEMENTS = { | |
"first_evolution": {"name": "π― First Evolution!", "desc": "Started your first evolution", "threshold": 1}, | |
"fast_learner": {"name": "β‘ Fast Learner", "desc": "Reached 95% fitness", "threshold": 0.95}, | |
"perfectionist": {"name": "π Perfectionist", "desc": "Reached 99% fitness", "threshold": 0.99}, | |
"speed_demon": {"name": "ποΈ Speed Demon", "desc": "Process 10+ variants/sec", "threshold": 10}, | |
"marathon": {"name": "π Marathon Runner", "desc": "Run 10+ generations", "threshold": 10} | |
} | |
# HTML for aurora effect with epic intro | |
AURORA_HTML = """ | |
<div id="aurora-container" style="position: relative; width: 100%; height: 400px; background: linear-gradient(to bottom, #000428, #004e92); overflow: hidden; border-radius: 10px;"> | |
<canvas id="aurora-canvas" style="width: 100%; height: 100%;"></canvas> | |
<div id="title-container" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; z-index: 10;"> | |
<h1 id="main-title" style="color: #00FF88; font-size: 64px; margin: 0; text-shadow: 0 0 30px #00FF88, 0 0 60px #00FF88; animation: pulse 2s ease-in-out infinite;"> | |
Evolution Aurora | |
</h1> | |
<p style="color: #FFD700; font-size: 28px; text-shadow: 0 0 20px #FFD700; margin-top: 10px; opacity: 0; animation: fadeIn 2s ease-in 1s forwards;"> | |
Watch AI Learn to Code in Real-Time | |
</p> | |
<p id="welcome-msg" style="color: #00AAFF; font-size: 20px; margin-top: 20px; opacity: 0; animation: fadeIn 2s ease-in 2s forwards;"> | |
π§ Neural Network Visualization | π Synapses Fire with Each Improvement | |
</p> | |
</div> | |
</div> | |
<style> | |
@keyframes pulse { | |
0% { transform: scale(1); opacity: 0.8; } | |
50% { transform: scale(1.05); opacity: 1; } | |
100% { transform: scale(1); opacity: 0.8; } | |
} | |
@keyframes fadeIn { | |
to { opacity: 1; } | |
} | |
@keyframes float { | |
0%, 100% { transform: translateY(0); } | |
50% { transform: translateY(-10px); } | |
} | |
#aurora-container { | |
box-shadow: 0 10px 40px rgba(123, 63, 242, 0.5); | |
} | |
</style> | |
<script> | |
const canvas = document.getElementById('aurora-canvas'); | |
const ctx = canvas.getContext('2d'); | |
let particles = []; | |
let weatherSystem = { | |
raindrops: [], | |
lightning: false, | |
lightningTimer: 0, | |
rainbow: false, | |
rainbowOpacity: 0 | |
}; | |
function resizeCanvas() { | |
canvas.width = canvas.offsetWidth; | |
canvas.height = canvas.offsetHeight; | |
} | |
resizeCanvas(); | |
window.addEventListener('resize', resizeCanvas); | |
class Particle { | |
constructor(x, y, color, type = 'normal') { | |
this.x = x; | |
this.y = y; | |
this.vx = (Math.random() - 0.5) * 10; | |
this.vy = (Math.random() - 0.5) * 10 - 5; | |
this.life = 100; | |
this.color = color; | |
this.size = Math.random() * 4 + 2; | |
this.type = type; | |
this.angle = Math.random() * Math.PI * 2; | |
this.splitCount = 0; | |
this.trail = []; | |
} | |
update() { | |
// Store trail for quantum particles | |
if (this.type === 'quantum' && this.trail.length < 20) { | |
this.trail.push({x: this.x, y: this.y, alpha: this.life / 100}); | |
} | |
// Quantum behavior | |
if (this.type === 'quantum') { | |
// Quantum tunneling | |
if (Math.random() < 0.02) { | |
this.x += (Math.random() - 0.5) * 100; | |
this.y += (Math.random() - 0.5) * 100; | |
} | |
// Wave function collapse | |
this.angle += 0.1; | |
this.vx += Math.sin(this.angle) * 0.5; | |
this.vy += Math.cos(this.angle) * 0.5; | |
// Particle splitting | |
if (this.life === 50 && this.splitCount === 0) { | |
this.split(); | |
} | |
} | |
// Mouse attraction | |
const dx = mouseX - this.x; | |
const dy = mouseY - this.y; | |
const dist = Math.sqrt(dx * dx + dy * dy); | |
if (dist < 200 && dist > 0) { | |
const force = 0.5 * (1 - dist / 200); | |
this.vx += (dx / dist) * force; | |
this.vy += (dy / dist) * force; | |
} | |
this.x += this.vx; | |
this.y += this.vy; | |
this.vy += 0.2; | |
this.life--; | |
this.vx *= 0.98; | |
this.vy *= 0.98; | |
} | |
split() { | |
this.splitCount++; | |
for (let i = 0; i < 3; i++) { | |
const newParticle = new Particle(this.x, this.y, this.color, 'quantum'); | |
newParticle.vx = (Math.random() - 0.5) * 15; | |
newParticle.vy = (Math.random() - 0.5) * 15; | |
newParticle.life = 50; | |
newParticle.size = this.size * 0.7; | |
particles.push(newParticle); | |
} | |
} | |
draw() { | |
// Draw trail for quantum particles | |
if (this.type === 'quantum' && this.trail.length > 1) { | |
ctx.save(); | |
ctx.strokeStyle = this.color; | |
ctx.lineWidth = this.size * 0.5; | |
for (let i = 1; i < this.trail.length; i++) { | |
ctx.globalAlpha = this.trail[i].alpha * 0.3; | |
ctx.beginPath(); | |
ctx.moveTo(this.trail[i-1].x, this.trail[i-1].y); | |
ctx.lineTo(this.trail[i].x, this.trail[i].y); | |
ctx.stroke(); | |
} | |
ctx.restore(); | |
} | |
ctx.save(); | |
ctx.globalAlpha = this.life / 100; | |
ctx.fillStyle = this.color; | |
ctx.shadowBlur = this.type === 'quantum' ? 30 : 20; | |
ctx.shadowColor = this.color; | |
// Draw quantum particles with special effect | |
if (this.type === 'quantum') { | |
// Outer glow | |
ctx.beginPath(); | |
ctx.arc(this.x, this.y, this.size * 2, 0, Math.PI * 2); | |
ctx.globalAlpha = (this.life / 100) * 0.3; | |
ctx.fill(); | |
// Inner core | |
ctx.globalAlpha = this.life / 100; | |
ctx.fillStyle = '#FFFFFF'; | |
ctx.beginPath(); | |
ctx.arc(this.x, this.y, this.size * 0.5, 0, Math.PI * 2); | |
ctx.fill(); | |
} | |
// Normal particle | |
ctx.fillStyle = this.color; | |
ctx.beginPath(); | |
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2); | |
ctx.fill(); | |
ctx.restore(); | |
} | |
} | |
function createBurst(intensity, type = 'normal') { | |
const centerX = canvas.width / 2; | |
const centerY = canvas.height / 2; | |
const colors = ['#00FF88', '#7B3FF2', '#00AAFF', '#FFD700', '#FF6B6B', '#4ECDC4', '#45B7D1']; | |
if (type === 'quantum' || intensity > 4) { | |
// Create quantum particles for high intensity | |
for (let i = 0; i < 30 * intensity; i++) { | |
const angle = (Math.PI * 2 * i) / (30 * intensity); | |
const speed = Math.random() * 20 + 10; | |
const color = colors[Math.floor(Math.random() * colors.length)]; | |
const quantum = new Particle( | |
centerX + Math.cos(angle) * 30, | |
centerY + Math.sin(angle) * 30, | |
color, | |
'quantum' | |
); | |
quantum.vx = Math.cos(angle) * speed; | |
quantum.vy = Math.sin(angle) * speed; | |
quantum.size = Math.random() * 6 + 3; | |
particles.push(quantum); | |
} | |
} | |
// Create normal burst | |
for (let i = 0; i < 100 * intensity; i++) { | |
const angle = (Math.PI * 2 * i) / (100 * intensity); | |
const speed = Math.random() * 15 + 5; | |
const color = colors[Math.floor(Math.random() * colors.length)]; | |
particles.push(new Particle( | |
centerX + Math.cos(angle) * 20, | |
centerY + Math.sin(angle) * 20, | |
color | |
)); | |
} | |
// Add some special lightning particles | |
if (intensity > 3) { | |
for (let j = 0; j < 20; j++) { | |
const lightningParticle = new Particle(centerX, centerY, '#FFFFFF'); | |
lightningParticle.size = Math.random() * 8 + 4; | |
lightningParticle.life = 150; | |
particles.push(lightningParticle); | |
} | |
} | |
// Add wormhole effect at 99% | |
if (intensity > 5) { | |
createWormhole(); | |
} | |
} | |
function createWormhole() { | |
const centerX = canvas.width / 2; | |
const centerY = canvas.height / 2; | |
// Create spiral of quantum particles | |
for (let i = 0; i < 100; i++) { | |
const angle = (i / 100) * Math.PI * 8; | |
const radius = i * 2; | |
const wormhole = new Particle( | |
centerX + Math.cos(angle) * radius, | |
centerY + Math.sin(angle) * radius, | |
'#FF00FF', | |
'quantum' | |
); | |
wormhole.vx = -Math.cos(angle) * 5; | |
wormhole.vy = -Math.sin(angle) * 5; | |
wormhole.life = 200; | |
particles.push(wormhole); | |
} | |
} | |
// Click to damage boss | |
canvas.addEventListener('click', (e) => { | |
const rect = canvas.getBoundingClientRect(); | |
const x = (e.clientX - rect.left) * (canvas.width / rect.width); | |
const y = (e.clientY - rect.top) * (canvas.height / rect.height); | |
// Create burst at click location | |
for (let i = 0; i < 50; i++) { | |
const angle = (Math.PI * 2 * i) / 50; | |
const speed = Math.random() * 10 + 5; | |
particles.push(new Particle( | |
x + Math.cos(angle) * 10, | |
y + Math.sin(angle) * 10, | |
['#00FF88', '#7B3FF2', '#00AAFF', '#FFD700'][Math.floor(Math.random() * 4)] | |
)); | |
} | |
// Damage boss if active and clicked on it | |
if (bossActive && bossHealth > 0) { | |
const bossX = canvas.width / 2; | |
const bossY = canvas.height / 3; | |
const dist = Math.sqrt((x - bossX) ** 2 + (y - bossY) ** 2); | |
if (dist < 80) { | |
bossHealth = Math.max(0, bossHealth - 10); | |
createBurst(3, 'quantum'); | |
if (bossHealth <= 0 && bossActive) { | |
// Boss defeated! | |
bossActive = false; | |
window.bossDamageCallback && window.bossDamageCallback(); | |
// Victory effects | |
for (let i = 0; i < 5; i++) { | |
setTimeout(() => { | |
createBurst(10, 'quantum'); | |
triggerGlitch(); | |
}, i * 200); | |
} | |
} | |
} | |
} | |
}); | |
// Track current fitness for neural network | |
let currentFitness = 0.9333; | |
// Weather System | |
class Raindrop { | |
constructor() { | |
this.x = Math.random() * canvas.width; | |
this.y = -10; | |
this.speed = Math.random() * 5 + 10; | |
this.length = Math.random() * 20 + 10; | |
this.opacity = Math.random() * 0.5 + 0.3; | |
} | |
update() { | |
this.y += this.speed; | |
if (this.y > canvas.height) { | |
this.y = -10; | |
this.x = Math.random() * canvas.width; | |
} | |
} | |
draw() { | |
ctx.save(); | |
ctx.strokeStyle = `rgba(100, 150, 255, ${this.opacity})`; | |
ctx.lineWidth = 1; | |
ctx.beginPath(); | |
ctx.moveTo(this.x, this.y); | |
ctx.lineTo(this.x, this.y + this.length); | |
ctx.stroke(); | |
ctx.restore(); | |
} | |
} | |
function drawWeather() { | |
// Rain effect | |
weatherSystem.raindrops.forEach(drop => { | |
drop.update(); | |
drop.draw(); | |
}); | |
// Lightning effect | |
if (weatherSystem.lightning && weatherSystem.lightningTimer > 0) { | |
ctx.save(); | |
ctx.fillStyle = `rgba(255, 255, 255, ${weatherSystem.lightningTimer / 10})`; | |
ctx.fillRect(0, 0, canvas.width, canvas.height); | |
// Draw lightning bolt | |
if (weatherSystem.lightningTimer > 5) { | |
ctx.strokeStyle = '#FFFFFF'; | |
ctx.lineWidth = 3; | |
ctx.shadowBlur = 20; | |
ctx.shadowColor = '#00AAFF'; | |
const startX = Math.random() * canvas.width; | |
const segments = 5; | |
let x = startX; | |
let y = 0; | |
ctx.beginPath(); | |
ctx.moveTo(x, y); | |
for (let i = 0; i < segments; i++) { | |
x += (Math.random() - 0.5) * 100; | |
y += canvas.height / segments; | |
ctx.lineTo(x, y); | |
} | |
ctx.stroke(); | |
} | |
ctx.restore(); | |
weatherSystem.lightningTimer--; | |
} | |
// Rainbow effect | |
if (weatherSystem.rainbow && weatherSystem.rainbowOpacity > 0) { | |
ctx.save(); | |
const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height / 2); | |
const colors = ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#0000FF', '#4B0082', '#9400D3']; | |
colors.forEach((color, i) => { | |
gradient.addColorStop(i / (colors.length - 1), color); | |
}); | |
ctx.fillStyle = gradient; | |
ctx.globalAlpha = weatherSystem.rainbowOpacity; | |
ctx.beginPath(); | |
ctx.arc(canvas.width / 2, canvas.height, canvas.width, 0, Math.PI, true); | |
ctx.fill(); | |
ctx.restore(); | |
} | |
} | |
function triggerLightning() { | |
weatherSystem.lightning = true; | |
weatherSystem.lightningTimer = 10; | |
// Create burst at lightning strike point | |
createBurst(3); | |
} | |
function startRain() { | |
// Create raindrops | |
for (let i = 0; i < 50; i++) { | |
weatherSystem.raindrops.push(new Raindrop()); | |
} | |
} | |
function stopRain() { | |
weatherSystem.raindrops = []; | |
} | |
function showRainbow() { | |
weatherSystem.rainbow = true; | |
// Fade in | |
const fadeIn = setInterval(() => { | |
weatherSystem.rainbowOpacity += 0.02; | |
if (weatherSystem.rainbowOpacity >= 0.3) { | |
clearInterval(fadeIn); | |
// Fade out after 3 seconds | |
setTimeout(() => { | |
const fadeOut = setInterval(() => { | |
weatherSystem.rainbowOpacity -= 0.02; | |
if (weatherSystem.rainbowOpacity <= 0) { | |
weatherSystem.rainbow = false; | |
weatherSystem.rainbowOpacity = 0; | |
clearInterval(fadeOut); | |
} | |
}, 50); | |
}, 3000); | |
} | |
}, 50); | |
} | |
function animate() { | |
ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'; | |
ctx.fillRect(0, 0, canvas.width, canvas.height); | |
// Draw weather effects first (background) | |
drawWeather(); | |
// Draw neural network (middle layer) | |
neuralNetwork.update(currentFitness); | |
neuralNetwork.draw(ctx); | |
// Draw boss (above neural network) | |
drawBoss(); | |
// Mouse glow effect | |
const gradient = ctx.createRadialGradient(mouseX, mouseY, 0, mouseX, mouseY, 100); | |
gradient.addColorStop(0, 'rgba(123, 63, 242, 0.3)'); | |
gradient.addColorStop(0.5, 'rgba(0, 170, 255, 0.1)'); | |
gradient.addColorStop(1, 'rgba(0, 255, 136, 0)'); | |
ctx.fillStyle = gradient; | |
ctx.fillRect(mouseX - 100, mouseY - 100, 200, 200); | |
// Draw particles (foreground layer) | |
particles = particles.filter(p => { | |
p.update(); | |
p.draw(); | |
return p.life > 0; | |
}); | |
// Draw cursor sparkle | |
ctx.save(); | |
ctx.fillStyle = '#FFFFFF'; | |
ctx.shadowBlur = 20; | |
ctx.shadowColor = '#00FF88'; | |
ctx.beginPath(); | |
ctx.arc(mouseX, mouseY, 3, 0, Math.PI * 2); | |
ctx.fill(); | |
ctx.restore(); | |
requestAnimationFrame(animate); | |
} | |
animate(); | |
// Trigger burst every 2 seconds | |
setInterval(() => { | |
if (Math.random() > 0.3) { | |
createBurst(Math.random() * 2 + 1); | |
} | |
}, 2000); | |
// Reality glitch effect | |
let glitchActive = false; | |
function triggerGlitch() { | |
glitchActive = true; | |
document.body.style.filter = 'hue-rotate(180deg) invert(100%)'; | |
setTimeout(() => { | |
document.body.style.filter = 'hue-rotate(90deg)'; | |
}, 100); | |
setTimeout(() => { | |
document.body.style.filter = 'none'; | |
glitchActive = false; | |
}, 300); | |
// Create massive quantum burst | |
createBurst(10, 'quantum'); | |
} | |
// Boss battle system | |
let bossActive = false; | |
let bossHealth = 100; | |
function drawBoss() { | |
if (!bossActive) return; | |
const bossX = canvas.width / 2; | |
const bossY = canvas.height / 3; | |
// Boss body (menacing eye) | |
ctx.save(); | |
ctx.fillStyle = '#FF0000'; | |
ctx.strokeStyle = '#000000'; | |
ctx.lineWidth = 3; | |
// Outer eye | |
ctx.beginPath(); | |
ctx.ellipse(bossX, bossY, 80, 40, 0, 0, Math.PI * 2); | |
ctx.fill(); | |
ctx.stroke(); | |
// Inner eye | |
ctx.fillStyle = '#000000'; | |
ctx.beginPath(); | |
ctx.arc(bossX, bossY, 20, 0, Math.PI * 2); | |
ctx.fill(); | |
// Pupil that follows mouse | |
const dx = mouseX - bossX; | |
const dy = mouseY - bossY; | |
const angle = Math.atan2(dy, dx); | |
const pupilX = bossX + Math.cos(angle) * 10; | |
const pupilY = bossY + Math.sin(angle) * 10; | |
ctx.fillStyle = '#FFFFFF'; | |
ctx.beginPath(); | |
ctx.arc(pupilX, pupilY, 5, 0, Math.PI * 2); | |
ctx.fill(); | |
// Health bar | |
ctx.fillStyle = 'rgba(255, 0, 0, 0.8)'; | |
ctx.fillRect(bossX - 50, bossY - 70, 100, 10); | |
ctx.fillStyle = 'rgba(0, 255, 0, 0.8)'; | |
ctx.fillRect(bossX - 50, bossY - 70, bossHealth, 10); | |
ctx.strokeRect(bossX - 50, bossY - 70, 100, 10); | |
// Boss title | |
ctx.fillStyle = '#FFFFFF'; | |
ctx.font = 'bold 20px Arial'; | |
ctx.textAlign = 'center'; | |
ctx.fillText('THE LOCAL OPTIMUM', bossX, bossY - 80); | |
ctx.restore(); | |
// Boss attacks | |
if (Math.random() < 0.02 && bossHealth > 0) { | |
// Laser beam attack | |
for (let i = 0; i < 20; i++) { | |
const attackParticle = new Particle( | |
bossX + (Math.random() - 0.5) * 50, | |
bossY, | |
'#FF0000' | |
); | |
attackParticle.vy = 10; | |
attackParticle.vx = (Math.random() - 0.5) * 5; | |
particles.push(attackParticle); | |
} | |
} | |
} | |
// Watch for quantum and boss events | |
const watchQuantum = new MutationObserver((mutations) => { | |
mutations.forEach((mutation) => { | |
const text = mutation.target.textContent || ''; | |
if (text.includes('QUANTUM REALM ENTERED')) { | |
createBurst(5, 'quantum'); | |
} else if (text.includes('BOSS APPEARED')) { | |
bossActive = true; | |
bossHealth = 100; | |
speak("Warning! Final boss detected. The Local Optimum blocks your path to perfection!", 1.1, 0.8); | |
} else if (text.includes('BOSS DEFEATED')) { | |
bossActive = false; | |
bossHealth = 0; | |
createBurst(20, 'quantum'); // Massive victory explosion | |
triggerGlitch(); | |
speak("Victory! You have achieved perfection! 100 percent fitness!", 1.2, 1.2); | |
} | |
// Check for fitness updates | |
const fitnessMatch = text.match(/Fitness (\d+\.\d+)/); | |
if (fitnessMatch) { | |
const newFitness = parseFloat(fitnessMatch[1]); | |
if (newFitness > currentFitness) { | |
const improvement = newFitness - currentFitness; | |
currentFitness = newFitness; | |
// Trigger neural network firing | |
neuralNetwork.triggerFitnessImprovement(improvement); | |
// Weather effects based on improvement | |
if (improvement > 0.005) { | |
triggerLightning(); // Lightning for major improvements | |
} | |
// Rainbow at 95% | |
if (newFitness >= 0.95 && currentFitness < 0.96) { | |
showRainbow(); | |
stopRain(); | |
} | |
// Rain when plateauing | |
if (improvement < 0.002 && weatherSystem.raindrops.length === 0) { | |
startRain(); | |
} | |
} | |
} | |
}); | |
}); | |
setTimeout(() => { | |
const eventLog = document.querySelector('[id*="event_log"]'); | |
if (eventLog) watchQuantum.observe(eventLog, { childList: true, subtree: true }); | |
// Also watch fitness display directly | |
const fitnessDisplay = document.querySelector('[id*="fitness_display"]'); | |
if (fitnessDisplay) { | |
const fitnessObserver = new MutationObserver((mutations) => { | |
mutations.forEach((mutation) => { | |
const input = mutation.target.querySelector('input'); | |
if (input && input.value) { | |
const newFitness = parseFloat(input.value); | |
if (!isNaN(newFitness) && newFitness !== currentFitness) { | |
currentFitness = newFitness; | |
} | |
} | |
}); | |
}); | |
fitnessObserver.observe(fitnessDisplay, { childList: true, subtree: true, attributes: true }); | |
} | |
}, 2000); | |
// Epic initial burst sequence | |
setTimeout(() => { | |
createBurst(5); // Massive initial burst | |
document.getElementById('welcome-msg').style.fontSize = '24px'; | |
}, 500); | |
setTimeout(() => createBurst(3), 1500); | |
setTimeout(() => createBurst(4), 2500); | |
// Neural Network Visualization | |
class NeuralNetwork { | |
constructor() { | |
this.neurons = []; | |
this.synapses = []; | |
this.layers = [5, 8, 6, 4, 1]; // Network architecture | |
this.setupNetwork(); | |
this.pulsePhase = 0; | |
this.lastFitness = 0.9333; | |
this.firingNeurons = new Set(); | |
this.brainWavePhase = 0; | |
} | |
setupNetwork() { | |
const centerX = canvas.width / 2; | |
const centerY = canvas.height / 2; | |
const networkWidth = 400; | |
const networkHeight = 300; | |
// Create neurons for each layer | |
for (let layer = 0; layer < this.layers.length; layer++) { | |
const layerNeurons = []; | |
const x = centerX - networkWidth/2 + (layer / (this.layers.length - 1)) * networkWidth; | |
for (let i = 0; i < this.layers[layer]; i++) { | |
const y = centerY - networkHeight/2 + ((i + 0.5) / this.layers[layer]) * networkHeight; | |
layerNeurons.push({ | |
x: x, | |
y: y, | |
layer: layer, | |
index: i, | |
activation: Math.random() * 0.3, | |
pulseOffset: Math.random() * Math.PI * 2, | |
size: layer === this.layers.length - 1 ? 15 : 8 - layer // Output neuron is bigger | |
}); | |
} | |
this.neurons.push(layerNeurons); | |
} | |
// Create synapses between layers | |
for (let layer = 0; layer < this.layers.length - 1; layer++) { | |
for (let i = 0; i < this.neurons[layer].length; i++) { | |
for (let j = 0; j < this.neurons[layer + 1].length; j++) { | |
this.synapses.push({ | |
from: this.neurons[layer][i], | |
to: this.neurons[layer + 1][j], | |
weight: Math.random() * 0.5 + 0.1, | |
active: false, | |
pulseProgress: 0 | |
}); | |
} | |
} | |
} | |
} | |
update(currentFitness) { | |
this.pulsePhase += 0.02; | |
this.brainWavePhase += 0.015; | |
// Check if fitness improved | |
const fitnessImproved = currentFitness > this.lastFitness + 0.0001; | |
if (fitnessImproved) { | |
// Activate firing sequence | |
this.triggerFitnessImprovement(currentFitness - this.lastFitness); | |
} | |
this.lastFitness = currentFitness; | |
// Update neuron activations with brain wave effect | |
for (let layer of this.neurons) { | |
for (let neuron of layer) { | |
// Base pulsing | |
neuron.activation = 0.3 + 0.2 * Math.sin(this.pulsePhase + neuron.pulseOffset); | |
// Add brain wave effect | |
const waveInfluence = Math.sin(this.brainWavePhase + neuron.x * 0.01 + neuron.y * 0.01) * 0.2; | |
neuron.activation += waveInfluence; | |
// Firing neurons glow brighter | |
if (this.firingNeurons.has(neuron)) { | |
neuron.activation = Math.min(1, neuron.activation + 0.5); | |
} | |
} | |
} | |
// Update synapses | |
for (let synapse of this.synapses) { | |
if (synapse.active) { | |
synapse.pulseProgress += 0.05; | |
if (synapse.pulseProgress >= 1) { | |
synapse.active = false; | |
synapse.pulseProgress = 0; | |
// Activate the target neuron | |
this.firingNeurons.add(synapse.to); | |
setTimeout(() => this.firingNeurons.delete(synapse.to), 500); | |
} | |
} | |
} | |
} | |
triggerFitnessImprovement(improvement) { | |
// Fire neurons based on improvement magnitude | |
const fireCount = Math.min(20, Math.floor(improvement * 1000)); | |
// Major milestone effects | |
if (this.lastFitness >= 0.95 && this.lastFitness < 0.95 + improvement) { | |
// 95% milestone - neural storm | |
this.triggerNeuralStorm(); | |
} | |
if (this.lastFitness >= 0.99 && this.lastFitness < 0.99 + improvement) { | |
// 99% milestone - neural overload | |
this.triggerNeuralOverload(); | |
} | |
// Start with random input neurons | |
for (let i = 0; i < fireCount; i++) { | |
const neuron = this.neurons[0][Math.floor(Math.random() * this.neurons[0].length)]; | |
this.firingNeurons.add(neuron); | |
// Propagate through network | |
setTimeout(() => { | |
this.propagateActivation(neuron); | |
}, i * 50); | |
} | |
// Create synapse firing wave | |
const synapsesToFire = this.synapses.filter(s => Math.random() < improvement * 50); | |
synapsesToFire.forEach((synapse, i) => { | |
setTimeout(() => { | |
synapse.active = true; | |
synapse.pulseProgress = 0; | |
}, i * 20); | |
}); | |
} | |
triggerNeuralStorm() { | |
// Fire all neurons in waves | |
for (let layer = 0; layer < this.neurons.length; layer++) { | |
setTimeout(() => { | |
this.neurons[layer].forEach(neuron => { | |
this.firingNeurons.add(neuron); | |
setTimeout(() => this.firingNeurons.delete(neuron), 1000); | |
}); | |
}, layer * 200); | |
} | |
// Activate many synapses | |
this.synapses.forEach((synapse, i) => { | |
if (Math.random() < 0.7) { | |
setTimeout(() => { | |
synapse.active = true; | |
synapse.pulseProgress = 0; | |
}, Math.random() * 1000); | |
} | |
}); | |
} | |
triggerNeuralOverload() { | |
// Extreme effect - all neurons and synapses fire rapidly | |
const overloadDuration = 3000; | |
const overloadInterval = setInterval(() => { | |
// Random neurons fire | |
for (let i = 0; i < 10; i++) { | |
const layer = Math.floor(Math.random() * this.neurons.length); | |
const index = Math.floor(Math.random() * this.neurons[layer].length); | |
const neuron = this.neurons[layer][index]; | |
this.firingNeurons.add(neuron); | |
setTimeout(() => this.firingNeurons.delete(neuron), 200); | |
} | |
// Random synapses fire | |
for (let i = 0; i < 20; i++) { | |
const synapse = this.synapses[Math.floor(Math.random() * this.synapses.length)]; | |
synapse.active = true; | |
synapse.pulseProgress = 0; | |
} | |
}, 100); | |
setTimeout(() => clearInterval(overloadInterval), overloadDuration); | |
} | |
propagateActivation(neuron) { | |
// Find synapses from this neuron | |
const outgoingSynapses = this.synapses.filter(s => s.from === neuron); | |
outgoingSynapses.forEach((synapse, i) => { | |
setTimeout(() => { | |
synapse.active = true; | |
synapse.pulseProgress = 0; | |
}, i * 100); | |
}); | |
} | |
draw(ctx) { | |
ctx.save(); | |
// Set overall neural network opacity | |
ctx.globalAlpha = 0.7; | |
// Draw brain scan background effect | |
this.drawBrainScan(ctx); | |
// Draw synapses | |
for (let synapse of this.synapses) { | |
ctx.save(); | |
const baseAlpha = 0.2 + synapse.weight * 0.3; | |
ctx.globalAlpha = synapse.active ? Math.min(1, baseAlpha + 0.6) : baseAlpha; | |
// Draw synapse line | |
ctx.beginPath(); | |
ctx.moveTo(synapse.from.x, synapse.from.y); | |
ctx.lineTo(synapse.to.x, synapse.to.y); | |
const gradient = ctx.createLinearGradient( | |
synapse.from.x, synapse.from.y, | |
synapse.to.x, synapse.to.y | |
); | |
if (synapse.active) { | |
// Firing synapse - animated pulse | |
const pulsePos = synapse.pulseProgress; | |
gradient.addColorStop(0, 'rgba(0, 255, 136, 0.1)'); | |
gradient.addColorStop(Math.max(0, pulsePos - 0.1), 'rgba(0, 255, 136, 0.1)'); | |
gradient.addColorStop(pulsePos, 'rgba(255, 255, 255, 1)'); | |
gradient.addColorStop(Math.min(1, pulsePos + 0.1), 'rgba(0, 255, 136, 0.1)'); | |
gradient.addColorStop(1, 'rgba(123, 63, 242, 0.1)'); | |
ctx.lineWidth = 3; | |
ctx.shadowBlur = 20; | |
ctx.shadowColor = '#00FF88'; | |
} else { | |
gradient.addColorStop(0, 'rgba(0, 170, 255, 0.2)'); | |
gradient.addColorStop(1, 'rgba(123, 63, 242, 0.2)'); | |
ctx.lineWidth = 1; | |
} | |
ctx.strokeStyle = gradient; | |
ctx.stroke(); | |
ctx.restore(); | |
} | |
// Draw neurons | |
for (let layer of this.neurons) { | |
for (let neuron of layer) { | |
ctx.save(); | |
const isFiring = this.firingNeurons.has(neuron); | |
const isOutput = neuron.layer === this.layers.length - 1; | |
// Neuron glow | |
if (isFiring || isOutput) { | |
const glowGradient = ctx.createRadialGradient( | |
neuron.x, neuron.y, 0, | |
neuron.x, neuron.y, neuron.size * 3 | |
); | |
glowGradient.addColorStop(0, isFiring ? 'rgba(255, 255, 255, 0.5)' : 'rgba(255, 215, 0, 0.3)'); | |
glowGradient.addColorStop(0.5, isFiring ? 'rgba(0, 255, 136, 0.3)' : 'rgba(255, 215, 0, 0.1)'); | |
glowGradient.addColorStop(1, 'rgba(0, 0, 0, 0)'); | |
ctx.fillStyle = glowGradient; | |
ctx.fillRect(neuron.x - neuron.size * 3, neuron.y - neuron.size * 3, | |
neuron.size * 6, neuron.size * 6); | |
} | |
// Neuron body | |
ctx.beginPath(); | |
ctx.arc(neuron.x, neuron.y, neuron.size, 0, Math.PI * 2); | |
const neuronGradient = ctx.createRadialGradient( | |
neuron.x - neuron.size/3, neuron.y - neuron.size/3, 0, | |
neuron.x, neuron.y, neuron.size | |
); | |
if (isOutput) { | |
// Output neuron - golden | |
neuronGradient.addColorStop(0, '#FFD700'); | |
neuronGradient.addColorStop(1, '#FFA500'); | |
} else if (isFiring) { | |
// Firing neuron - bright white/green | |
neuronGradient.addColorStop(0, '#FFFFFF'); | |
neuronGradient.addColorStop(1, '#00FF88'); | |
} else { | |
// Normal neuron - blue/purple gradient | |
const brightness = neuron.activation; | |
neuronGradient.addColorStop(0, `rgba(0, 170, 255, ${brightness})`); | |
neuronGradient.addColorStop(1, `rgba(123, 63, 242, ${brightness * 0.7})`); | |
} | |
ctx.fillStyle = neuronGradient; | |
ctx.fill(); | |
// Neuron outline | |
ctx.strokeStyle = isFiring ? '#FFFFFF' : 'rgba(255, 255, 255, 0.2)'; | |
ctx.lineWidth = isFiring ? 2 : 1; | |
ctx.stroke(); | |
ctx.restore(); | |
} | |
} | |
ctx.restore(); | |
} | |
drawBrainScan(ctx) { | |
// Brain scan effect - concentric circles emanating from center | |
const centerX = canvas.width / 2; | |
const centerY = canvas.height / 2; | |
ctx.save(); | |
// Draw multiple scan waves | |
for (let i = 0; i < 5; i++) { | |
const radius = (this.brainWavePhase * 100 + i * 100) % 500; | |
const alpha = Math.max(0, 1 - radius / 500) * 0.3; | |
ctx.beginPath(); | |
ctx.arc(centerX, centerY, radius, 0, Math.PI * 2); | |
// Create gradient stroke | |
const gradient = ctx.createRadialGradient(centerX, centerY, radius - 10, centerX, centerY, radius + 10); | |
gradient.addColorStop(0, `rgba(0, 255, 136, 0)`); | |
gradient.addColorStop(0.5, `rgba(0, 255, 136, ${alpha})`); | |
gradient.addColorStop(1, `rgba(123, 63, 242, 0)`); | |
ctx.strokeStyle = gradient; | |
ctx.lineWidth = 3; | |
ctx.stroke(); | |
} | |
// Add "thinking" pulses randomly | |
if (Math.random() < 0.05) { | |
// Random thinking pulse | |
const pulseX = centerX + (Math.random() - 0.5) * 300; | |
const pulseY = centerY + (Math.random() - 0.5) * 200; | |
const pulseGradient = ctx.createRadialGradient(pulseX, pulseY, 0, pulseX, pulseY, 50); | |
pulseGradient.addColorStop(0, 'rgba(255, 255, 255, 0.4)'); | |
pulseGradient.addColorStop(0.5, 'rgba(0, 170, 255, 0.2)'); | |
pulseGradient.addColorStop(1, 'rgba(0, 0, 0, 0)'); | |
ctx.fillStyle = pulseGradient; | |
ctx.fillRect(pulseX - 50, pulseY - 50, 100, 100); | |
} | |
ctx.restore(); | |
} | |
} | |
// Initialize neural network | |
const neuralNetwork = new NeuralNetwork(); | |
// Mouse interaction | |
let mouseX = canvas.width / 2; | |
let mouseY = canvas.height / 2; | |
canvas.addEventListener('mousemove', (e) => { | |
const rect = canvas.getBoundingClientRect(); | |
mouseX = (e.clientX - rect.left) * (canvas.width / rect.width); | |
mouseY = (e.clientY - rect.top) * (canvas.height / rect.height); | |
}); | |
// Auto-start evolution after intro | |
setTimeout(() => { | |
const startBtn = document.querySelector('.gr-button-primary'); | |
if (startBtn && startBtn.textContent.includes('Start')) { | |
startBtn.click(); | |
} | |
}, 4000); | |
// Boss defeat callback is now defined in the main app | |
</script> | |
""" | |
def create_3d_landscape(): | |
"""Create an animated 3D fitness landscape.""" | |
# Create mesh grid | |
x = np.linspace(-5, 5, 50) | |
y = np.linspace(-5, 5, 50) | |
X, Y = np.meshgrid(x, y) | |
# Create landscape with multiple peaks | |
Z = np.sin(np.sqrt(X**2 + Y**2)) / np.sqrt(X**2 + Y**2 + 1) | |
Z += 0.5 * np.exp(-((X-2)**2 + (Y-2)**2) / 3) | |
Z += 0.8 * np.exp(-((X+2)**2 + (Y-1)**2) / 2) | |
fig = go.Figure(data=[go.Surface( | |
x=X, y=Y, z=Z, | |
colorscale=[ | |
[0, '#0A0A2A'], | |
[0.5, '#7B3FF2'], | |
[1, '#00FF88'] | |
], | |
opacity=0.9, | |
lighting=dict( | |
ambient=0.4, | |
diffuse=0.5, | |
specular=0.2, | |
roughness=0.5, | |
fresnel=0.2 | |
), | |
lightposition=dict(x=-100, y=-100, z=50) | |
)]) | |
# Add moving points representing evolving programs | |
if state["fitness_history"]: | |
n_points = min(len(state["fitness_history"]), 10) | |
for i in range(n_points): | |
t = i / max(n_points - 1, 1) | |
fitness = state["fitness_history"][-(n_points-i)] | |
# Spiral path | |
angle = t * 4 * np.pi | |
radius = 3 * (1 - t) | |
x_pos = radius * np.cos(angle) | |
y_pos = radius * np.sin(angle) | |
z_pos = fitness - 0.9 | |
fig.add_trace(go.Scatter3d( | |
x=[x_pos], y=[y_pos], z=[z_pos], | |
mode='markers', | |
marker=dict( | |
size=10, | |
color='#FFD700' if i == n_points - 1 else '#00FF88', | |
symbol='diamond' | |
), | |
showlegend=False | |
)) | |
fig.update_layout( | |
scene=dict( | |
xaxis=dict(showgrid=False, showticklabels=False, title=''), | |
yaxis=dict(showgrid=False, showticklabels=False, title=''), | |
zaxis=dict(showgrid=True, title='Fitness'), | |
camera=dict( | |
eye=dict(x=1.5, y=1.5, z=1.5), | |
up=dict(x=0, y=0, z=1) | |
), | |
aspectmode='cube' | |
), | |
paper_bgcolor='#0A0A2A', | |
plot_bgcolor='#0A0A2A', | |
height=500, | |
margin=dict(l=0, r=0, t=0, b=0) | |
) | |
return fig | |
def create_fitness_chart(): | |
"""Create animated fitness progress chart.""" | |
fig = go.Figure() | |
if state["fitness_history"]: | |
x = list(range(len(state["fitness_history"]))) | |
y = state["fitness_history"] | |
# Main line | |
fig.add_trace(go.Scatter( | |
x=x, y=y, | |
mode='lines+markers', | |
name='Fitness', | |
line=dict(color='#00FF88', width=4), | |
marker=dict(size=8, color='#7B3FF2', line=dict(color='#00FF88', width=2)) | |
)) | |
# Add glow effect | |
fig.add_trace(go.Scatter( | |
x=x, y=y, | |
mode='lines', | |
line=dict(color='#00FF88', width=12), | |
opacity=0.3, | |
showlegend=False | |
)) | |
fig.update_layout( | |
xaxis=dict( | |
title='Generation', | |
gridcolor='#333', | |
zerolinecolor='#333' | |
), | |
yaxis=dict( | |
title='Fitness Score', | |
gridcolor='#333', | |
zerolinecolor='#333', | |
range=[0.9, 1.0] | |
), | |
paper_bgcolor='#0A0A2A', | |
plot_bgcolor='#0A0A2A', | |
font=dict(color='#FFF'), | |
height=400, | |
showlegend=False | |
) | |
return fig | |
def update_multiplayer(): | |
"""Update multiplayer state with other players' progress.""" | |
if not state["multiplayer_active"]: | |
return | |
# Simulate other players making progress | |
for player in FAKE_PLAYERS: | |
if random.random() < 0.3: # 30% chance of improvement | |
improvement = random.uniform(0.001, 0.01) | |
player["fitness"] = min(player["fitness"] + improvement, 0.9999) | |
# Check if someone beat us | |
current_fitness = state["fitness_history"][-1] if state["fitness_history"] else 0.9333 | |
if player["fitness"] > current_fitness and player["fitness"] > state["global_best"]: | |
state["global_best"] = player["fitness"] | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "multiplayer", | |
"message": f"β‘ {player['name']} {player['country']} TOOK THE LEAD! ({player['fitness']:.4f})" | |
}) | |
def format_multiplayer_leaderboard(): | |
"""Format live multiplayer leaderboard.""" | |
current_fitness = state["fitness_history"][-1] if state["fitness_history"] else 0.9333 | |
# Combine all players | |
all_players = [{"name": state["player_name"], "country": "π΄", "fitness": current_fitness, "status": "you"}] | |
all_players.extend(FAKE_PLAYERS) | |
# Sort by fitness | |
all_players.sort(key=lambda x: x["fitness"], reverse=True) | |
html = ''' | |
<div style="background: linear-gradient(135deg, #1a1a3a, #0a0a2a); padding: 20px; border-radius: 10px; border: 2px solid #7B3FF2;"> | |
<h3 style="color: #FFD700; margin-top: 0; text-align: center;">π LIVE GLOBAL LEADERBOARD</h3> | |
<div style="max-height: 400px; overflow-y: auto;"> | |
''' | |
for i, player in enumerate(all_players): | |
rank = i + 1 | |
medal = "π₯" if rank == 1 else "π₯" if rank == 2 else "π₯" if rank == 3 else f"#{rank}" | |
is_you = player["status"] == "you" | |
bg_color = "linear-gradient(45deg, #FFD700, #FFA500)" if is_you else "rgba(123, 63, 242, 0.2)" | |
border = "2px solid #FFD700" if rank == 1 else "1px solid rgba(255, 255, 255, 0.1)" | |
html += f''' | |
<div style="background: {bg_color}; margin: 10px 0; padding: 15px; border-radius: 8px; border: {border}; | |
{'animation: pulse 2s infinite;' if is_you else ''} transition: all 0.3s;"> | |
<div style="display: flex; justify-content: space-between; align-items: center;"> | |
<div style="font-size: 20px; color: {'#000' if is_you else '#FFF'};"> | |
{medal} {player['country']} <strong>{player['name']}</strong> | |
{' (YOU)' if is_you else ''} | |
</div> | |
<div style="font-size: 24px; color: {'#000' if is_you else '#00FF88'}; font-weight: bold;"> | |
{player['fitness']:.4f} | |
</div> | |
</div> | |
{'<div style="color: #FFD700; font-size: 14px; margin-top: 5px;">π₯ YOUR POSITION</div>' if is_you else ''} | |
</div> | |
''' | |
html += ''' | |
</div> | |
<div style="text-align: center; margin-top: 20px;"> | |
<button style="background: linear-gradient(45deg, #FF6B6B, #4ECDC4); color: white; border: none; | |
padding: 10px 30px; border-radius: 25px; font-size: 18px; cursor: pointer;" | |
onclick="alert('Multiplayer Battle Mode: Coming Soon!')"> | |
βοΈ CHALLENGE TOP PLAYER | |
</button> | |
</div> | |
</div> | |
''' | |
return html | |
def handle_boss_defeat(): | |
"""Handle boss defeat and reach 100% fitness.""" | |
if state["boss_active"] and state["boss_health"] <= 0: | |
state["boss_defeated"] = True | |
state["boss_active"] = False | |
state["fitness_history"].append(1.0) # 100% fitness! | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "victory", | |
"message": "π BOSS DEFEATED! You've achieved 100% FITNESS! PERFECTION ATTAINED!" | |
}) | |
# Unlock special achievement | |
if "perfection_plus" not in state["achievements"]: | |
state["achievements"].append("perfection_plus") | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "achievement", | |
"message": "π LEGENDARY ACHIEVEMENT: Perfection Plus Ultra!" | |
}) | |
return True | |
return False | |
def simulate_evolution(): | |
"""Simulate one evolution step.""" | |
if not state["running"]: | |
return | |
state["iteration"] += 1 | |
# Update multiplayer if active | |
if state["multiplayer_active"]: | |
update_multiplayer() | |
# Simulate evaluating multiple variants (Modal parallel execution) | |
variants_this_gen = random.randint(4, 8) # Simulating parallel evaluation | |
state["variants_evaluated"] += variants_this_gen | |
# Simulate fitness improvement | |
current_fitness = state["fitness_history"][-1] | |
improvement = random.uniform(0.001, 0.015) * (1 - current_fitness) | |
new_fitness = min(current_fitness + improvement, 0.9999) | |
state["fitness_history"].append(new_fitness) | |
# Check for new achievements | |
new_achievements = check_achievements() | |
# Add event | |
event = { | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "improvement" if improvement > 0.005 else "minor", | |
"message": f"Generation {state['iteration']}: Fitness {new_fitness:.4f} (+{improvement:.4f}) - {variants_this_gen} variants evaluated" | |
} | |
state["events"].append(event) | |
# Add achievement events | |
for ach in new_achievements: | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "achievement", | |
"message": f"π ACHIEVEMENT UNLOCKED: {ach['name']}" | |
}) | |
# Trigger quantum effects at high fitness levels | |
if new_fitness >= 0.95 and current_fitness < 0.95: | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "quantum", | |
"message": "βοΈ QUANTUM REALM ENTERED! Reality is bending..." | |
}) | |
if new_fitness >= 0.99 and current_fitness < 0.99: | |
state["events"].append({ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "boss", | |
"message": "πΎ FINAL BOSS APPEARED: The Local Optimum! Click on it to attack!" | |
}) | |
# Trigger boss battle | |
state["boss_active"] = True | |
state["boss_health"] = 100 | |
# Boss battle progress | |
if state["boss_active"] and state["boss_health"] > 0: | |
# Boss slowly damages our fitness | |
damage = random.uniform(0.0001, 0.0005) | |
new_fitness = max(0.98, new_fitness - damage) | |
state["fitness_history"][-1] = new_fitness | |
return event | |
def get_evolved_code(): | |
"""Generate example of evolved code with improvements.""" | |
iteration = state.get("iteration", 0) | |
fitness = state["fitness_history"][-1] if state["fitness_history"] else 0.9333 | |
# Base code | |
base_code = '''def create_model(X_train, y_train): | |
"""Create and train a DecisionTree model.""" | |
model = DecisionTreeClassifier( | |
max_depth=3, | |
min_samples_split=2, | |
random_state=42 | |
) | |
model.fit(X_train, y_train) | |
return model''' | |
# Evolved improvements based on iteration | |
if iteration == 0: | |
return base_code, base_code, [] | |
improvements = [] | |
evolved_code = base_code | |
if iteration >= 1: | |
evolved_code = evolved_code.replace("max_depth=3", "max_depth=5") | |
improvements.append("β Increased max_depth: 3 β 5") | |
if iteration >= 2: | |
evolved_code = evolved_code.replace("min_samples_split=2", "min_samples_split=5") | |
improvements.append("β Optimized min_samples_split: 2 β 5") | |
if iteration >= 3: | |
evolved_code = evolved_code.replace( | |
"model = DecisionTreeClassifier(", | |
"model = DecisionTreeClassifier(\n criterion='entropy'," | |
) | |
improvements.append("+ Added entropy criterion") | |
if iteration >= 4: | |
evolved_code = evolved_code.replace("random_state=42", "random_state=42,\n min_samples_leaf=2") | |
improvements.append("+ Added min_samples_leaf constraint") | |
return base_code, evolved_code, improvements | |
def format_code_display(): | |
"""Format code evolution display with syntax highlighting.""" | |
original, evolved, improvements = get_evolved_code() | |
html = f''' | |
<div style="background: #0A0A2A; padding: 20px; border-radius: 10px;"> | |
<h3 style="color: #00FF88; margin-top: 0;">𧬠Code Evolution</h3> | |
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;"> | |
<div> | |
<h4 style="color: #7B3FF2;">Original Code</h4> | |
<pre style="background: #1a1a3a; padding: 15px; border-radius: 5px; color: #fff; overflow-x: auto;"><code>{original}</code></pre> | |
</div> | |
<div> | |
<h4 style="color: #00FF88;">Evolved Code (Gen {state.get("iteration", 0)})</h4> | |
<pre style="background: #1a1a3a; padding: 15px; border-radius: 5px; color: #fff; overflow-x: auto; border: 2px solid #00FF88;"><code>{evolved}</code></pre> | |
</div> | |
</div> | |
<div style="margin-top: 20px;"> | |
<h4 style="color: #FFD700;">β¨ Improvements Applied:</h4> | |
<ul style="color: #00AAFF; list-style: none; padding: 0;"> | |
{"".join(f'<li style="margin: 5px 0;">β’ {imp}</li>' for imp in improvements) if improvements else '<li>β’ Analyzing code patterns...</li>'} | |
</ul> | |
</div> | |
</div> | |
''' | |
return html | |
def check_achievements(): | |
"""Check and award achievements.""" | |
new_achievements = [] | |
# First evolution | |
if state["iteration"] >= 1 and "first_evolution" not in state["achievements"]: | |
state["achievements"].append("first_evolution") | |
new_achievements.append(ACHIEVEMENTS["first_evolution"]) | |
# Fitness achievements | |
current_fitness = state["fitness_history"][-1] if state["fitness_history"] else 0 | |
if current_fitness >= 0.95 and "fast_learner" not in state["achievements"]: | |
state["achievements"].append("fast_learner") | |
new_achievements.append(ACHIEVEMENTS["fast_learner"]) | |
if current_fitness >= 0.99 and "perfectionist" not in state["achievements"]: | |
state["achievements"].append("perfectionist") | |
new_achievements.append(ACHIEVEMENTS["perfectionist"]) | |
# Speed achievement | |
if state["start_time"] and state["variants_evaluated"] > 0: | |
elapsed = time.time() - state["start_time"] | |
if elapsed > 0: | |
speed = state["variants_evaluated"] / elapsed | |
if speed >= 10 and "speed_demon" not in state["achievements"]: | |
state["achievements"].append("speed_demon") | |
new_achievements.append(ACHIEVEMENTS["speed_demon"]) | |
# Marathon achievement | |
if state["iteration"] >= 10 and "marathon" not in state["achievements"]: | |
state["achievements"].append("marathon") | |
new_achievements.append(ACHIEVEMENTS["marathon"]) | |
# Update high score | |
if current_fitness > state["high_score"]: | |
state["high_score"] = current_fitness | |
return new_achievements | |
def format_achievements(): | |
"""Format achievements display.""" | |
html = '<div style="background: #0A0A2A; padding: 20px; border-radius: 10px;">' | |
html += '<h3 style="color: #FFD700; margin-top: 0;">π Achievements</h3>' | |
html += '<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px;">' | |
for ach_id in state["achievements"]: | |
ach = ACHIEVEMENTS.get(ach_id, {}) | |
html += f''' | |
<div style="background: linear-gradient(45deg, #7B3FF2, #00AAFF); padding: 10px; border-radius: 8px; text-align: center;"> | |
<div style="font-size: 24px;">{ach.get("name", "")}</div> | |
<div style="font-size: 12px; color: #FFD700;">{ach.get("desc", "")}</div> | |
</div> | |
''' | |
if not state["achievements"]: | |
html += '<div style="color: #666; text-align: center; width: 100%;">Start evolving to unlock achievements!</div>' | |
html += '</div>' | |
html += f'<div style="margin-top: 20px; text-align: center; color: #00FF88; font-size: 20px;">High Score: {state["high_score"]:.4f}</div>' | |
html += '</div>' | |
return html | |
def get_share_text(): | |
"""Generate share text for social media.""" | |
fitness = state["fitness_history"][-1] if state["fitness_history"] else 0.9333 | |
achievements_count = len(state["achievements"]) | |
text = f"π Evolution Aurora: I evolved AI to {fitness:.2%} fitness with {achievements_count} achievements unlocked! Can you beat my score?\n\n" | |
text += "Try it yourself: https://huggingface.co/spaces/Agents-MCP-Hackathon/Evolution\n" | |
text += "#EvolutionAurora #AIEvolution #HuggingFace" | |
return text | |
def format_events(): | |
"""Format events for display.""" | |
html = '<div style="background: #0A0A2A; padding: 15px; border-radius: 10px; height: 300px; overflow-y: auto; font-family: monospace;">' | |
for event in state["events"][-20:][::-1]: | |
if event["type"] == "victory": | |
color = "#FFD700" | |
icon = "π" | |
style = "font-size: 20px; font-weight: bold; background: linear-gradient(45deg, #FFD700, #FF6B6B); padding: 15px; border-radius: 10px; margin: 10px 0; animation: pulse 0.5s infinite; text-shadow: 0 0 20px #FFD700; border: 3px solid #FFD700;" | |
elif event["type"] == "boss": | |
color = "#FF0000" | |
icon = "πΎ" | |
style = "font-size: 18px; font-weight: bold; background: rgba(255, 0, 0, 0.3); padding: 12px; border-radius: 8px; margin: 8px 0; border: 2px solid #FF0000; animation: pulse 2s infinite;" | |
elif event["type"] == "achievement": | |
color = "#FFD700" | |
icon = "π" | |
style = "font-size: 16px; font-weight: bold; background: linear-gradient(45deg, #7B3FF2, #00AAFF); padding: 10px; border-radius: 5px; margin: 5px 0;" | |
elif event["type"] == "quantum": | |
color = "#FF00FF" | |
icon = "βοΈ" | |
style = "font-size: 18px; font-weight: bold; background: linear-gradient(45deg, #FF00FF, #00FFFF); padding: 12px; border-radius: 8px; margin: 8px 0; animation: pulse 1s infinite; text-shadow: 0 0 10px #FF00FF;" | |
elif event["type"] == "multiplayer": | |
color = "#FF6B6B" | |
icon = "βοΈ" | |
style = "font-size: 14px; font-weight: bold; background: rgba(255, 107, 107, 0.2); padding: 8px; border-radius: 5px; margin: 5px 0; border: 1px solid #FF6B6B;" | |
elif event["type"] == "improvement": | |
color = "#00FF88" | |
icon = "β¨" | |
style = "padding: 5px;" | |
else: | |
color = "#00AAFF" | |
icon = "π" | |
style = "padding: 5px;" | |
html += f'<div style="color: {color}; {style}">{icon} [{event["time"]}] {event["message"]}</div>' | |
html += '</div>' | |
return html | |
def toggle_evolution(running): | |
"""Start or stop evolution.""" | |
state["running"] = running | |
if running: | |
state["iteration"] = 0 | |
state["fitness_history"] = [0.9333] | |
state["variants_evaluated"] = 0 | |
state["start_time"] = time.time() | |
state["events"] = [{ | |
"time": datetime.now().strftime("%H:%M:%S"), | |
"type": "improvement", | |
"message": "π Evolution started! Initial fitness: 0.9333 | Modal containers spinning up..." | |
}] | |
return "π Stop Evolution" if running else "π Start Evolution" | |
# Create Gradio interface | |
with gr.Blocks( | |
theme=gr.themes.Base( | |
primary_hue="purple", | |
secondary_hue="green", | |
neutral_hue="slate" | |
), | |
css=""" | |
.gradio-container { | |
background: linear-gradient(135deg, #0A0A2A 0%, #1A1A3A 100%); | |
color: white; | |
} | |
.gr-button-primary { | |
background: linear-gradient(45deg, #7B3FF2, #00AAFF) !important; | |
border: none !important; | |
} | |
.gr-box { | |
background: rgba(255, 255, 255, 0.05) !important; | |
border: 1px solid rgba(255, 255, 255, 0.1) !important; | |
} | |
""" | |
) as demo: | |
# Header with Modal branding | |
with gr.Row(): | |
gr.Markdown(""" | |
# π Evolution Aurora - AI Learning to Code | |
Watch as AI evolves code in real-time with neural network visualization! See synapses fire and neurons activate as the AI discovers improvements. The neural network shows the AI's "thoughts" as it learns. | |
""") | |
gr.HTML(''' | |
<div style="text-align: right; padding: 10px;"> | |
<div style="background: linear-gradient(45deg, #FF6B6B, #4ECDC4); padding: 10px 20px; border-radius: 25px; display: inline-block;"> | |
<span style="color: white; font-weight: bold; font-size: 18px;">β‘ Powered by Modal</span> | |
</div> | |
<p style="color: #00AAFF; margin-top: 5px; font-size: 14px;">Cloud execution for parallel evolution</p> | |
</div> | |
''') | |
# Aurora effect at the top | |
gr.HTML(AURORA_HTML) | |
# Sound effects (Web Audio API) | |
gr.HTML(''' | |
<script> | |
// Sound system for achievements and improvements | |
const audioContext = new (window.AudioContext || window.webkitAudioContext)(); | |
let soundEnabled = true; | |
function playSound(type) { | |
if (!soundEnabled) return; | |
const oscillator = audioContext.createOscillator(); | |
const gainNode = audioContext.createGain(); | |
oscillator.connect(gainNode); | |
gainNode.connect(audioContext.destination); | |
if (type === 'achievement') { | |
// Achievement sound - ascending arpeggio | |
oscillator.frequency.setValueAtTime(523.25, audioContext.currentTime); // C5 | |
oscillator.frequency.setValueAtTime(659.25, audioContext.currentTime + 0.1); // E5 | |
oscillator.frequency.setValueAtTime(783.99, audioContext.currentTime + 0.2); // G5 | |
oscillator.frequency.setValueAtTime(1046.50, audioContext.currentTime + 0.3); // C6 | |
gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); | |
gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.5); | |
oscillator.start(); | |
oscillator.stop(audioContext.currentTime + 0.5); | |
} else if (type === 'improvement') { | |
// Improvement sound - gentle ping | |
oscillator.frequency.setValueAtTime(880, audioContext.currentTime); // A5 | |
gainNode.gain.setValueAtTime(0.1, audioContext.currentTime); | |
gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.2); | |
oscillator.start(); | |
oscillator.stop(audioContext.currentTime + 0.2); | |
} | |
} | |
// Watch for achievement messages | |
const observeAchievements = new MutationObserver((mutations) => { | |
mutations.forEach((mutation) => { | |
if (mutation.type === 'childList') { | |
const text = mutation.target.textContent || ''; | |
if (text.includes('ACHIEVEMENT UNLOCKED')) { | |
playSound('achievement'); | |
} else if (text.includes('β¨') && text.includes('+0.0')) { | |
playSound('improvement'); | |
} | |
} | |
}); | |
}); | |
// Start observing when ready | |
setTimeout(() => { | |
const eventLog = document.querySelector('[id*="event_log"]'); | |
if (eventLog) { | |
observeAchievements.observe(eventLog, { childList: true, subtree: true }); | |
} | |
}, 1000); | |
// Keyboard shortcuts | |
document.addEventListener('keydown', (e) => { | |
if (e.key === ' ' && e.target.tagName !== 'INPUT') { | |
e.preventDefault(); | |
const startBtn = document.querySelector('.gr-button-primary'); | |
if (startBtn) startBtn.click(); | |
} else if (e.key === 's' && e.ctrlKey) { | |
e.preventDefault(); | |
const shareBtn = document.querySelector('[id*="share_btn"]'); | |
if (shareBtn) shareBtn.click(); | |
} else if (e.key === 'm') { | |
soundEnabled = !soundEnabled; | |
console.log('Sound', soundEnabled ? 'enabled' : 'disabled'); | |
} | |
}); | |
</script> | |
''') | |
# Epic Voice Narration System | |
gr.HTML(''' | |
<script> | |
// Text-to-speech narration | |
const speak = (text, rate = 1, pitch = 1) => { | |
if (!window.speechSynthesis) return; | |
const utterance = new SpeechSynthesisUtterance(text); | |
utterance.rate = rate; | |
utterance.pitch = pitch; | |
utterance.volume = 0.8; | |
// Try to use a dramatic voice | |
const voices = speechSynthesis.getVoices(); | |
const dramaticVoice = voices.find(v => v.name.includes('Daniel') || v.name.includes('Alex')) || voices[0]; | |
if (dramaticVoice) utterance.voice = dramaticVoice; | |
speechSynthesis.speak(utterance); | |
}; | |
// Epic intro narration | |
setTimeout(() => { | |
speak("Welcome to Evolution Aurora. Where artificial intelligence learns to code before your very eyes.", 0.9, 0.8); | |
}, 1000); | |
// Watch for achievements and milestones | |
const narrateProgress = new MutationObserver((mutations) => { | |
mutations.forEach((mutation) => { | |
const text = mutation.target.textContent || ''; | |
if (text.includes('ACHIEVEMENT UNLOCKED')) { | |
speak("Achievement unlocked!", 1.2, 1.2); | |
} else if (text.includes('0.95') && text.includes('Fitness')) { | |
speak("Incredible! 95 percent fitness achieved. The AI is learning fast.", 1, 0.9); | |
} else if (text.includes('0.99') && text.includes('Fitness')) { | |
speak("Approaching perfection! 99 percent fitness. This is extraordinary!", 1.1, 1.1); | |
} else if (text.includes('TOOK THE LEAD')) { | |
speak("Alert! Another player has taken the lead! You must evolve faster!", 1.2, 1); | |
} | |
}); | |
}); | |
setTimeout(() => { | |
const containers = document.querySelectorAll('[id*="display"], [id*="event_log"]'); | |
containers.forEach(c => narrateProgress.observe(c, { childList: true, subtree: true })); | |
}, 2000); | |
</script> | |
''') | |
with gr.Row(): | |
with gr.Column(scale=1): | |
toggle_btn = gr.Button("π Start Evolution", variant="primary", size="lg") | |
# Multiplayer toggle | |
multiplayer_btn = gr.Button("π Join Global Battle", variant="secondary", size="lg") | |
gr.Markdown("### π Statistics") | |
with gr.Row(): | |
fitness_display = gr.Number( | |
value=0.9333, | |
label="Current Fitness", | |
precision=4 | |
) | |
generation_display = gr.Number( | |
value=0, | |
label="Generation" | |
) | |
gr.Markdown("### β‘ Modal Performance") | |
with gr.Row(): | |
variants_display = gr.Number( | |
value=0, | |
label="Variants Evaluated" | |
) | |
speed_display = gr.Textbox( | |
value="0 variants/sec", | |
label="Processing Speed" | |
) | |
with gr.Column(scale=2): | |
gr.Markdown("### π Fitness Evolution") | |
fitness_chart = gr.Plot(value=create_fitness_chart()) | |
# Multiplayer Leaderboard | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Markdown("### π Global Competition") | |
multiplayer_display = gr.HTML(value=format_multiplayer_leaderboard()) | |
with gr.Column(scale=2): | |
# Code Evolution Display | |
gr.Markdown("### 𧬠Live Code Evolution") | |
code_display = gr.HTML(value=format_code_display()) | |
# Achievements Display | |
gr.Markdown("### π Achievements & Leaderboard") | |
achievements_display = gr.HTML(value=format_achievements()) | |
with gr.Row(): | |
share_btn = gr.Button("π± Share Your Score", variant="secondary") | |
share_text = gr.Textbox( | |
value=get_share_text(), | |
label="Copy & Share:", | |
interactive=True, | |
visible=False | |
) | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown("### ποΈ Fitness Landscape") | |
landscape_3d = gr.Plot(value=create_3d_landscape()) | |
with gr.Column(): | |
gr.Markdown("### π Evolution Log") | |
event_log = gr.HTML(value=format_events()) | |
# Timer for updates | |
timer = gr.Timer(1.0) | |
# Toggle state | |
running_state = gr.State(False) | |
multiplayer_state = gr.State(False) | |
def on_toggle(running): | |
new_state = not running | |
return new_state, toggle_evolution(new_state) | |
def on_multiplayer(active): | |
state["multiplayer_active"] = not active | |
return not active, "π« Leave Battle" if not active else "π Join Global Battle" | |
def on_share(): | |
return gr.update(visible=True, value=get_share_text()) | |
toggle_btn.click( | |
fn=on_toggle, | |
inputs=[running_state], | |
outputs=[running_state, toggle_btn] | |
) | |
multiplayer_btn.click( | |
fn=on_multiplayer, | |
inputs=[multiplayer_state], | |
outputs=[multiplayer_state, multiplayer_btn] | |
) | |
share_btn.click( | |
fn=on_share, | |
outputs=[share_text] | |
) | |
def update_all(): | |
if state["running"]: | |
simulate_evolution() | |
# Calculate speed | |
speed = "0 variants/sec" | |
if state["start_time"] and state["variants_evaluated"] > 0: | |
elapsed = time.time() - state["start_time"] | |
if elapsed > 0: | |
speed = f"{state['variants_evaluated'] / elapsed:.2f} variants/sec" | |
return { | |
fitness_display: state["fitness_history"][-1] if state["fitness_history"] else 0.9333, | |
generation_display: state["iteration"], | |
variants_display: state["variants_evaluated"], | |
speed_display: speed, | |
fitness_chart: create_fitness_chart(), | |
landscape_3d: create_3d_landscape(), | |
multiplayer_display: format_multiplayer_leaderboard(), | |
code_display: format_code_display(), | |
achievements_display: format_achievements(), | |
event_log: format_events() | |
} | |
timer.tick( | |
fn=update_all, | |
outputs=[fitness_display, generation_display, variants_display, speed_display, fitness_chart, landscape_3d, multiplayer_display, code_display, achievements_display, event_log] | |
) | |
# Hidden boss defeat button | |
boss_defeat_btn = gr.Button("Boss Defeat Trigger", visible=False, elem_id="boss_defeat_btn") | |
def on_boss_defeat(): | |
"""Handle boss defeat from JavaScript.""" | |
if handle_boss_defeat(): | |
return {} | |
return {} | |
boss_defeat_btn.click( | |
fn=on_boss_defeat, | |
outputs=[] | |
) | |
# JavaScript to handle boss defeat callback | |
gr.HTML(''' | |
<script> | |
// Connect boss defeat callback to Gradio | |
window.bossDamageCallback = () => { | |
const btn = document.getElementById('boss_defeat_btn'); | |
if (btn) { | |
btn.click(); | |
} | |
}; | |
</script> | |
''') | |
# Challenge Mode | |
with gr.Row(): | |
gr.Markdown(""" | |
### π― Challenge Mode | |
**Today's Challenge**: Reach 99% fitness in under 10 generations! | |
π₯ **Gold**: < 5 generations | |
π₯ **Silver**: < 7 generations | |
π₯ **Bronze**: < 10 generations | |
""") | |
gr.HTML(''' | |
<div style="text-align: center; padding: 20px;"> | |
<div style="display: inline-block; background: linear-gradient(45deg, #FFD700, #FFA500); padding: 15px 30px; border-radius: 10px;"> | |
<h3 style="margin: 0; color: #000;">π Your Best: Not Set</h3> | |
<p style="margin: 5px 0 0 0; color: #333;">Complete a run to set your record!</p> | |
</div> | |
</div> | |
''') | |
gr.Markdown(""" | |
--- | |
### π HuggingFace Agents-MCP Hackathon 2025 | |
**Track 3**: Agentic Demo Showcase | **Integration**: Evolve Framework | **Sponsor**: Modal | |
This demo showcases AI-driven code evolution with real-time visualization. The aurora effects | |
intensify with fitness improvements, creating a stunning visual representation of machine learning. | |
### β¨οΈ Keyboard Shortcuts | |
- **Space**: Start/Stop Evolution | |
- **Ctrl+S**: Share Your Score | |
- **M**: Toggle Sound Effects | |
### π‘ Pro Tips | |
- Watch for achievement unlocks - they come with special sound effects! | |
- The aurora intensifies with larger fitness improvements | |
- Modal's parallel execution evaluates 4-8 variants simultaneously | |
- Try to unlock all 5 achievements in a single run! | |
""") | |
if __name__ == "__main__": | |
print("\nπ Evolution Aurora - Final Demo") | |
print("=" * 50) | |
print("This version has:") | |
print("β Working aurora particle effects") | |
print("β Animated 3D fitness landscape") | |
print("β Real-time evolution simulation") | |
print("β Beautiful UI with gradients") | |
print("=" * 50 + "\n") | |
demo.launch() |