Spaces:
ainz
/
Configuration error

hi / src /server.js
ainz's picture
x
688d352
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const Chat = require('./lib/chat.js')
const { uuid, isJson } = require('./lib/tools')
const ChatManager = new Chat()
app.use(bodyParser.json({ limit: '32mb' }))
app.use(bodyParser.urlencoded({ extended: true, limit: '32mb' }))
app.get("/v1/models", async (req, res) => {
res.json({
object: "list",
data: [{
"id": "deepseek-reasoner",
"object": "model",
"created": 1686935002,
"owned_by": "hixai"
}],
object: "list"
})
})
app.post("/v1/chat/completions", async (req, res) => {
const token = req.headers.authorization?.replace("Bearer ", "")
if (!token) {
res.status(401).json({
error: "未提供Token!!!"
})
return
}
const stream = req.body.stream || false
let { message, chatId, status } = await ChatManager.parserMessagesMode(req.body.messages)
if (status === 500) {
res.status(500).json({
error: "服务器服务错误!!!"
})
return
}
if (stream) {
res.setHeader('Content-Type', 'text/event-stream')
res.setHeader('Cache-Control', 'no-cache')
res.setHeader('Connection', 'keep-alive')
} else {
res.setHeader('Content-Type', 'application/json')
}
const returnResponse = async (response, req, res, stream, chatId) => {
let reasoningStatus = false
let notStreamContent = ''
const decoder = new TextDecoder('utf-8')
const signText = `\n\n\n[ChatID: ${chatId}]\n`
const StreamTemplate = {
"id": `chatcmpl-${uuid()}`,
"object": "chat.completion.chunk",
"created": new Date().getTime(),
"choices": [
{
"index": 0,
"delta": {
"content": null
},
"finish_reason": null
}
]
}
response.on('data', (chunk) => {
const decodeText = decoder.decode(chunk)
const lists = decodeText.split('\n').filter(item => item.trim() !== '')
for (const item of lists) {
try {
if (!item.includes('data')) {
continue
}
const decodeJson = isJson(item.replace(/^data: /, '')) ? JSON.parse(item.replace(/^data: /, '')) : null
let content = ''
if (decodeJson === null || (decodeJson.reasoning_content === undefined && decodeJson.content === undefined && decodeJson.thinking_time === undefined)) {
continue
}
content = decodeJson.content || decodeJson.reasoning_content
if (reasoningStatus === false && decodeJson.reasoning_content) {
content = `<think>\n${decodeJson.reasoning_content}`
reasoningStatus = true
}
if (decodeJson.thinking_time) {
content = `\n</think>\n`
}
if (content === undefined) {
continue
}
if (stream) {
StreamTemplate.choices[0].delta.content = content
res.write(`data: ${JSON.stringify(StreamTemplate)}\n\n`)
} else {
notStreamContent += content
}
} catch (error) {
// console.log(error)
res.status(500)
.json({
error: "服务错误!!!"
})
}
}
})
response.on('end', () => {
if (stream) {
StreamTemplate.choices[0].delta.content = signText
res.write(`data: ${JSON.stringify(StreamTemplate)}\n\n`)
res.write(`data: [DONE]\n\n`)
res.end()
} else {
notStreamContent += signText
const bodyTemplate = {
"id": `chatcmpl-${uuid()}`,
"object": "chat.completion",
"created": new Date().getTime(),
"model": req.body.model,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": notStreamContent
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1024,
"completion_tokens": notStreamContent.length,
"total_tokens": 1024 + notStreamContent.length
}
}
res.json(bodyTemplate)
}
})
}
for (let i = 0; i < 3; i++) {
try {
if (!chatId) {
chatId = await ChatManager.createChat(token)
if (!chatId) {
res.status(500).json({
error: "创建聊天失败!!!"
})
return
}
}
let { response, status } = await ChatManager.sendMessage(chatId, message, token, stream)
if (status === 200 && response) {
await returnResponse(response, req, res, stream, chatId)
return
} else if (status === 403) {
message = await ChatManager.createForgeChat(req.body.messages)
chatId = null
} else {
res.status(500).json({
error: "请求发送失败!!!"
})
return
}
}
catch (error) {
res.status(500).json({
error: "服务器服务错误!!!"
})
return
}
}
res.status(500).json({
error: "多次尝试后依旧失败!!!"
})
})
app.listen(8999, () => {
console.log('Server is running on port 8999')
})