File size: 2,572 Bytes
123428d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0b19b33
 
 
 
 
 
 
 
 
 
 
123428d
 
0b19b33
 
 
 
 
123428d
 
 
 
 
0b19b33
 
123428d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0b19b33
123428d
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { pipeline } from '@huggingface/transformers';
import http from 'http';

// Configuration
const PORT = 7860;
const MODEL_NAME = 'Xenova/codegen-350M-mono'; // Lightweight, powerful coding model

let generator;

// Initialize the model on startup
async function loadModel() {
    console.log("Loading coding model...");
    generator = await pipeline('text-generation', MODEL_NAME);
    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..." }));
                }

                // Generate code based on the prompt
                const output = await generator(prompt, { 
                    max_new_tokens: 100,
                    temperature: 0.7 
                });

                res.writeHead(200);
                res.end(JSON.stringify({ result: output[0].generated_text }));
            } catch (err) {
                res.writeHead(400);
                res.end(JSON.stringify({ error: "Invalid JSON or request" }));
            }
        });
        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}`);
    });
});