File size: 3,936 Bytes
c517271
7626743
 
 
 
 
 
 
 
 
 
 
 
 
 
c517271
 
d6474bb
 
 
 
 
 
 
c517271
 
 
 
d6474bb
c517271
 
 
 
cb0dedb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70064ec
edf7164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8a35d38
 
edf7164
 
 
 
 
 
 
 
 
 
 
7626743
 
 
 
 
 
 
8a35d38
7626743
73813dd
7626743
8a35d38
 
 
 
 
edf7164
7626743
 
cf6dabc
 
 
 
edf7164
cf6dabc
 
 
 
 
edf7164
cf6dabc
 
8a35d38
cf6dabc
73813dd
edf7164
cf6dabc
edf7164
8a35d38
 
 
 
3670643
8a35d38
edf7164
cf6dabc
 
 
7626743
 
 
1945d73
 
 
7626743
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const fs = require("fs").promises;
const express = require("express");
const axios = require("axios");
const bodyParser = require("body-parser");
const path = require("path");

const app = express();

app.use(express.static(path.join(__dirname, ".")));
app.use(bodyParser.json());

app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname + "/index.html"));
});

app.get("/endpoints", async (req, res) => {
    try {
        let endpoints_configs_path = path.join(
            __dirname,
            "configs",
            "endpoints.json"
        );
        const data = await fs.readFile(endpoints_configs_path, "utf-8");
        const local_points = JSON.parse(data);
        res.json(local_points);
    } catch (error) {
        console.error(error);
        res.status(500).json({
            error: "Failed to get local endpoints: Maybe configs/endpoints.json not existed?",
        });
    }
});

app.get("/agents", async (req, res) => {
    try {
        let agents_configs_path = path.join(
            __dirname,
            "configs",
            "agents.json"
        );
        const data = await fs.readFile(agents_configs_path, "utf-8");
        const local_agents = JSON.parse(data);
        res.json(local_agents);
    } catch (error) {
        console.error(error);
        res.status(500).json({
            error: "Failed to get local agents: Maybe configs/agents.json not existed?",
        });
    }
});

let httpProxyDict = false;
const loadHttpProxy = async () => {
    try {
        let secrets_configs_path = path.join(
            __dirname,
            "configs",
            "secrets.json"
        );
        const data = await fs.readFile(secrets_configs_path, "utf-8");
        const secrets = JSON.parse(data);
        if (secrets.http_proxy) {
            const url = new URL(secrets.http_proxy);
            httpProxyDict = {
                protocol: url.protocol.slice(0, -1),
                host: url.hostname,
                port: parseInt(url.port),
            };
        } else {
            console.warn("http_proxy not found in secrets");
        }
    } catch (error) {
        console.warn(
            "Failed to load http_proxy: Maybe configs/secrets.json not existed?"
        );
    }
};

loadHttpProxy();

app.post("/models", async (req, res) => {
    try {
        const {
            openai_endpoint,
            openai_request_method,
            openai_request_headers,
        } = req.body;

        let axios_config = {
            method: openai_request_method,
            url: openai_endpoint + "/v1/models",
            headers: openai_request_headers,
        };
        if (httpProxyDict) {
            axios_config.proxy = httpProxyDict;
        }
        const response = await axios(axios_config);
        res.json(response.data);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: "Failed to request OpenAI Endpoint" });
    }
});

app.post("/chat/completions", async (req, res) => {
    try {
        const {
            openai_endpoint,
            openai_request_method,
            openai_request_headers,
            openai_request_body,
        } = req.body;

        let axios_config = {
            method: openai_request_method,
            url: openai_endpoint + "/v1/chat/completions",
            data: openai_request_body,
            headers: openai_request_headers,
            responseType: "stream",
        };
        if (httpProxyDict) {
            axios_config.proxy = httpProxyDict;
        }
        console.log(`request to ${axios_config.url}`);
        const response = await axios(axios_config);
        response.data.pipe(res);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: "Failed to request OpenAI Endpoint" });
    }
});

const port = 23456;
app.listen(port, "0.0.0.0", () => {
    console.log(`Server is running on http://0.0.0.0:${port}`);
});