Commit 8cafebe2 by archer

fix: tiktoken memory

parent d6955457
...@@ -55,7 +55,6 @@ ...@@ -55,7 +55,6 @@
"remark-math": "^5.1.1", "remark-math": "^5.1.1",
"request-ip": "^3.3.0", "request-ip": "^3.3.0",
"sass": "^1.58.3", "sass": "^1.58.3",
"sharp": "^0.31.3",
"tunnel": "^0.0.6", "tunnel": "^0.0.6",
"wxpay-v3": "^3.0.2", "wxpay-v3": "^3.0.2",
"zustand": "^4.3.5" "zustand": "^4.3.5"
......
...@@ -37,6 +37,7 @@ export async function connectToDatabase(): Promise<void> { ...@@ -37,6 +37,7 @@ export async function connectToDatabase(): Promise<void> {
}); });
} }
// 初始化队列
global.qaQueueLen = 0; global.qaQueueLen = 0;
global.vectorQueueLen = 0; global.vectorQueueLen = 0;
......
import type { Mongoose } from 'mongoose'; import type { Mongoose } from 'mongoose';
import type { Agent } from 'http'; import type { Agent } from 'http';
import type { Pool } from 'pg'; import type { Pool } from 'pg';
import type { Tiktoken } from '@dqbd/tiktoken';
declare global { declare global {
var mongodb: Mongoose | string | null; var mongodb: Mongoose | string | null;
...@@ -11,6 +12,7 @@ declare global { ...@@ -11,6 +12,7 @@ declare global {
var QRCode: any; var QRCode: any;
var qaQueueLen: number; var qaQueueLen: number;
var vectorQueueLen: number; var vectorQueueLen: number;
var OpenAiEncMap: Record<string, Tiktoken>;
interface Window { interface Window {
['pdfjs-dist/build/pdf']: any; ['pdfjs-dist/build/pdf']: any;
......
...@@ -8,27 +8,48 @@ import Graphemer from 'graphemer'; ...@@ -8,27 +8,48 @@ import Graphemer from 'graphemer';
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const graphemer = new Graphemer(); const graphemer = new Graphemer();
export const adaptChatItem_openAI = ({
messages
}: {
messages: ChatItemSimpleType[];
}): ChatCompletionRequestMessage[] => {
const map = {
[ChatRoleEnum.AI]: ChatCompletionRequestMessageRoleEnum.Assistant,
[ChatRoleEnum.Human]: ChatCompletionRequestMessageRoleEnum.User,
[ChatRoleEnum.System]: ChatCompletionRequestMessageRoleEnum.System
};
return messages.map((item) => ({
role: map[item.obj] || ChatCompletionRequestMessageRoleEnum.System,
content: item.value || ''
}));
};
/* count openai chat token*/
let OpenAiEncMap: Record<string, Tiktoken>;
export const getOpenAiEncMap = () => { export const getOpenAiEncMap = () => {
if (OpenAiEncMap) return OpenAiEncMap; if (typeof window !== 'undefined') {
OpenAiEncMap = { window.OpenAiEncMap = window.OpenAiEncMap || {
'gpt-3.5-turbo': encoding_for_model('gpt-3.5-turbo', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
}),
'gpt-4': encoding_for_model('gpt-4', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
}),
'gpt-4-32k': encoding_for_model('gpt-4-32k', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
})
};
return window.OpenAiEncMap;
}
if (typeof global !== 'undefined') {
global.OpenAiEncMap = global.OpenAiEncMap || {
'gpt-3.5-turbo': encoding_for_model('gpt-3.5-turbo', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
}),
'gpt-4': encoding_for_model('gpt-4', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
}),
'gpt-4-32k': encoding_for_model('gpt-4-32k', {
'<|im_start|>': 100264,
'<|im_end|>': 100265,
'<|im_sep|>': 100266
})
};
return global.OpenAiEncMap;
}
return {
'gpt-3.5-turbo': encoding_for_model('gpt-3.5-turbo', { 'gpt-3.5-turbo': encoding_for_model('gpt-3.5-turbo', {
'<|im_start|>': 100264, '<|im_start|>': 100264,
'<|im_end|>': 100265, '<|im_end|>': 100265,
...@@ -45,8 +66,24 @@ export const getOpenAiEncMap = () => { ...@@ -45,8 +66,24 @@ export const getOpenAiEncMap = () => {
'<|im_sep|>': 100266 '<|im_sep|>': 100266
}) })
}; };
return OpenAiEncMap;
}; };
export const adaptChatItem_openAI = ({
messages
}: {
messages: ChatItemSimpleType[];
}): ChatCompletionRequestMessage[] => {
const map = {
[ChatRoleEnum.AI]: ChatCompletionRequestMessageRoleEnum.Assistant,
[ChatRoleEnum.Human]: ChatCompletionRequestMessageRoleEnum.User,
[ChatRoleEnum.System]: ChatCompletionRequestMessageRoleEnum.System
};
return messages.map((item) => ({
role: map[item.obj] || ChatCompletionRequestMessageRoleEnum.System,
content: item.value || ''
}));
};
export function countOpenAIToken({ export function countOpenAIToken({
messages, messages,
model model
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment