feat(chat): 添加多类型聊天消息支持
- 新增 ChatModel2 和 ChatModel2Data 数据类处理 reason 类型消息 - 修改 ChatVM 中的消息解析逻辑支持 reason 和 string 两种类型 - 添加 currentType 变量追踪当前消息类型状态 - 实现 reason 阶段内容累积和 string 阶段内容重置机制 - 更新导入语句添加 ChatModel2 引用 - 简化注释中的时间戳显示格式
这个提交包含在:
父节点
4471a8e68a
当前提交
e2cae52dbc
@ -7,7 +7,7 @@ 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,
|
||||
@ -15,3 +15,13 @@ data class ChatModel1(
|
||||
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
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户