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,7 +7,7 @@ data class ChatModel(
val msg: String?, 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( data class ChatModel1(
val id: Int, val id: Int,
val role: String, val role: String,
@ -15,3 +15,13 @@ data class ChatModel1(
val type: String, val type: String,
val data: 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.ChatItem
import com.nova.brain.glass.model.ChatModel import com.nova.brain.glass.model.ChatModel
import com.nova.brain.glass.model.ChatModel1 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.model.data.ChatData
import com.nova.brain.glass.repository.Service import com.nova.brain.glass.repository.Service
import com.xuqm.base.common.GsonImplHelp import com.xuqm.base.common.GsonImplHelp
@ -50,6 +51,7 @@ class ChatVM : BaseListViewModel<ChatItem>() {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe({ body -> .subscribe({ body ->
var content = "" var content = ""
var currentType = "" // 追踪当前阶段reason / string
body.charStream().buffered().use { reader -> body.charStream().buffered().use { reader ->
try { try {
var line: String? var line: String?
@ -80,9 +82,24 @@ class ChatVM : BaseListViewModel<ChatItem>() {
result.postValue(msg) result.postValue(msg)
return@use return@use
} }
if (model.role != "assistant" || model.type != "string") continue if (model.role != "assistant") continue
val model1 = GsonImplHelp.get().toObject(json, ChatModel1::class.java) when (model.type) {
content += model1.data "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 val lastIndex = chatItems.size - 1
if (lastIndex >= 0) { if (lastIndex >= 0) {
chatItems[lastIndex].content = content chatItems[lastIndex].content = content