perf: max_token count;feat: support resoner output;fix: member scroll (#3681)

* perf: supplement assistant empty response

* check array

* perf: max_token count

* feat: support resoner output

* member scroll

* update provider order

* i18n
This commit is contained in:
Archer
2025-02-01 18:04:44 +08:00
committed by archer
parent 9e0379382f
commit 54defd8a3c
46 changed files with 462 additions and 266 deletions

View File

@@ -14,36 +14,19 @@ import { serverRequestBaseUrl } from '../../common/api/serverRequest';
import { i18nT } from '../../../web/i18n/utils';
import { addLog } from '../../common/system/log';
export const filterGPTMessageByMaxTokens = async ({
export const filterGPTMessageByMaxContext = async ({
messages = [],
maxTokens
maxContext
}: {
messages: ChatCompletionMessageParam[];
maxTokens: number;
maxContext: number;
}) => {
if (!Array.isArray(messages)) {
return [];
}
const rawTextLen = messages.reduce((sum, item) => {
if (typeof item.content === 'string') {
return sum + item.content.length;
}
if (Array.isArray(item.content)) {
return (
sum +
item.content.reduce((sum, item) => {
if (item.type === 'text') {
return sum + item.text.length;
}
return sum;
}, 0)
);
}
return sum;
}, 0);
// If the text length is less than half of the maximum token, no calculation is required
if (rawTextLen < maxTokens * 0.5) {
if (messages.length < 4) {
return messages;
}
@@ -55,7 +38,7 @@ export const filterGPTMessageByMaxTokens = async ({
const chatPrompts: ChatCompletionMessageParam[] = messages.slice(chatStartIndex);
// reduce token of systemPrompt
maxTokens -= await countGptMessagesTokens(systemPrompts);
maxContext -= await countGptMessagesTokens(systemPrompts);
// Save the last chat prompt(question)
const question = chatPrompts.pop();
@@ -73,9 +56,9 @@ export const filterGPTMessageByMaxTokens = async ({
}
const tokens = await countGptMessagesTokens([assistant, user]);
maxTokens -= tokens;
maxContext -= tokens;
/* 整体 tokens 超出范围,截断 */
if (maxTokens < 0) {
if (maxContext < 0) {
break;
}