cpu1-Exocore / index.js
ChoruYt's picture
Update index.js
6e114c9 verified
Raw
History Blame Contribute Delete
2.71 kB
const WebSocket = require('ws');
const http = require('http');
const SERVER_URL = process.env.SERVER_URL || 'wss://choruyt-ai-exocore.hf.space/cpu-pool';
const WORKER_ID = process.env.WORKER_ID || 'cpu' + (Math.floor(Math.random() * 1000));
const CPU_CORES = 2; // HF Spaces = 2 vCPU
console.log(`🚀 CPU Worker ${WORKER_ID} starting...`);
let ws;
let heartbeatInterval;
function connectToPool() {
ws = new WebSocket(SERVER_URL);
ws.on('open', () => {
console.log(`✅ ${WORKER_ID} connected to CPU POOL`);
ws.send(JSON.stringify({
type: 'register',
workerId: WORKER_ID,
cpuCores: CPU_CORES,
status: 'ready'
}));
// Heartbeat
heartbeatInterval = setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({
type: 'heartbeat',
workerId: WORKER_ID,
load: process.uptime() % 10 // Fake load
}));
}
}, 5000);
});
ws.on('message', async (data) => {
try {
const task = JSON.parse(data.toString());
if (task.type === 'cpu-task') {
const result = await heavyCPUWork(task.data);
ws.send(JSON.stringify({
type: 'task-complete',
taskId: task.taskId,
workerId: WORKER_ID,
result: result
}));
}
} catch (e) {
console.error('Task error:', e);
}
});
ws.on('close', () => {
console.log('🔌 Disconnected, reconnecting...');
clearInterval(heartbeatInterval);
setTimeout(connectToPool, 3000);
});
}
// 🔥 HEAVY CPU WORK (for Qwen3 token processing)
function heavyCPUWork(data) {
return new Promise((resolve) => {
let result = 0;
const start = Date.now();
// Simulate Qwen3 token generation (CPU intensive)
for (let i = 0; i < data.iterations || 10000000; i++) {
result += Math.sqrt(i) * Math.sin(i / 1000);
}
resolve({
tokensGenerated: data.iterations || 512,
computationTime: Date.now() - start,
result: result.toFixed(2)
});
});
}
// Auto-reconnect
connectToPool();
// Health check server
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end(`CPU Worker ${WORKER_ID} OK | Cores: ${CPU_CORES}`);
});
server.listen(process.env.PORT || 7860, '0.0.0.0', () => {
console.log(`✅ Worker ${WORKER_ID} listening on ${process.env.PORT || 7860}`);
});