支持多会话负载均衡

This commit is contained in:
Archeb
2024-05-15 13:24:44 +08:00
committed by 蚊子
parent 0441b8bb89
commit 2224bf0059
2 changed files with 29 additions and 23 deletions
+8
View File
@@ -0,0 +1,8 @@
module.exports = {
"sessions": [
{
"cookie": "your_cookie",
"user_agent": "user_agent"
}
]
}
+21 -23
View File
@@ -7,8 +7,13 @@ const axios = require("axios");
const port = 8080;
const validApiKey = process.env.PASSWORD;
axios.defaults.headers.common["User-Agent"] = process.env.USER_AGENT;
axios.defaults.headers.common["Cookie"] = process.env.YOUCOM_COOKIE;
// import config.js
try {
var config = require("./config.js");
} catch (e) {
console.error("Missing config.js, create it from config.example.js and fill in the values.");
process.exit(1);
}
app.post("/v1/messages", apiKeyAuth, (req, res) => {
@@ -55,7 +60,7 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => {
// 把系统消息加入messages的首条
jsonBody.messages.unshift({ role: "system", content: jsonBody.system });
}
console.log(jsonBody.messages);
console.log("message length:" + jsonBody.messages.length);
jsonBody.messages.forEach((msg) => {
if (msg.role == "system" || msg.role == "user") {
if (lastUpdate) {
@@ -79,25 +84,18 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => {
});
userQuery = userMessage[userMessage.length - 1].question;
// 获取traceId
/*let initSearch = await axios.get("https://you.com/_next/data/f3b05a38b379a189a1db48b6665e81f064fbf1b8/en-US/search.json", {
params: {
q: userQuery.trim(),
fromSearchBar: "true",
tbm: "youchat",
chatMode: "custom"
},
headers: {
"X-Nextjs-Data":"1"
},
}).then((res) => res.data);
if(!initSearch) throw new Error("Failed to init search");
var traceId = initSearch.pageProps.initialTraceId;*/
var traceId=uuidv4();
// decide which session to use randomly
let sessionIndex = Math.floor(Math.random() * config.sessions.length);
var session = config.sessions[sessionIndex];
console.log("using session " + sessionIndex);
var instance = axios.create({
headers: {
"User-Agent": session.user_agent,
"Cookie": session.cookie,
},
});
// 试算用户消息长度
if(encodeURIComponent(JSON.stringify(userMessage)).length + encodeURIComponent(userQuery).length > 32000) {
@@ -114,14 +112,14 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => {
userMessage = [];
// GET https://you.com/api/get_nonce to get nonce
let nonce = await axios("https://you.com/api/get_nonce").then((res) => res.data);
let nonce = await instance("https://you.com/api/get_nonce").then((res) => res.data);
if (!nonce) throw new Error("Failed to get nonce");
// POST https://you.com/api/upload to upload user message
const form_data = new FormData();
var messageBuffer = await createDocx(previousMessages);
form_data.append("file", messageBuffer, { filename: "messages.docx", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
var uploadedFile = await axios
var uploadedFile = await instance
.post("https://you.com/api/upload", form_data, {
headers: {
...form_data.getHeaders(),
@@ -155,7 +153,7 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => {
// proxy response
var proxyReq = await axios
var proxyReq = await instance
.get("https://you.com/api/streamingSearch", {
params: {
page: "1",