Skip to content

Commit a9bfc16

Browse files
authored
feat: add model name in chat usage records (#493)
* chore: optimize statistics chart render * feat: add model name in chat usage records * lint fix
1 parent 2345249 commit a9bfc16

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

service/src/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import express from 'express'
22
import jwt from 'jsonwebtoken'
33
import * as dotenv from 'dotenv'
44
import { ObjectId } from 'mongodb'
5+
import type { TiktokenModel } from 'gpt-token'
56
import { textTokens } from 'gpt-token'
67
import speakeasy from 'speakeasy'
78
import { TwoFAConfig } from './types'
@@ -383,6 +384,8 @@ router.post('/chat-process', [auth, limiter], async (req, res) => {
383384
globalThis.console.error(`Unable to get chat room \t ${userId}\t ${roomId}`)
384385
if (room != null && isNotEmptyString(room.prompt))
385386
systemMessage = room.prompt
387+
const model = room.chatModel
388+
386389
let lastResponse
387390
let result
388391
let message: ChatInfo
@@ -451,9 +454,9 @@ router.post('/chat-process', [auth, limiter], async (req, res) => {
451454
if (!result.data.detail)
452455
result.data.detail = {}
453456
result.data.detail.usage = new UsageResponse()
454-
// 因为 token 本身不计算, 所以这里默认以 gpt 3.5 的算做一个伪统计
455-
result.data.detail.usage.prompt_tokens = textTokens(prompt, 'gpt-3.5-turbo')
456-
result.data.detail.usage.completion_tokens = textTokens(result.data.text, 'gpt-3.5-turbo')
457+
// if no usage data, calculate using Tiktoken library
458+
result.data.detail.usage.prompt_tokens = textTokens(prompt, model as TiktokenModel)
459+
result.data.detail.usage.completion_tokens = textTokens(result.data.text, model as TiktokenModel)
457460
result.data.detail.usage.total_tokens = result.data.detail.usage.prompt_tokens + result.data.detail.usage.completion_tokens
458461
result.data.detail.usage.estimated = true
459462
}
@@ -498,6 +501,7 @@ router.post('/chat-process', [auth, limiter], async (req, res) => {
498501
roomId,
499502
message._id,
500503
result.data.id,
504+
model,
501505
result.data.detail?.usage as UsageResponse)
502506
}
503507
// update personal useAmount moved here

service/src/storage/model.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,18 @@ export class ChatUsage {
149149
roomId: number
150150
chatId: ObjectId
151151
messageId: string
152+
model: string
152153
promptTokens: number
153154
completionTokens: number
154155
totalTokens: number
155156
estimated: boolean
156157
dateTime: number
157-
constructor(userId: ObjectId, roomId: number, chatId: ObjectId, messageId: string, usage: UsageResponse) {
158+
constructor(userId: ObjectId, roomId: number, chatId: ObjectId, messageId: string, model: string, usage?: UsageResponse) {
158159
this.userId = userId
159160
this.roomId = roomId
160161
this.chatId = chatId
161162
this.messageId = messageId
163+
this.model = model
162164
if (usage) {
163165
this.promptTokens = usage.prompt_tokens
164166
this.completionTokens = usage.completion_tokens

service/src/storage/mongo.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,13 @@ export async function updateChat(chatId: string, response: string, messageId: st
102102
await chatCol.updateOne(query, update)
103103
}
104104

105-
export async function insertChatUsage(userId: ObjectId, roomId: number, chatId: ObjectId, messageId: string, usage: UsageResponse) {
106-
const chatUsage = new ChatUsage(userId, roomId, chatId, messageId, usage)
105+
export async function insertChatUsage(userId: ObjectId,
106+
roomId: number,
107+
chatId: ObjectId,
108+
messageId: string,
109+
model: string,
110+
usage: UsageResponse) {
111+
const chatUsage = new ChatUsage(userId, roomId, chatId, messageId, model, usage)
107112
await usageCol.insertOne(chatUsage)
108113
return chatUsage
109114
}

service/src/utils/image.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ fs.mkdir('uploads').then(() => {
1313

1414
export async function convertImageUrl(uploadFileKey: string): Promise<string> {
1515
const imageData = await fs.readFile(`uploads/${uploadFileKey}`)
16-
//判断文件格式
16+
// 判断文件格式
1717
const imageType = await fileType.fileTypeFromBuffer(imageData)
18-
const mimeType = imageType.mime;
18+
const mimeType = imageType.mime
1919
// 将图片数据转换为 Base64 编码的字符串
2020
const base64Image = imageData.toString('base64')
2121
return `data:${mimeType};base64,${base64Image}`
22-
}
22+
}

0 commit comments

Comments
 (0)