Spaces:
Paused
Paused
| import { pipeline } from '@huggingface/transformers'; | |
| import http from 'http'; | |
| // Configuration | |
| const PORT = 7860; | |
| // Instruction-following model: understands "generate a login page" and responds correctly | |
| const MODEL_NAME = 'onnx-community/Qwen2.5-0.5B-Instruct'; | |
| let generator; | |
| // Initialize the model on startup | |
| async function loadModel() { | |
| console.log("Loading coding model..."); | |
| generator = await pipeline('text-generation', MODEL_NAME, { dtype: 'q4' }); | |
| console.log("Model loaded successfully!"); | |
| } | |
| const server = http.createServer(async (req, res) => { | |
| // 1. Add CORS headers so external websites can talk to this API | |
| res.setHeader('Access-Control-Allow-Origin', '*'); | |
| res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); | |
| res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); | |
| // Handle preflight requests for the API | |
| if (req.method === 'OPTIONS') { | |
| res.writeHead(200); | |
| return res.end(); | |
| } | |
| res.setHeader('Content-Type', 'application/json'); | |
| // Clean the URL (Removes Hugging Face's ?__theme=light additions) | |
| const pathname = req.url.split('?')[0]; | |
| // 2. Your requested Status Check | |
| if (pathname === '/' && req.method === 'GET') { | |
| res.writeHead(200); | |
| res.end(JSON.stringify({ "status": " Backend is running" })); | |
| return; | |
| } | |
| // 3. Code Generation Endpoint | |
| if (pathname === '/generate' && req.method === 'POST') { | |
| let body = ''; | |
| req.on('data', chunk => { body += chunk.toString(); }); | |
| req.on('end', async () => { | |
| try { | |
| const { prompt } = JSON.parse(body); | |
| if (!generator) { | |
| res.writeHead(503); | |
| return res.end(JSON.stringify({ error: "Model is still loading..." })); | |
| } | |
| // Use chat format so the model understands instructions properly | |
| const messages = [ | |
| { role: 'system', content: 'You are an expert JavaScript and web developer. When asked to generate code, respond with clean, complete, working code only. No explanations unless asked.' }, | |
| { role: 'user', content: prompt } | |
| ]; | |
| const output = await generator(messages, { | |
| max_new_tokens: 512, // More tokens for complete code output | |
| temperature: 0.7, | |
| do_sample: true | |
| }); | |
| // Extract only the assistant's reply | |
| const result = output[0].generated_text.at(-1).content; | |
| res.writeHead(200); | |
| res.end(JSON.stringify({ result })); | |
| } catch (err) { | |
| res.writeHead(400); | |
| res.end(JSON.stringify({ error: "Invalid JSON or request", detail: err.message })); | |
| } | |
| }); | |
| return; | |
| } | |
| // Default 404 | |
| res.writeHead(404); | |
| res.end(JSON.stringify({ error: "Not Found", requested_path: pathname })); | |
| }); | |
| // Start everything | |
| loadModel().then(() => { | |
| server.listen(PORT, '0.0.0.0', () => { | |
| console.log(`Server running at http://0.0.0.0:${PORT}`); | |
| }); | |
| }); |