package com.hdl.photovoltaic.other;
|
|
import android.text.TextUtils;
|
import android.util.Log;
|
|
import com.google.gson.Gson;
|
import com.google.gson.JsonArray;
|
import com.google.gson.JsonObject;
|
import com.google.gson.reflect.TypeToken;
|
import com.hdl.linkpm.sdk.HDLLinkPMSdk;
|
import com.hdl.linkpm.sdk.core.exception.HDLException;
|
import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
|
import com.hdl.photovoltaic.bean.PageNumberObject;
|
import com.hdl.photovoltaic.config.UserConfigManage;
|
import com.hdl.photovoltaic.internet.ChatStreamClient;
|
import com.hdl.photovoltaic.internet.HttpClient;
|
import com.hdl.photovoltaic.internet.api.HttpApi;
|
import com.hdl.photovoltaic.listener.CloudCallBeak;
|
import com.hdl.photovoltaic.ui.bean.ChatInfoBean;
|
import com.hdl.photovoltaic.ui.bean.ChatMessageBean;
|
import com.hdl.photovoltaic.ui.bean.ChatMessageListBean;
|
import com.hdl.photovoltaic.ui.bean.ChatMessagePageBean;
|
import com.hdl.photovoltaic.ui.bean.StaffBean;
|
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
|
|
import java.lang.reflect.Type;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* Ai逻辑
|
*/
|
public class HdlAiLogic {
|
private static volatile HdlAiLogic sHdlAiLogic;
|
private final Gson gson = new Gson();
|
|
/**
|
* 获取当前对象
|
*
|
* @return HdlAccountLogic
|
*/
|
public static synchronized HdlAiLogic getInstance() {
|
if (sHdlAiLogic == null) {
|
synchronized (HdlAiLogic.class) {
|
if (sHdlAiLogic == null) {
|
sHdlAiLogic = new HdlAiLogic();
|
}
|
}
|
|
}
|
return sHdlAiLogic;
|
}
|
|
/**
|
* 获取智能体详情
|
*
|
* @param cloudCallBeak -
|
*/
|
public void getChatInfo(CloudCallBeak<ChatInfoBean> cloudCallBeak) {
|
String requestUrl = HttpApi.GET_AGENT_INFO;
|
JsonObject json = new JsonObject();
|
json.addProperty("agentCode", "xenterra_app_rag");
|
HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
|
@Override
|
public void onSuccess(String jsonStr) {
|
if (TextUtils.isEmpty(jsonStr)) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(new ChatInfoBean());
|
}
|
}
|
Type type = new TypeToken<ChatInfoBean>() {
|
}.getType();
|
ChatInfoBean chatInfoBean = gson.fromJson(jsonStr, type);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(chatInfoBean);
|
}
|
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(e);
|
}
|
}
|
});
|
|
|
}
|
|
/**
|
* 获取对话列表
|
*
|
*/
|
public void chatMessagesList(CloudCallBeak<ChatMessagePageBean> cloudCallBeak) {
|
ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode();
|
chatMode.stream = false;
|
chatMode.isGet = true;
|
chatMode.url = "/conversations?" + "user=" + UserConfigManage.getInstance().getUserId();//+"&"+;
|
ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() {
|
@Override
|
public void onMessage(String content) {
|
|
}
|
|
@Override
|
public void onFullMessage(String fullMessage) {
|
ChatStreamClient.ChatCallback.super.onFullMessage(fullMessage);
|
try {
|
if (TextUtils.isEmpty(fullMessage)) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(new ChatMessagePageBean());
|
}
|
return;
|
}
|
Type type = new TypeToken<ChatMessagePageBean>() {
|
}.getType();
|
ChatMessagePageBean chatMessagePageBean = gson.fromJson(fullMessage, type);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(chatMessagePageBean);
|
}
|
} catch (Exception e) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
}
|
|
}
|
|
@Override
|
public void onError(String error) {
|
ChatStreamClient.ChatCallback.super.onError(error);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10201, error));
|
}
|
}
|
});
|
}
|
|
/**
|
* 创建会话消息,AI聊天
|
*
|
* @param message 用户输入/提问内容。
|
*/
|
public void chatMessages(String message, CloudCallBeak<ChatMessageBean> cloudCallBeak) {
|
if (TextUtils.isEmpty(UserConfigManage.getInstance().getConversationId())) {
|
this.chatMessagesList(new CloudCallBeak<ChatMessagePageBean>() {
|
@Override
|
public void onSuccess(ChatMessagePageBean obj) {
|
if (obj != null && !obj.getData().isEmpty()) {
|
UserConfigManage.getInstance().setConversationId(obj.getData().get(0).getId());
|
UserConfigManage.getInstance().Save();
|
}
|
ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode();
|
chatMode.data = getJsonObject(message);
|
chatMode.stream = true;
|
chatMode.url = "/chat-messages";
|
ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() {
|
@Override
|
public void onMessage(String content) {
|
try {
|
Type type = new TypeToken<ChatMessageBean>() {
|
}.getType();
|
ChatMessageBean ChatMessageBean = gson.fromJson(content, type);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(ChatMessageBean);
|
}
|
Log.d("AI聊天回复===", gson.toJson(ChatMessageBean));
|
} catch (Exception e) {
|
// if (cloudCallBeak != null) {
|
// cloudCallBeak.onSuccess(null);
|
// }
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10202, e.getMessage()));
|
}
|
}
|
}
|
|
@Override
|
public void onComplete() {
|
ChatStreamClient.ChatCallback.super.onComplete();
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
Log.d("AI聊天回复===", "done");
|
}
|
|
@Override
|
public void onError(String error) {
|
ChatStreamClient.ChatCallback.super.onError(error);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10201, error));
|
}
|
}
|
});
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode();
|
chatMode.data = getJsonObject(message);
|
chatMode.stream = true;
|
chatMode.url = "/chat-messages";
|
ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() {
|
@Override
|
public void onMessage(String content) {
|
try {
|
Type type = new TypeToken<ChatMessageBean>() {
|
}.getType();
|
ChatMessageBean ChatMessageBean = gson.fromJson(content, type);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(ChatMessageBean);
|
}
|
Log.d("AI聊天回复===", gson.toJson(ChatMessageBean));
|
} catch (Exception e) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
}
|
}
|
|
@Override
|
public void onComplete() {
|
ChatStreamClient.ChatCallback.super.onComplete();
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
Log.d("AI聊天回复===", "done");
|
}
|
|
@Override
|
public void onError(String error) {
|
ChatStreamClient.ChatCallback.super.onError(error);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10201, error));
|
}
|
}
|
});
|
}
|
});
|
} else {
|
ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode();
|
chatMode.data = getJsonObject(message);
|
chatMode.stream = true;
|
chatMode.url = "/chat-messages";
|
ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() {
|
@Override
|
public void onMessage(String content) {
|
try {
|
Type type = new TypeToken<ChatMessageBean>() {
|
}.getType();
|
ChatMessageBean ChatMessageBean = gson.fromJson(content, type);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(ChatMessageBean);
|
}
|
Log.d("AI聊天回复===", gson.toJson(ChatMessageBean));
|
} catch (Exception e) {
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
}
|
}
|
|
@Override
|
public void onComplete() {
|
ChatStreamClient.ChatCallback.super.onComplete();
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onSuccess(null);
|
}
|
Log.d("AI聊天回复===", "done");
|
}
|
|
@Override
|
public void onError(String error) {
|
ChatStreamClient.ChatCallback.super.onError(error);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10201, error));
|
}
|
}
|
});
|
}
|
}
|
|
/**
|
* 停止响应
|
*
|
* @param task_id 任务ID
|
*/
|
public void chatMessageStop(String task_id, CloudCallBeak<Boolean> cloudCallBeak) {
|
JsonObject json = new JsonObject();
|
if (!TextUtils.isEmpty(task_id)) {
|
json.addProperty("task_id", task_id);
|
}
|
json.addProperty("user", UserConfigManage.getInstance().getUserId());
|
ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode();
|
chatMode.data = json;
|
chatMode.stream = false;
|
chatMode.isGet = false;
|
chatMode.url = "/chat-messages/:task_id/stop";
|
ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() {
|
@Override
|
public void onMessage(String content) {
|
}
|
|
@Override
|
public void onFullMessage(String fullMessage) {
|
//一次性回复
|
if (cloudCallBeak != null) {
|
// boolean isSuccess = fullMessage.contains("\"success\":true");
|
boolean isSuccess = fullMessage.contains("true");
|
cloudCallBeak.onSuccess(isSuccess);
|
}
|
}
|
|
@Override
|
public void onError(String error) {
|
ChatStreamClient.ChatCallback.super.onError(error);
|
if (cloudCallBeak != null) {
|
cloudCallBeak.onFailure(new HDLException(-10201, error));
|
}
|
}
|
});
|
}
|
|
/**
|
* 获取json对象
|
*
|
* @param message 对话内容
|
* @return json对象
|
*/
|
private JsonObject getJsonObject(String message) {
|
JsonObject json = new JsonObject();
|
JsonObject inputs = new JsonObject();
|
inputs.addProperty("source", "APP");
|
inputs.addProperty("platform", "APP");
|
json.add("inputs", inputs);
|
json.addProperty("query", message);
|
json.addProperty("response_mode", "streaming");
|
json.addProperty("conversation_id", UserConfigManage.getInstance().getConversationId());
|
json.addProperty("user", UserConfigManage.getInstance().getUserId());
|
return json;
|
}
|
|
|
}
|