From e2cae52dbc37fba74561d84069262a5cc731e249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Thu, 16 Apr 2026 18:29:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=81=8A=E5=A4=A9=E6=B6=88=E6=81=AF=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ChatModel2 和 ChatModel2Data 数据类处理 reason 类型消息 - 修改 ChatVM 中的消息解析逻辑支持 reason 和 string 两种类型 - 添加 currentType 变量追踪当前消息类型状态 - 实现 reason 阶段内容累积和 string 阶段内容重置机制 - 更新导入语句添加 ChatModel2 引用 - 简化注释中的时间戳显示格式 --- .../com/nova/brain/glass/model/ChatModel.kt | 12 +++++++++- .../com/nova/brain/glass/viewmodel/ChatVM.kt | 23 ++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nova/brain/glass/model/ChatModel.kt b/app/src/main/java/com/nova/brain/glass/model/ChatModel.kt index e190871..40d7fce 100644 --- a/app/src/main/java/com/nova/brain/glass/model/ChatModel.kt +++ b/app/src/main/java/com/nova/brain/glass/model/ChatModel.kt @@ -7,11 +7,21 @@ data class ChatModel( val msg: String?, ) -// {"id":74316,"role":"assistant","createTime":"2026-04-16T08:28:06.428Z","type":"string","data":"建议使用","metadata":{}} +// {"id":74316,"role":"assistant","createTime":"...","type":"string","data":"建议使用","metadata":{}} data class ChatModel1( val id: Int, val role: String, val createTime: String, val type: String, val data: String, +) + +// {"id":74418,"role":"assistant","createTime":"...","type":"reason","data":{"content":"-v2","duration":0.0},"metadata":{}} +data class ChatModel2Data(val content: String) +data class ChatModel2( + val id: Int, + val role: String, + val createTime: String, + val type: String, + val data: ChatModel2Data, ) \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/viewmodel/ChatVM.kt b/app/src/main/java/com/nova/brain/glass/viewmodel/ChatVM.kt index 71b2528..483ecb0 100644 --- a/app/src/main/java/com/nova/brain/glass/viewmodel/ChatVM.kt +++ b/app/src/main/java/com/nova/brain/glass/viewmodel/ChatVM.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData import com.nova.brain.glass.model.ChatItem import com.nova.brain.glass.model.ChatModel import com.nova.brain.glass.model.ChatModel1 +import com.nova.brain.glass.model.ChatModel2 import com.nova.brain.glass.model.data.ChatData import com.nova.brain.glass.repository.Service import com.xuqm.base.common.GsonImplHelp @@ -50,6 +51,7 @@ class ChatVM : BaseListViewModel() { .subscribeOn(Schedulers.io()) .subscribe({ body -> var content = "" + var currentType = "" // 追踪当前阶段:reason / string body.charStream().buffered().use { reader -> try { var line: String? @@ -80,9 +82,24 @@ class ChatVM : BaseListViewModel() { result.postValue(msg) return@use } - if (model.role != "assistant" || model.type != "string") continue - val model1 = GsonImplHelp.get().toObject(json, ChatModel1::class.java) - content += model1.data + if (model.role != "assistant") continue + when (model.type) { + "reason" -> { + val m = GsonImplHelp.get().toObject(json, ChatModel2::class.java) + content += m.data.content + currentType = "reason" + } + "string" -> { + if (currentType != "string") { + // 第一条 string:清除 reason 阶段的内容,重新开始 + content = "" + currentType = "string" + } + val m = GsonImplHelp.get().toObject(json, ChatModel1::class.java) + content += m.data + } + else -> continue + } val lastIndex = chatItems.size - 1 if (lastIndex >= 0) { chatItems[lastIndex].content = content