5 Commits

Author SHA1 Message Date
Vinlic
fe63c20198 Release 0.0.23 2024-04-09 10:47:40 +08:00
Vinlic
72e29e4168 增加日志提醒错误请求地址 2024-04-09 10:47:28 +08:00
Vinlic
9fd7ae890b 首轮不注入注意力prompt 2024-04-08 22:26:05 +08:00
Vinlic
f5bea5ea68 Release 0.0.22 2024-04-08 22:24:13 +08:00
Vinlic
0b2c8434c9 首轮不注入注意力prompt 2024-04-08 22:23:54 +08:00
6 changed files with 50 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "kimi-free-api", "name": "kimi-free-api",
"version": "0.0.21", "version": "0.0.23",
"description": "Kimi Free API Server", "description": "Kimi Free API Server",
"type": "module", "type": "module",
"main": "dist/index.js", "main": "dist/index.js",

10
public/welcome.html Normal file
View File

@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>🚀 服务已启动</title>
</head>
<body>
<p>kimi-free-api已启动<br>请通过LobeChat / NextChat / Dify等客户端或OpenAI SDK接入</p>
</body>
</html>

View File

@@ -366,20 +366,23 @@ function messagesPrepare(messages: any[]) {
let latestMessage = messages[messages.length - 1]; let latestMessage = messages[messages.length - 1];
let hasFileOrImage = Array.isArray(latestMessage.content) let hasFileOrImage = Array.isArray(latestMessage.content)
&& latestMessage.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type']))); && latestMessage.content.some(v => (typeof v === 'object' && ['file', 'image_url'].includes(v['type'])));
if (hasFileOrImage) { // 第二轮开始注入system prompt
let newFileMessage = { if (messages.length > 2) {
"content": "关注用户最新发送文件和消息", if (hasFileOrImage) {
"role": "system" let newFileMessage = {
}; "content": "关注用户最新发送文件和消息",
messages.splice(messages.length - 1, 0, newFileMessage); "role": "system"
logger.info("注入提升尾部文件注意力system prompt"); };
} else { messages.splice(messages.length - 1, 0, newFileMessage);
let newTextMessage = { logger.info("注入提升尾部文件注意力system prompt");
"content": "关注用户最新的消息", } else {
"role": "system" let newTextMessage = {
}; "content": "关注用户最新的消息",
messages.splice(messages.length - 1, 0, newTextMessage); "role": "system"
logger.info("注入提升尾部消息注意力system prompt"); };
messages.splice(messages.length - 1, 0, newTextMessage);
logger.info("注入提升尾部消息注意力system prompt");
}
} }
const content = messages.reduce((content, message) => { const content = messages.reduce((content, message) => {

View File

@@ -1,7 +1,23 @@
import fs from 'fs-extra';
import Response from '@/lib/response/Response.ts';
import chat from "./chat.ts"; import chat from "./chat.ts";
import ping from "./ping.ts"; import ping from "./ping.ts";
export default [ export default [
{
get: {
'/': async () => {
const content = await fs.readFile('public/welcome.html');
return new Response(content, {
type: 'html',
headers: {
Expires: '-1'
}
});
}
}
},
chat, chat,
ping ping
]; ];

View File

@@ -15,7 +15,7 @@ export default class FailureBody extends Body {
else if(error instanceof APIException || error instanceof Exception) else if(error instanceof APIException || error instanceof Exception)
({ errcode, errmsg, data, httpStatusCode } = error); ({ errcode, errmsg, data, httpStatusCode } = error);
else if(_.isError(error)) else if(_.isError(error))
error = new Exception(EX.SYSTEM_ERROR, error.message); ({ errcode, errmsg, data, httpStatusCode } = new Exception(EX.SYSTEM_ERROR, error.message));
super({ super({
code: errcode || -1, code: errcode || -1,
message: errmsg || 'Internal error', message: errmsg || 'Internal error',

View File

@@ -73,7 +73,11 @@ class Server {
this.app.use((ctx: any) => { this.app.use((ctx: any) => {
const request = new Request(ctx); const request = new Request(ctx);
logger.debug(`-> ${ctx.request.method} ${ctx.request.url} request is not supported - ${request.remoteIP || "unknown"}`); logger.debug(`-> ${ctx.request.method} ${ctx.request.url} request is not supported - ${request.remoteIP || "unknown"}`);
const failureBody = new FailureBody(new Exception(EX.SYSTEM_NOT_ROUTE_MATCHING, "Request is not supported")); // const failureBody = new FailureBody(new Exception(EX.SYSTEM_NOT_ROUTE_MATCHING, "Request is not supported"));
// const response = new Response(failureBody);
const message = `[请求有误]: 正确请求为 POST -> /v1/chat/completions当前请求为 ${ctx.request.method} -> ${ctx.request.url} 请纠正`;
logger.warn(message);
const failureBody = new FailureBody(new Error(message));
const response = new Response(failureBody); const response = new Response(failureBody);
response.injectTo(ctx); response.injectTo(ctx);
if(config.system.requestLog) if(config.system.requestLog)