From 33cfa99bf8d75fb40bc950278581abf2d0f3993e Mon Sep 17 00:00:00 2001 From: xiang <1984871009@qq.com> Date: Tue, 27 Jun 2023 14:21:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81post?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.ts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/index.ts b/index.ts index 7c5c5a0..b0d23cf 100644 --- a/index.ts +++ b/index.ts @@ -1,4 +1,4 @@ -import Koa, {Context, Next} from 'koa'; +import Koa, {Context, Middleware, Next} from 'koa'; import Router from 'koa-router' import bodyParser from 'koa-bodyparser'; import {ChatModelFactory, Site} from "./model"; @@ -6,6 +6,8 @@ import dotenv from 'dotenv'; import {ChatRequest, ChatResponse, ModelType, PromptToString} from "./model/base"; import {Event, EventStream} from "./utils"; +process.setMaxListeners(30); // 将限制提高到20个 + dotenv.config(); const app = new Koa(); @@ -20,7 +22,7 @@ const errorHandler = async (ctx: Context, next: Next) => { } }; app.use(errorHandler); -app.use(bodyParser()); +app.use(bodyParser({jsonLimit: '10mb'})); const chatModel = new ChatModelFactory(); interface AskReq extends ChatRequest { @@ -30,8 +32,8 @@ interface AskReq extends ChatRequest { interface AskRes extends ChatResponse { } -router.get('/ask', async (ctx) => { - const {prompt, model = ModelType.GPT3p5Turbo, site = Site.You} = ctx.query as unknown as AskReq; +const AskHandle: Middleware = async (ctx) => { + const {prompt, model = ModelType.GPT3p5Turbo, site = Site.You} = {...ctx.query as any, ...ctx.request.body as any} as AskReq; if (!prompt) { ctx.body = {error: `need prompt in query`} as AskRes; return; @@ -47,10 +49,10 @@ router.get('/ask', async (ctx) => { return; } ctx.body = await chat.ask({prompt: PromptToString(prompt, tokenLimit), model}); -}); +} -router.get('/ask/stream', async (ctx) => { - const {prompt, model = ModelType.GPT3p5Turbo, site = Site.You} = ctx.query as unknown as AskReq; +const AskStreamHandle: Middleware = async (ctx) => { + const {prompt, model = ModelType.GPT3p5Turbo, site = Site.You} = {...ctx.query as any, ...ctx.request.body as any} as AskReq; ctx.set({ "Content-Type": "text/event-stream;charset=utf-8", "Cache-Control": "no-cache", @@ -77,7 +79,12 @@ router.get('/ask/stream', async (ctx) => { } await chat.askStream({prompt: PromptToString(prompt, tokenLimit), model}, es); ctx.body = es.stream(); -}) +} + +router.get('/ask', AskHandle); +router.post('/ask', AskHandle); +router.get('/ask/stream', AskStreamHandle) +router.post('/ask/stream', AskStreamHandle) app.use(router.routes()); @@ -90,5 +97,8 @@ app.use(router.routes()); process.exit(0); }); }); + process.on('uncaughtException', (e) => { + console.error(e); + }) })()