feat(chat): 添加多类型聊天消息支持

- 新增 ChatModel2 和 ChatModel2Data 数据类处理 reason 类型消息
- 修改 ChatVM 中的消息解析逻辑支持 reason 和 string 两种类型
- 添加 currentType 变量追踪当前消息类型状态
- 实现 reason 阶段内容累积和 string 阶段内容重置机制
- 更新导入语句添加 ChatModel2 引用
- 简化注释中的时间戳显示格式
这个提交包含在:
徐勤民 2026-04-16 18:29:27 +08:00
父节点 4471a8e68a
当前提交 e2cae52dbc
共有 2 个文件被更改,包括 31 次插入4 次删除

查看文件

@ -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,
)

查看文件

@ -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<ChatItem>() {
.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<ChatItem>() {
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