File size: 2,592 Bytes
123428d
 
 
 
 
d5edfd7
123428d
 
 
 
d5edfd7
 
123428d
 
 
 
d5edfd7
0b19b33
 
 
 
d5edfd7
0b19b33
 
 
 
 
123428d
d5edfd7
 
0b19b33
 
d5edfd7
0b19b33
123428d
d5edfd7
123428d
 
 
d5edfd7
0b19b33
123428d
 
 
 
 
 
 
 
 
d5edfd7
123428d
d5edfd7
 
123428d
 
 
 
 
 
 
 
 
 
 
d5edfd7
123428d
d5edfd7
123428d
 
d5edfd7
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
import { pipeline } from '@huggingface/transformers';
import http from 'http';

// Configuration
const PORT = 7860;
const MODEL_NAME = 'Xenova/codegen-2B-mono'; // ← Upgraded: 2B param model, much stronger code generation
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}`);
    });
});