feat: 支持post
このコミットが含まれているのは:
コミット
33cfa99bf8
26
index.ts
26
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);
|
||||
})
|
||||
})()
|
||||
|
||||
|
|
読み込み中…
新しいイシューから参照