mirror of
https://github.com/vastxie/99AI.git
synced 2025-09-19 10:06:38 +08:00
102 lines
3.5 KiB
JavaScript
102 lines
3.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.sendMessageFromZhipu = exports.compilerStream = exports.compilerMetaJsonStr = exports.generateToken = void 0;
|
|
const axios = require('axios');
|
|
const jwt = require('jsonwebtoken');
|
|
function generateToken(apikey, expSeconds = 1000 * 60 * 60 * 24 * 360) {
|
|
const [id, secret] = apikey.split('.');
|
|
const payload = {
|
|
api_key: id,
|
|
exp: Math.round(Date.now()) + expSeconds * 1000,
|
|
timestamp: Math.round(Date.now()),
|
|
};
|
|
return jwt.sign(payload, secret, { algorithm: 'HS256', header: { alg: 'HS256', sign_type: 'SIGN' } });
|
|
}
|
|
exports.generateToken = generateToken;
|
|
function compilerMetaJsonStr(data) {
|
|
let jsonStr = {};
|
|
try {
|
|
jsonStr = JSON.parse(data);
|
|
}
|
|
catch (error) {
|
|
jsonStr = {
|
|
usage: {
|
|
completion_tokens: 49,
|
|
prompt_tokens: 333,
|
|
total_tokens: 399
|
|
},
|
|
};
|
|
console.error('json parse error from zhipu!', data);
|
|
}
|
|
return jsonStr;
|
|
}
|
|
exports.compilerMetaJsonStr = compilerMetaJsonStr;
|
|
function compilerStream(streamArr) {
|
|
var _a;
|
|
if (streamArr.length === 3) {
|
|
return {
|
|
event: streamArr[0].replace('event:', ''),
|
|
id: streamArr[1].replace('id:', ''),
|
|
is_end: false,
|
|
result: streamArr[2].replace('data:', '').trim()
|
|
};
|
|
}
|
|
if (streamArr.length === 4) {
|
|
return {
|
|
event: streamArr[0].replace('event:', ''),
|
|
id: streamArr[1].replace('id:', ''),
|
|
result: streamArr[2].replace('data:', '').trim(),
|
|
is_end: true,
|
|
usage: (_a = compilerMetaJsonStr(streamArr[3].replace('meta:', ''))) === null || _a === void 0 ? void 0 : _a.usage
|
|
};
|
|
}
|
|
}
|
|
exports.compilerStream = compilerStream;
|
|
async function sendMessageFromZhipu(messagesHistory, { onProgress, key, model, temperature = 0.95 }) {
|
|
const token = await generateToken(key);
|
|
return new Promise((resolve, reject) => {
|
|
const url = `https://open.bigmodel.cn/api/paas/v3/model-api/${model}/sse-invoke`;
|
|
const options = {
|
|
method: 'POST',
|
|
url,
|
|
responseType: 'stream',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': token
|
|
},
|
|
data: {
|
|
prompt: messagesHistory,
|
|
temperature
|
|
}
|
|
};
|
|
axios(options)
|
|
.then(response => {
|
|
const stream = response.data;
|
|
let resData;
|
|
let cacheResText = '';
|
|
stream.on('data', chunk => {
|
|
const stramArr = chunk.toString().split("\n").filter((line) => line.trim() !== "");
|
|
const parseData = compilerStream(stramArr);
|
|
if (!parseData)
|
|
return;
|
|
const { id, result, is_end } = parseData;
|
|
result && (cacheResText += result.trim());
|
|
if (is_end) {
|
|
parseData.is_end = false;
|
|
resData = parseData;
|
|
resData.text = cacheResText;
|
|
}
|
|
onProgress(parseData);
|
|
});
|
|
stream.on('end', () => {
|
|
resolve(resData);
|
|
cacheResText = '';
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.log('error: ', error);
|
|
});
|
|
});
|
|
}
|
|
exports.sendMessageFromZhipu = sendMessageFromZhipu;
|