Update app.js
Browse files
app.js
CHANGED
@@ -10,15 +10,12 @@ const NOTDIAMOND_HEADERS = {
|
|
10 |
'Content-Type': 'application/json',
|
11 |
'next-action': '8189eb37107121e024940f588629a394a594e6a4'
|
12 |
};
|
13 |
-
const AUTH_KEY = process.env.AUTH_KEY;
|
14 |
|
15 |
-
const DEFAULT_MODEL = 'gpt-
|
16 |
|
17 |
const MODEL_MAPPING = {
|
18 |
-
'gpt-4o-mini': 'gpt-4o-mini',
|
19 |
-
'gpt-4o': 'gpt-4o',
|
20 |
'gpt-4-turbo': 'gpt-4-turbo-2024-04-09',
|
21 |
-
'claude-3-haiku-20240307': 'anthropic.claude-3-haiku-20240307-v1:0',
|
22 |
'claude-3-5-sonnet-20240620': 'anthropic.claude-3-5-sonnet-20240620-v1:0',
|
23 |
'gemini-1.5-pro-latest': 'models/gemini-1.5-pro-latest',
|
24 |
'gemini-1.5-pro-exp-0801': 'models/gemini-1.5-pro-exp-0801',
|
@@ -122,7 +119,6 @@ async function* streamNotdiamondResponse(response, model) {
|
|
122 |
|
123 |
app.use(express.json());
|
124 |
|
125 |
-
// 添加根路由,提供服务使用指引
|
126 |
app.get('/', (req, res) => {
|
127 |
res.json({
|
128 |
service: "AI Chat Completion Proxy",
|
@@ -149,25 +145,26 @@ app.get('/', (req, res) => {
|
|
149 |
});
|
150 |
|
151 |
app.post('/ai/v1/chat/completions', async (req, res) => {
|
152 |
-
const
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
|
157 |
try {
|
158 |
-
|
|
|
|
|
|
|
|
|
159 |
|
|
|
160 |
let messages = requestData.messages;
|
161 |
-
let userModel = requestData.model || DEFAULT_MODEL;
|
162 |
let model = MODEL_MAPPING[userModel] || userModel;
|
163 |
const stream = requestData.stream || false;
|
164 |
|
165 |
if (!messages || !Array.isArray(messages)) {
|
166 |
-
|
167 |
-
|
168 |
-
details: 'messages should be an array of message objects',
|
169 |
-
receivedBody: req.body
|
170 |
-
});
|
171 |
}
|
172 |
|
173 |
const payload = {
|
@@ -235,12 +232,17 @@ app.post('/ai/v1/chat/completions', async (req, res) => {
|
|
235 |
total_tokens: Math.floor(fullContent.length / 2)
|
236 |
}
|
237 |
});
|
238 |
-
}
|
239 |
} catch (error) {
|
240 |
-
|
241 |
-
|
|
|
242 |
details: error.message
|
243 |
});
|
|
|
|
|
|
|
|
|
244 |
}
|
245 |
});
|
246 |
|
|
|
10 |
'Content-Type': 'application/json',
|
11 |
'next-action': '8189eb37107121e024940f588629a394a594e6a4'
|
12 |
};
|
13 |
+
const AUTH_KEY = process.env.AUTH_KEY || 'sk-linuxdo';
|
14 |
|
15 |
+
const DEFAULT_MODEL = 'gpt-4-turbo';
|
16 |
|
17 |
const MODEL_MAPPING = {
|
|
|
|
|
18 |
'gpt-4-turbo': 'gpt-4-turbo-2024-04-09',
|
|
|
19 |
'claude-3-5-sonnet-20240620': 'anthropic.claude-3-5-sonnet-20240620-v1:0',
|
20 |
'gemini-1.5-pro-latest': 'models/gemini-1.5-pro-latest',
|
21 |
'gemini-1.5-pro-exp-0801': 'models/gemini-1.5-pro-exp-0801',
|
|
|
119 |
|
120 |
app.use(express.json());
|
121 |
|
|
|
122 |
app.get('/', (req, res) => {
|
123 |
res.json({
|
124 |
service: "AI Chat Completion Proxy",
|
|
|
145 |
});
|
146 |
|
147 |
app.post('/ai/v1/chat/completions', async (req, res) => {
|
148 |
+
const startTime = new Date();
|
149 |
+
const clientIP = req.ip || req.connection.remoteAddress;
|
150 |
+
let userModel = req.body.model || DEFAULT_MODEL;
|
151 |
+
let status = 200;
|
152 |
|
153 |
try {
|
154 |
+
const authHeader = req.headers['authorization'];
|
155 |
+
if (!authHeader || !authHeader.startsWith('Bearer ') || authHeader.slice(7) !== AUTH_KEY) {
|
156 |
+
status = 401;
|
157 |
+
throw new Error('Unauthorized');
|
158 |
+
}
|
159 |
|
160 |
+
let requestData = req.body;
|
161 |
let messages = requestData.messages;
|
|
|
162 |
let model = MODEL_MAPPING[userModel] || userModel;
|
163 |
const stream = requestData.stream || false;
|
164 |
|
165 |
if (!messages || !Array.isArray(messages)) {
|
166 |
+
status = 400;
|
167 |
+
throw new Error('Invalid request body: messages should be an array of message objects');
|
|
|
|
|
|
|
168 |
}
|
169 |
|
170 |
const payload = {
|
|
|
232 |
total_tokens: Math.floor(fullContent.length / 2)
|
233 |
}
|
234 |
});
|
235 |
+
}
|
236 |
} catch (error) {
|
237 |
+
status = status === 200 ? 500 : status;
|
238 |
+
res.status(status).json({
|
239 |
+
error: 'Error',
|
240 |
details: error.message
|
241 |
});
|
242 |
+
} finally {
|
243 |
+
const endTime = new Date();
|
244 |
+
const duration = endTime - startTime;
|
245 |
+
console.log(`${endTime.toISOString()} - ${clientIP} - ${userModel} - ${status} - ${duration}ms`);
|
246 |
}
|
247 |
});
|
248 |
|