From 7e5442119094b6a246f125ef9ff7b6f97e98d0f4 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Mon, 17 Apr 2023 10:41:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=9A=E6=9C=BA=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E8=87=B4=E4=BB=BB=E5=8A=A1=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/openapi/startEvents.ts | 19 +++++++++++++++++++ src/service/events/generateAbstract.ts | 5 +++++ src/service/events/generateQA.ts | 14 ++++++++++++-- src/service/events/generateVector.ts | 15 +++++++++++++-- 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 src/pages/api/openapi/startEvents.ts diff --git a/src/pages/api/openapi/startEvents.ts b/src/pages/api/openapi/startEvents.ts new file mode 100644 index 000000000..b0bed8a7c --- /dev/null +++ b/src/pages/api/openapi/startEvents.ts @@ -0,0 +1,19 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@/service/response'; +import { generateQA } from '@/service/events/generateQA'; +import { generateVector } from '@/service/events/generateVector'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + generateQA(); + generateVector(); + + jsonRes(res); + } catch (err) { + jsonRes(res, { + code: 500, + error: err + }); + } +} diff --git a/src/service/events/generateAbstract.ts b/src/service/events/generateAbstract.ts index d432e6bb8..beb8185ea 100644 --- a/src/service/events/generateAbstract.ts +++ b/src/service/events/generateAbstract.ts @@ -8,7 +8,12 @@ import { ChatModelNameEnum } from '@/constants/model'; import { pushSplitDataBill } from '@/service/events/pushBill'; export async function generateAbstract(next = false): Promise { + if (process.env.queueTask !== '1') { + fetch(process.env.parentUrl || ''); + return; + } if (global.generatingAbstract && !next) return; + global.generatingAbstract = true; const systemPrompt: ChatCompletionRequestMessage = { diff --git a/src/service/events/generateQA.ts b/src/service/events/generateQA.ts index afeea837e..69b20bb06 100644 --- a/src/service/events/generateQA.ts +++ b/src/service/events/generateQA.ts @@ -13,7 +13,12 @@ import { ModelSplitDataSchema } from '@/types/mongoSchema'; const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 12); export async function generateQA(next = false): Promise { + if (process.env.queueTask !== '1') { + fetch(process.env.parentUrl || ''); + return; + } if (global.generatingQA === true && !next) return; + global.generatingQA = true; let dataId = null; @@ -165,8 +170,13 @@ export async function generateQA(next = false): Promise { console.log('生成QA错误:', error); } - if (dataId && error?.response?.data?.error?.type === 'insufficient_quota') { - console.log('api 余额不足'); + // 没有余额或者凭证错误时,拒绝任务 + if ( + dataId && + (+error.response?.status === 401 || + error?.response?.data?.error?.type === 'insufficient_quota') + ) { + console.log('api 异常,删除QA任务'); await SplitData.findByIdAndUpdate(dataId, { textList: [], diff --git a/src/service/events/generateVector.ts b/src/service/events/generateVector.ts index 19c395003..0c9cff5cc 100644 --- a/src/service/events/generateVector.ts +++ b/src/service/events/generateVector.ts @@ -5,7 +5,13 @@ import { ModelDataStatusEnum } from '@/constants/redis'; import { openaiCreateEmbedding, getOpenApiKey } from '../utils/openai'; export async function generateVector(next = false): Promise { + if (process.env.queueTask !== '1') { + fetch(process.env.parentUrl || ''); + return; + } + if (global.generatingVector && !next) return; + global.generatingVector = true; let dataId = null; try { @@ -84,8 +90,13 @@ export async function generateVector(next = false): Promise { console.log('生成向量错误:', error); } - if (dataId && error?.response?.data?.error?.type === 'insufficient_quota') { - console.log('api 余额不足,删除 redis 模型数据'); + // 没有余额或者凭证错误时,拒绝任务 + if ( + dataId && + (+error.response?.status === 401 || + error?.response?.data?.error?.type === 'insufficient_quota') + ) { + console.log('删除向量生成任务记录'); const redis = await connectRedis(); redis.del(dataId); generateVector(true);