Update api/index.js
Browse files- 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},
|
208 |
-
{role: 1, message: message}
|
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
|
280 |
} else {
|
281 |
-
response_message = response.args
|
|
|
|
|
|
|
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
|
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
|
316 |
} else {
|
317 |
-
response_message = call.args
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
}
|