smgc commited on
Commit
99814a1
1 Parent(s): 2db18aa

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +22 -20
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-4o';
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 authHeader = req.headers['authorization'];
153
- if (!authHeader || !authHeader.startsWith('Bearer ') || authHeader.slice(7) !== AUTH_KEY) {
154
- return res.status(401).json({ error: 'Unauthorized' });
155
- }
156
 
157
  try {
158
- let requestData = req.body;
 
 
 
 
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
- return res.status(400).json({
167
- error: 'Invalid request body',
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
- res.status(500).json({
241
- error: 'Internal Server Error',
 
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