smgc commited on
Commit
2fa7423
·
verified ·
1 Parent(s): dc1e5db

Update api/index.js

Browse files
Files changed (1) hide show
  1. api/index.js +26 -32
api/index.js CHANGED
@@ -173,17 +173,9 @@ router.get(config.API_PREFIX + '/v1/models', withAuth, () =>
173
  // chat 路由
174
  router.post(config.API_PREFIX + '/v1/chat/completions', withAuth, (req) => handleCompletion(req));
175
 
176
- function getMetadata() {
177
- const metadata = new grpc.Metadata();
178
- metadata.set('user-agent', 'dart-grpc/2.0.0');
179
- return metadata;
180
- }
181
-
182
  async function GrpcToPieces(models, message, rules, stream, temperature, top_p) {
183
- // 使用系统的根证书
184
  const credentials = grpc.credentials.createSsl();
185
 
186
- // 创建自定义metadata
187
  function getMetadata() {
188
  const metadata = new grpc.Metadata();
189
  metadata.set('user-agent', 'dart-grpc/2.0.0');
@@ -198,25 +190,20 @@ async function GrpcToPieces(models, message, rules, stream, temperature, top_p)
198
  let client, request;
199
 
200
  if (models.includes('gpt')) {
201
- // 加载proto文件
202
  const packageDefinition = new GRPCHandler(config.GPT_PROTO).packageDefinition;
203
- // 构建请求消息
204
  request = {
205
  models: models,
206
  messages: [
207
- {role: 0, message: rules}, // system
208
- {role: 1, message: message} // user
209
  ],
210
  temperature: temperature || 0.1,
211
  top_p: top_p ?? 1,
212
- }
213
- // 获取gRPC对象
214
  const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.gpt;
215
  client = new GRPCobjects.GPTInferenceService(config.GPT_GRPC, credentials, options);
216
  } else {
217
- // 加载proto文件
218
  const packageDefinition = new GRPCHandler(config.COMMON_PROTO).packageDefinition;
219
- // 构建请求消息
220
  request = {
221
  models: models,
222
  args: {
@@ -227,11 +214,11 @@ async function GrpcToPieces(models, message, rules, stream, temperature, top_p)
227
  rules: rules
228
  }
229
  };
230
- // 获取gRPC对象
231
  const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.vertex;
232
  client = new GRPCobjects.VertexInferenceService(config.COMMON_GRPC, credentials, options);
233
  }
234
 
 
235
  return await ConvertOpenai(client, request, models, stream, metadata);
236
  }
237
 
@@ -268,26 +255,28 @@ async function ConvertOpenai(client, request, model, stream, metadata) {
268
  const ReturnStream = new ReadableStream({
269
  start(controller) {
270
  call.on('data', (response) => {
 
271
  let response_code = Number(response.response_code);
272
  if (response_code === 204) {
273
- // 如果 response_code 是 204,关闭流
274
  controller.close();
275
  call.destroy();
276
  } else if (response_code === 200) {
277
  let response_message;
278
  if (model.includes('gpt')) {
279
- response_message = response.body.message_warpper.message.message;
280
  } else {
281
- response_message = response.args.args.args.message;
 
 
 
282
  }
283
- // 否则,将数据块加入流中
284
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(ChatCompletionStreamWithModel(response_message, model))}\n\n`));
285
  } else {
286
- controller.error(new Error(`Error: stream chunk is not success`));
287
  controller.close();
288
  }
289
  });
290
  call.on('error', (error) => {
 
291
  controller.error(error);
292
  controller.close();
293
  });
@@ -308,27 +297,32 @@ async function ConvertOpenai(client, request, model, stream, metadata) {
308
  else resolve(response);
309
  });
310
  });
 
311
  let response_code = Number(call.response_code);
312
  if (response_code === 200) {
313
  let response_message;
314
  if (model.includes('gpt')) {
315
- response_message = call.body.message_warpper.message.message;
316
  } else {
317
- response_message = call.args.args.args.message;
 
 
 
 
 
 
 
 
 
318
  }
319
- return new Response(JSON.stringify(ChatCompletionWithModel(response_message, model)), {
320
- headers: {
321
- 'Content-Type': 'application/json',
322
- },
323
- });
324
  } else {
325
  throw new Error(`Error: response code ${response_code}`);
326
  }
327
  }
328
  } catch (err) {
329
- console.error(err);
330
  if (i === config.MAX_RETRY_COUNT - 1) {
331
- return error(500, err.message);
332
  }
333
  await new Promise((resolve) => setTimeout(resolve, config.RETRY_DELAY));
334
  }
 
173
  // chat 路由
174
  router.post(config.API_PREFIX + '/v1/chat/completions', withAuth, (req) => handleCompletion(req));
175
 
 
 
 
 
 
 
176
  async function GrpcToPieces(models, message, rules, stream, temperature, top_p) {
 
177
  const credentials = grpc.credentials.createSsl();
178
 
 
179
  function getMetadata() {
180
  const metadata = new grpc.Metadata();
181
  metadata.set('user-agent', 'dart-grpc/2.0.0');
 
190
  let client, request;
191
 
192
  if (models.includes('gpt')) {
 
193
  const packageDefinition = new GRPCHandler(config.GPT_PROTO).packageDefinition;
 
194
  request = {
195
  models: models,
196
  messages: [
197
+ { role: 0, message: rules }, // system
198
+ { role: 1, message: message } // user
199
  ],
200
  temperature: temperature || 0.1,
201
  top_p: top_p ?? 1,
202
+ };
 
203
  const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.gpt;
204
  client = new GRPCobjects.GPTInferenceService(config.GPT_GRPC, credentials, options);
205
  } else {
 
206
  const packageDefinition = new GRPCHandler(config.COMMON_PROTO).packageDefinition;
 
207
  request = {
208
  models: models,
209
  args: {
 
214
  rules: rules
215
  }
216
  };
 
217
  const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.vertex;
218
  client = new GRPCobjects.VertexInferenceService(config.COMMON_GRPC, credentials, options);
219
  }
220
 
221
+ console.log('Request:', JSON.stringify(request, null, 2));
222
  return await ConvertOpenai(client, request, models, stream, metadata);
223
  }
224
 
 
255
  const ReturnStream = new ReadableStream({
256
  start(controller) {
257
  call.on('data', (response) => {
258
+ console.log('Stream response:', JSON.stringify(response, null, 2));
259
  let response_code = Number(response.response_code);
260
  if (response_code === 204) {
 
261
  controller.close();
262
  call.destroy();
263
  } else if (response_code === 200) {
264
  let response_message;
265
  if (model.includes('gpt')) {
266
+ response_message = response.body?.message_warpper?.message?.message;
267
  } else {
268
+ response_message = response.args?.args?.args?.message;
269
+ }
270
+ if (response_message) {
271
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(ChatCompletionStreamWithModel(response_message, model))}\n\n`));
272
  }
 
 
273
  } else {
274
+ controller.error(new Error(`Error: stream chunk response code ${response_code}`));
275
  controller.close();
276
  }
277
  });
278
  call.on('error', (error) => {
279
+ console.error('Stream error:', error);
280
  controller.error(error);
281
  controller.close();
282
  });
 
297
  else resolve(response);
298
  });
299
  });
300
+ console.log('Non-stream response:', JSON.stringify(call, null, 2));
301
  let response_code = Number(call.response_code);
302
  if (response_code === 200) {
303
  let response_message;
304
  if (model.includes('gpt')) {
305
+ response_message = call.body?.message_warpper?.message?.message;
306
  } else {
307
+ response_message = call.args?.args?.args?.message;
308
+ }
309
+ if (response_message) {
310
+ return new Response(JSON.stringify(ChatCompletionWithModel(response_message, model)), {
311
+ headers: {
312
+ 'Content-Type': 'application/json',
313
+ },
314
+ });
315
+ } else {
316
+ throw new Error('Response message is empty or undefined');
317
  }
 
 
 
 
 
318
  } else {
319
  throw new Error(`Error: response code ${response_code}`);
320
  }
321
  }
322
  } catch (err) {
323
+ console.error(`Attempt ${i + 1} failed:`, err);
324
  if (i === config.MAX_RETRY_COUNT - 1) {
325
+ return error(500, `All retry attempts failed. Last error: ${err.message}`);
326
  }
327
  await new Promise((resolve) => setTimeout(resolve, config.RETRY_DELAY));
328
  }