diff --git a/app/src/main/java/com/nova/brain/glass/MyApplication.java b/app/src/main/java/com/nova/brain/glass/MyApplication.java index 86a37da..77f0b07 100644 --- a/app/src/main/java/com/nova/brain/glass/MyApplication.java +++ b/app/src/main/java/com/nova/brain/glass/MyApplication.java @@ -13,7 +13,7 @@ import com.xuqm.base.di.manager.HttpManager; */ public class MyApplication extends App { - public static String baseUrl = "http://192.168.27.248:8080"; + public static String baseUrl = "http://22fs132201.imwork.net"; @Override public void onCreate() { 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 new file mode 100644 index 0000000..594b3a3 --- /dev/null +++ b/app/src/main/java/com/nova/brain/glass/model/ChatModel.kt @@ -0,0 +1,44 @@ +package com.nova.brain.glass.model + +//{ +// "id": 74216, +// "role": "assistant", +// "createTime": "2026-04-16T06:13:32.678Z", +// "type": "reason", +// "data": { +// "content": "数据。", +// "duration": 0.0 +// }, +// "metadata": {} +//} +//{ +// "id": 74216, +// "role": "assistant", +// "createTime": "2026-04-16T06:13:32.678Z", +// "type": "string", +// "data": "最", +// "metadata": {} +//} +//{"date":"2026-04-16T06:49:19.790Z","msg":"当前话题存在进行中的请求,请稍后重试","code":409,"success":false,"uri":"/docqa/chat/qa03","status":409} +data class ChatModel( + val type: String, + val msg: String, +) + +data class ChatModel1( + val id: Int, + val role: String, + val createTime: String, + val type: String, + val data: String, +) +data class ChatModel2Data( + val content: String, +) +data class ChatModel2( + val id: Int, + val role: String, + val createTime: String, + val type: String, + val data: ChatModel2Data, +) diff --git a/app/src/main/java/com/nova/brain/glass/model/data/ChatData.kt b/app/src/main/java/com/nova/brain/glass/model/data/ChatData.kt new file mode 100644 index 0000000..6c20879 --- /dev/null +++ b/app/src/main/java/com/nova/brain/glass/model/data/ChatData.kt @@ -0,0 +1,9 @@ +package com.nova.brain.glass.model.data + +//{"question":"我的任务哪个更紧急","topicId":14478,"knowledgeBaseId":"AI_ASSISTANT_MODE_FOR_GLASSES","model":"AI助手模式"} +data class ChatData( + val question: String, + val topicId: Int = 14478, + val knowledgeBaseId: String = "AI_ASSISTANT_MODE_FOR_GLASSES", + val model: String = "AI助手模式" +) diff --git a/app/src/main/java/com/nova/brain/glass/repository/HeaderInterceptor.kt b/app/src/main/java/com/nova/brain/glass/repository/HeaderInterceptor.kt index 382b903..5ab16c6 100644 --- a/app/src/main/java/com/nova/brain/glass/repository/HeaderInterceptor.kt +++ b/app/src/main/java/com/nova/brain/glass/repository/HeaderInterceptor.kt @@ -25,8 +25,15 @@ class HeaderInterceptor(val context: Context) : Interceptor { //请求定制:添加请求头 val requestBuilder = original.newBuilder() - .header("Authentication", context.getStringForPreferences(SHARE_UESR_TOKEN)) + .header("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJBSTAwMjIiLCJyblN0ciI6Im1OWUxobGZqWDJ2bEJMc21RdnFxSUE4dU9ZN0NOY3AzIiwidXNlckluZm8iOnsic3RhZmZObyI6IkFJMDAyMiJ9fQ.4BHcVpdkznqaQwPsyTn1my3_Zo0AliOILj_PjbCIK3k") .addHeader("Content-Type", "application/json;charset=UTF-8") + .addHeader("Cookie", "__itrace_wid=87125211-8742-4f12-b5ca-32b9b6c860e4; locale=zh-Hans; _webtracing_device_id=t_13501877-b9b303fc-d3f52eb530e026b0") + .addHeader("Environment", "1") + .addHeader("currentUserId", "AI0022") + .addHeader("terminal", "1") + .addHeader("modulename", "web") + .addHeader("currentUserName", "") + // context.getStringForPreferences(SHARE_UESR_TOKEN).loge() diff --git a/app/src/main/java/com/nova/brain/glass/repository/Service.kt b/app/src/main/java/com/nova/brain/glass/repository/Service.kt index f88440e..84151dd 100644 --- a/app/src/main/java/com/nova/brain/glass/repository/Service.kt +++ b/app/src/main/java/com/nova/brain/glass/repository/Service.kt @@ -1,5 +1,7 @@ package com.nova.brain.glass.repository +import com.nova.brain.glass.model.ChatModel +import com.nova.brain.glass.model.data.ChatData import io.reactivex.Observable import okhttp3.RequestBody import okhttp3.ResponseBody @@ -18,7 +20,7 @@ interface Service { fun demoPost(@Body body: RequestBody): Observable @Streaming - @GET("stream/{n}") - fun demoStream(@Path("n") n: Int): Observable + @POST("/cbrain-gateway/cbraindep/docqa/chat/qa03") + fun chat(@Body body: ChatData): Observable } \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt index 0975c85..6201d04 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt @@ -1,20 +1,20 @@ package com.nova.brain.glass.ui import android.widget.TextView +import androidx.lifecycle.ViewModelProvider import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityChatBinding import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.model.ChatItem import com.nova.brain.glass.viewmodel.ChatVM -import com.xuqm.base.adapter.BasePagedAdapter +import com.nova.brain.glass.viewmodel.WelcomeVM import com.xuqm.base.adapter.CommonPagedAdapter import com.xuqm.base.adapter.ViewHolder -import com.xuqm.base.ui.BaseListActivity -import com.xuqm.base.ui.BaseListFormLayoutNormalActivity +import com.xuqm.base.ui.BaseActivity import io.noties.markwon.Markwon -class ChatActivity : BaseListFormLayoutNormalActivity() { +class ChatActivity : BaseActivity() { override fun getLayoutId(): Int = R.layout.activity_chat override fun fullscreen(): Boolean = true private val listener = object : OfflineCmdListener { @@ -28,11 +28,20 @@ class ChatActivity : BaseListFormLayoutNormalActivity(R.layout.item_chat) { - override fun convert(holder: ViewHolder, item: ChatItem, position: Int) { - holder.setText(R.id.title, item.title) +// private val adapter = object : CommonPagedAdapter(R.layout.item_chat) { +// override fun convert(holder: ViewHolder, item: ChatItem, position: Int) { +// holder.setText(R.id.title, item.title) +// +// val tv = holder.getView(R.id.content) +// markwon.setMarkdown(tv, item.content); +// } +// } - val tv = holder.getView(R.id.content) - markwon.setMarkdown(tv, item.content); - } - } - - override fun adapter(): BasePagedAdapter = adapter } diff --git a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt index e5989fb..ea9656b 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt @@ -27,7 +27,6 @@ class WelcomeActivity : BaseActivity() { } binding.btnGet.setOnClickListener { vm.demoGet() } binding.btnPost.setOnClickListener { vm.demoPost() } - binding.btnSse.setOnClickListener { vm.demoPostSse() } binding.md.setOnClickListener { startActivity(Intent(this@WelcomeActivity, ChatActivity::class.java)) } } 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 1646d54..9428a9a 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 @@ -1,46 +1,55 @@ package com.nova.brain.glass.viewmodel -import com.nova.brain.glass.model.ChatItem -import com.xuqm.base.viewmodel.BaseListViewModel -import com.xuqm.base.viewmodel.callback.Response +import androidx.lifecycle.MutableLiveData +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 +import com.xuqm.base.di.manager.HttpManager +import com.xuqm.sdhbwfu.core.viewModel.BaseViewModel +import io.reactivex.schedulers.Schedulers -class ChatVM : BaseListViewModel() { - override fun loadData( - page: Int, - onResponse: Response - ) { - onResponse.onResponse(arrayListOf().apply { - add( - ChatItem( - "本周周报", """ -## 统计数据截止到:2026年3月19日 1:36 - -### 纪检Agent3期产品设计】明日到达计划完成时间。 - -#### *重点关注*:张三【测试运维部】负责的“C大脑-脑实例- V2.24-测试方案设计 - - * 当前状态:已延期13天,严重程度为【严重延期】。 - * 参谋建议:建议高优处理。 - -""".trimIndent() - ) - ) - add( - ChatItem( - "我最紧急的任务是哪个", """ - -# 标题 - -这是 **加粗**、*斜体*、~~删除线~~ - -- 列表1 -- 列表2 - -[点击跳转](https://openai.com) - """.trimIndent() - ) - ) - }) +class ChatVM : BaseViewModel() { + val result = MutableLiveData() + private var t = "string" + fun demoPostSse() { + t = "" + HttpManager.getApi(Service::class.java).chat(ChatData("我的代办任务有哪些?")) + .subscribeOn(Schedulers.io()) + .subscribe({ body -> + val sb = StringBuilder() + body.charStream().buffered().use { reader -> + try { + var line: String? + while (reader.readLine().also { line = it } != null) { + val l = line!! + if (l.isNotEmpty()) { + val model = GsonImplHelp.get().toObject(l, ChatModel::class.java) + if (t != model.type) { + sb.clear() + } + t = model.type + if (model.type == "string") { + val model1 = + GsonImplHelp.get().toObject(l, ChatModel1::class.java) + sb.appendLine(model1.data) + } else { + val model2 = + GsonImplHelp.get().toObject(l, ChatModel2::class.java) + sb.appendLine(model2.data.content) + } + result.postValue(sb.toString()) + } + } + } catch (e: Exception) { + result.postValue("AI反馈异常: ${e.message}") + } + } + }, { e -> + result.postValue("AI反馈异常: ${e.message}") + }).adds() } } \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/viewmodel/WelcomeVM.kt b/app/src/main/java/com/nova/brain/glass/viewmodel/WelcomeVM.kt index 9dba9c1..3ca58e3 100644 --- a/app/src/main/java/com/nova/brain/glass/viewmodel/WelcomeVM.kt +++ b/app/src/main/java/com/nova/brain/glass/viewmodel/WelcomeVM.kt @@ -36,28 +36,4 @@ class WelcomeVM : BaseViewModel() { }).adds() } - fun demoPostSse() { - result.postValue("SSE 连接中...") - HttpManager.getApi(Service::class.java).demoStream(5) - .subscribeOn(Schedulers.io()) - .subscribe({ body -> - val sb = StringBuilder("SSE 流式响应:\n") - body.charStream().buffered().use { reader -> - try { - var line: String? - while (reader.readLine().also { line = it } != null) { - val l = line!! - if (l.isNotEmpty()) { - sb.appendLine(l) - result.postValue(sb.toString()) - } - } - } catch (e: Exception) { - result.postValue("SSE 读取异常: ${e.message}") - } - } - }, { e -> - result.postValue("SSE 失败: ${e.message}") - }).adds() - } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml index ade1268..a2eaa94 100644 --- a/app/src/main/res/layout/activity_chat.xml +++ b/app/src/main/res/layout/activity_chat.xml @@ -1,18 +1,26 @@ - - + android:paddingHorizontal="29dp" + android:background="@color/app_color_black" + android:paddingVertical="10dp" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:textColor="#2EB242" + android:textSize="10sp" /> - - + +