fix: fix no meteringEntry date when no cot, and style

This commit is contained in:
Nex Zhu
2025-02-24 08:29:30 +08:00
parent ce333714b7
commit 8f27ca2e4e
6 changed files with 97 additions and 92 deletions

View File

@@ -8,7 +8,7 @@ import {
promptForRag,
systemPromptForNonRagOption
} from "~/services/ollama"
import { type ChatHistory, ChatMessage, type Message } from "~/store/option"
import type { ChatHistory, Message, MeteringEntry } from "~/store/option"
import { SystemMessage } from "@langchain/core/messages"
import { useStoreMessageOption } from "~/store/option"
import {
@@ -55,8 +55,8 @@ export const useMessageOption = () => {
const {
history,
setHistory,
chatMessages,
setChatMessages,
meteringEntries,
setMeteringEntries,
setStreaming,
streaming,
setIsFirstMessage,
@@ -114,23 +114,24 @@ export const useMessageOption = () => {
setWebSearch(true)
}
}
// 从最后的结果中解析出 思维链 和 结果
// 从最后的结果中解析出 思维链 (Chain-of-Thought) 和 结果
const responseResolver = (msg: string) => {
const thinkStart = msg.indexOf("<think>")
const thinkEnd = msg.indexOf("</think>")
let think = ""
const cotStart = msg.indexOf("<think>")
const cotEnd = msg.indexOf("</think>")
let cot = ""
let content = ""
if (thinkStart > -1 && thinkEnd > -1) {
think = msg.substring(thinkStart + 7, thinkEnd)
content = msg.substring(thinkEnd + 8)
if (cotStart > -1 && cotEnd > -1) {
cot = msg.substring(cotStart + 7, cotEnd)
content = msg.substring(cotEnd + 8)
} else {
content = msg
}
// 去掉换行符
think = think.replace(/\n/g, "")
cot = cot.replace(/\n/g, "")
content = content.replace(/\n/g, "")
return {
think,
cot: cot,
content
}
}
@@ -190,10 +191,10 @@ export const useMessageOption = () => {
})
let newMessage: Message[] = []
let generateMessageId = generateID()
const chatMessage: ChatMessage = {
const meter: MeteringEntry = {
id: generateMessageId,
queryContent: message
} as ChatMessage
} as MeteringEntry
if (!isRegenerate) {
newMessage = [
@@ -316,14 +317,14 @@ export const useMessageOption = () => {
.map((k) => k.trim())
}
const { prompt, webSources, iodSources, iodData, iodDataTokenCount } =
const { prompt, webSources, iodSources, iodSearchResults: iodData, iodTokenCount } =
await getSystemPromptForWeb(query, keywords, webSearch, iodSearch)
console.log("prompt:\n" + prompt)
setIsSearchingInternet(false)
chatMessage.prompt = prompt
chatMessage.iodKeywords = keywords
chatMessage.iodData = iodData
chatMessage.iodDataTokenCount = iodDataTokenCount
meter.prompt = prompt
meter.iodKeywords = keywords
meter.iodData = iodData
meter.iodTokenCount = iodTokenCount
// message = message.trim().replaceAll("\n", " ")
@@ -384,6 +385,7 @@ export const useMessageOption = () => {
}
)
let count = 0
const chatStartTime = new Date()
let reasoningStartTime: Date | undefined = undefined
let reasoningEndTime: Date | undefined = undefined
let apiReasoning = false
@@ -484,17 +486,20 @@ export const useMessageOption = () => {
setIsProcessing(false)
setStreaming(false)
chatMessage.modelInputTokenCount = generationInfo?.prompt_eval_count ?? 0
chatMessage.modelOutputTokenCount = generationInfo?.eval_count ?? 0
chatMessage.model = generationInfo?.model ?? ""
chatMessage.relatedDataCount = iodData?.length ?? 0
chatMessage.timeTaken = timetaken
chatMessage.date = reasoningStartTime
const { think, content } = responseResolver(fullText)
chatMessage.thinkingChain = think
chatMessage.responseContent = content
chatMessage.modelResponseContent = fullText
setChatMessages([...chatMessages, chatMessage])
// Save metering entry
const { cot, content } = responseResolver(fullText)
setMeteringEntries([...meteringEntries, {
...meter,
modelInputTokenCount: generationInfo?.prompt_eval_count ?? 0,
modelOutputTokenCount: generationInfo?.eval_count ?? 0,
model: generationInfo?.model ?? "",
relatedDataCount: iodData?.length ?? 0,
timeTaken: timetaken,
date: chatStartTime,
cot,
responseContent: content,
modelResponseContent: fullText,
}])
} catch (e) {
const errorSave = await saveMessageOnError({
e,