This commit is contained in:
archer
2023-07-20 10:01:45 +08:00
parent 62ee28b130
commit 75c8c42530
8 changed files with 33 additions and 20 deletions

View File

@@ -10,8 +10,9 @@
}, },
"SystemParams": { "SystemParams": {
"beianText": "", "beianText": "",
"googleVerKey": "",
"baiduTongji": "", "baiduTongji": "",
"googleClientVerKey": "",
"googleServiceVerKey": "",
"vectorMaxProcess": 15, "vectorMaxProcess": 15,
"qaMaxProcess": 15, "qaMaxProcess": 15,
"pgIvfflatProbe": 20, "pgIvfflatProbe": 20,

View File

@@ -4,7 +4,7 @@ import { UserAuthTypeEnum } from '@/constants/common';
let timer: any; let timer: any;
import { useToast } from './useToast'; import { useToast } from './useToast';
import { getClientToken } from '@/utils/plugin/google'; import { getClientToken } from '@/utils/plugin/google';
import { googleVerKey } from '@/store/static'; import { googleClientVerKey } from '@/store/static';
export const useSendCode = () => { export const useSendCode = () => {
const { toast } = useToast(); const { toast } = useToast();
@@ -27,7 +27,7 @@ export const useSendCode = () => {
await sendAuthCode({ await sendAuthCode({
username, username,
type, type,
googleToken: await getClientToken(googleVerKey) googleToken: await getClientToken(googleClientVerKey)
}); });
setCodeCountDown(60); setCodeCountDown(60);
timer = setInterval(() => { timer = setInterval(() => {

View File

@@ -31,7 +31,7 @@ const queryClient = new QueryClient({
}); });
function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; response: any }) { function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; response: any }) {
const [googleVerKey, setGoogleVerKey] = useState<string>(); const [googleClientVerKey, setGoogleVerKey] = useState<string>();
const [baiduTongji, setBaiduTongji] = useState<string>(); const [baiduTongji, setBaiduTongji] = useState<string>();
const { initIsPc } = useGlobalStore(); const { initIsPc } = useGlobalStore();
@@ -42,9 +42,9 @@ function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; respon
useEffect(() => { useEffect(() => {
(async () => { (async () => {
const { const {
systemEnv: { googleVerKey, baiduTongji } systemEnv: { googleClientVerKey, baiduTongji }
} = await clientInitData(); } = await clientInitData();
setGoogleVerKey(googleVerKey); setGoogleVerKey(googleClientVerKey);
setBaiduTongji(baiduTongji); setBaiduTongji(baiduTongji);
})(); })();
}, []); }, []);
@@ -65,10 +65,10 @@ function App({ Component, pageProps, isPc }: AppProps & { isPc?: boolean; respon
<Script src="/js/pdf.js" strategy="lazyOnload"></Script> <Script src="/js/pdf.js" strategy="lazyOnload"></Script>
<Script src="/js/html2pdf.bundle.min.js" strategy="lazyOnload"></Script> <Script src="/js/html2pdf.bundle.min.js" strategy="lazyOnload"></Script>
{baiduTongji && <Script src={baiduTongji} strategy="lazyOnload"></Script>} {baiduTongji && <Script src={baiduTongji} strategy="lazyOnload"></Script>}
{googleVerKey && ( {googleClientVerKey && (
<> <>
<Script <Script
src={`https://www.recaptcha.net/recaptcha/api.js?render=${googleVerKey}`} src={`https://www.recaptcha.net/recaptcha/api.js?render=${googleClientVerKey}`}
strategy="afterInteractive" strategy="afterInteractive"
></Script> ></Script>
</> </>

View File

@@ -23,9 +23,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
} }
// google auth // google auth
process.env.SERVICE_GOOGLE_VER_TOKEN && global.systemEnv.googleServiceVerKey &&
(await authGoogleToken({ (await authGoogleToken({
secret: process.env.SERVICE_GOOGLE_VER_TOKEN, secret: global.systemEnv.googleServiceVerKey,
response: googleToken, response: googleToken,
remoteip: requestIp.getClientIp(req) || undefined remoteip: requestIp.getClientIp(req) || undefined
})); }));

View File

@@ -7,6 +7,8 @@ import { sendInform } from '@/pages/api/user/inform/send';
import { authBalanceByUid } from '../utils/auth'; import { authBalanceByUid } from '../utils/auth';
import { axiosConfig, getOpenAIApi } from '../ai/openai'; import { axiosConfig, getOpenAIApi } from '../ai/openai';
import { ChatCompletionRequestMessage } from 'openai'; import { ChatCompletionRequestMessage } from 'openai';
import { modelToolMap } from '@/utils/plugin';
import { gptMessage2ChatType } from '@/utils/adapt';
const reduceQueue = () => { const reduceQueue = () => {
global.qaQueueLen = global.qaQueueLen > 0 ? global.qaQueueLen - 1 : 0; global.qaQueueLen = global.qaQueueLen > 0 ? global.qaQueueLen - 1 : 0;
@@ -58,6 +60,8 @@ export async function generateQA(): Promise<any> {
// 请求 chatgpt 获取回答 // 请求 chatgpt 获取回答
const response = await Promise.all( const response = await Promise.all(
[data.q].map((text) => { [data.q].map((text) => {
const modelTokenLimit =
chatModels.find((item) => item.model === data.model)?.contextMaxToken || 16000;
const messages: ChatCompletionRequestMessage[] = [ const messages: ChatCompletionRequestMessage[] = [
{ {
role: 'system', role: 'system',
@@ -74,13 +78,20 @@ A2:
content: text content: text
} }
]; ];
const promptsToken = modelToolMap.countTokens({
messages: gptMessage2ChatType(messages)
});
const maxToken = modelTokenLimit - promptsToken;
return chatAPI return chatAPI
.createChatCompletion( .createChatCompletion(
{ {
model: data.model, model: data.model,
temperature: 0.8, temperature: 0.8,
messages, messages,
stream: false stream: false,
max_tokens: maxToken
}, },
{ {
timeout: 480000, timeout: 480000,

View File

@@ -9,7 +9,7 @@ import { delay } from '@/utils/tools';
import { FeConfigsType } from '@/types'; import { FeConfigsType } from '@/types';
export let beianText: string | undefined; export let beianText: string | undefined;
export let googleVerKey: string | undefined; export let googleClientVerKey: string | undefined;
export let baiduTongji: string | undefined; export let baiduTongji: string | undefined;
export let chatModelList: ChatModelItemType[] = []; export let chatModelList: ChatModelItemType[] = [];
export let qaModelList: QAModelItemType[] = []; export let qaModelList: QAModelItemType[] = [];
@@ -26,10 +26,9 @@ export const clientInitData = async (): Promise<InitDateResponse> => {
qaModelList = res.qaModels; qaModelList = res.qaModels;
vectorModelList = res.vectorModels; vectorModelList = res.vectorModels;
feConfigs = res.feConfigs; feConfigs = res.feConfigs;
beianText = res.systemEnv.beianText; beianText = res.systemEnv?.beianText;
googleVerKey = res.systemEnv.googleVerKey; googleClientVerKey = res.systemEnv?.googleClientVerKey;
baiduTongji = res.systemEnv.baiduTongji; baiduTongji = res.systemEnv?.baiduTongji;
console.log(res);
return res; return res;
} catch (error) { } catch (error) {

View File

@@ -24,7 +24,8 @@ export type FeConfigsType = {
}; };
export type SystemEnvType = { export type SystemEnvType = {
beianText?: string; beianText?: string;
googleVerKey?: string; googleClientVerKey?: string;
googleServiceVerKey?: string;
baiduTongji?: string; baiduTongji?: string;
vectorMaxProcess: number; vectorMaxProcess: number;
qaMaxProcess: number; qaMaxProcess: number;

View File

@@ -1,12 +1,13 @@
import axios from 'axios'; import axios from 'axios';
import { Obj2Query } from '../tools'; import { Obj2Query } from '../tools';
export const getClientToken = (googleVerKey: string) => { export const getClientToken = (googleClientVerKey?: string) => {
if (typeof window.grecaptcha === 'undefined' || !window.grecaptcha?.ready) return ''; if (!googleClientVerKey || typeof window.grecaptcha === 'undefined' || !window.grecaptcha?.ready)
return '';
return new Promise<string>((resolve, reject) => { return new Promise<string>((resolve, reject) => {
window.grecaptcha.ready(async () => { window.grecaptcha.ready(async () => {
try { try {
const token = await window.grecaptcha.execute(googleVerKey, { const token = await window.grecaptcha.execute(googleClientVerKey, {
action: 'submit' action: 'submit'
}); });
resolve(token); resolve(token);