240725:首次提交
authorxiewei <892331662@qq.com>
Thu, 25 Jul 2024 01:34:07 +0000 (09:34 +0800)
committerxiewei <892331662@qq.com>
Thu, 25 Jul 2024 01:34:07 +0000 (09:34 +0800)
20 files changed:
.idea/vcs.xml [new file with mode: 0644]
app/src/main/java/com/zhixun/android/sdk/polymerizesdk/AigcActivity.java
app/src/main/java/com/zhixun/android/sdk/polymerizesdk/ChatActivity.java
app/src/main/java/com/zhixun/android/sdk/polymerizesdk/MainActivity.java
polysdk/build.gradle
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/asr/ChatManager.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/asr/TranscriptionManager.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/authentication/AuthReceiverHandler.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/callback/IOnKeyCheckCallback.java [new file with mode: 0644]
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/callback/IPolyAiAPI.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/data/PolyAiKit.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/data/PolyApiKit.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/entity/AigcQuery.java [new file with mode: 0644]
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/entity/AigcTask.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/entity/AigcTaskResult.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/gpt/ChatGPTClient.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/util/AESUtil.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/util/AudioConvertManage.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/util/MyConfig.java
polysdk/src/main/java/com/zhixun/android/sdk/polysdk/util/SpUtils.java

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..94a25f7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
index 2891faa..36075b1 100644 (file)
@@ -21,6 +21,7 @@ import com.bumptech.glide.Glide;
 import com.google.gson.Gson;
 import com.zhixun.android.sdk.polysdk.PolymerizeAgent;
 import com.zhixun.android.sdk.polysdk.callback.AIRequestCallback;
+import com.zhixun.android.sdk.polysdk.entity.AigcQuery;
 import com.zhixun.android.sdk.polysdk.entity.AigcStyle;
 import com.zhixun.android.sdk.polysdk.entity.AigcTask;
 import com.zhixun.android.sdk.polysdk.entity.AigcTaskResult;
@@ -53,23 +54,25 @@ public class AigcActivity extends AppCompatActivity {
                     break;
                 case MSG_QUERY_SUCCESS:
                     tv_task_state.setText("任务状态:已完成");
-                    String base64String = (String) msg.obj;
-                    if (!TextUtils.isEmpty(base64String)) {
-
+                    String url = (String) msg.obj;
+                    /*if (!TextUtils.isEmpty(base64String)) {
                         // 解码Base64字符串
                         byte[] decodedBytes = Base64.decode(base64String.split(",")[1], Base64.DEFAULT);
-
                         // 将字节数组转换为Bitmap
                         Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
-
                         // 设置ImageView的Bitmap
                         back_img.setImageBitmap(bitmap);
-                    }
+                    }*/
+                    Glide.with(AigcActivity.this)
+                            .load(url)
+                            .into(back_img);
                     break;
             }
         }
     };
 
+
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -113,8 +116,10 @@ public class AigcActivity extends AppCompatActivity {
         AigcTask aigcTask = new AigcTask();
         aigcTask.setType(0);
         aigcTask.setAlgorithm("anime");
-        aigcTask.setHeight(1024);
-        aigcTask.setWidth(1024);
+        aigcTask.setAmount(1);
+
+//        aigcTask.setHeight(1024);
+//        aigcTask.setWidth(1024);
         aigcTask.setSubject(sub);
         PolymerizeAgent.getInstance().getAiAPI().creatAigcImg(aigcTask, new AIRequestCallback() {
             @Override
@@ -134,7 +139,11 @@ public class AigcActivity extends AppCompatActivity {
     public void queryTask() {
         if (TextUtils.isEmpty(taskId)) return;
         Log.i(TAG, "queryTask--" + taskId);
-        PolymerizeAgent.getInstance().getAiAPI().queryTaskState(taskId, new AIRequestCallback() {
+        AigcQuery query = new AigcQuery();
+        query.setTask_id(taskId);
+        query.setWidth(320);
+        query.setWidth(320);
+        PolymerizeAgent.getInstance().getAiAPI().queryTaskState(query, new AIRequestCallback() {
             @Override
             public void onSuccess(Object result) {
                 AigcTaskResult taskResult = (AigcTaskResult) result;
@@ -146,11 +155,11 @@ public class AigcActivity extends AppCompatActivity {
 
                 } else if (taskResult.getStatus().equals("SUCCEEDED")) {
                     isTaskRun = false;
-                    String imgBase64 = taskResult.getResult();
-                    if (TextUtils.isEmpty(imgBase64)) return;
+                    List<String> resultsBeans = taskResult.getResult();
+                    if (resultsBeans==null&&resultsBeans.size()==0) return;
                     Message message = new Message();
                     message.what = MSG_QUERY_SUCCESS;
-                    message.obj = imgBase64;
+                    message.obj = resultsBeans.get(0);
                     aigcHandler.sendMessage(message);
                 } else {
                     runOnUiThread(new Runnable() {
index c902afd..108599f 100644 (file)
@@ -170,14 +170,15 @@ public class ChatActivity extends AppCompatActivity {
 
     }
 
-    private String API_KEY = "sk-proj-fdifVB2nPBIVcQeegE0AT3BlbkFJsgOXO5mnrmzox8pnSxMV";
+    private String API_KEY = "sk-proj-04ogvrZQqyaiv1OWw8OZT3BlbkFJG9Gyr8oFvRdmr3oXQNbX";
     public void setAPIKEY(View view){
         if(chatType.equals("start")){
             Toast.makeText(this,"正在回答,请稍后再发送",Toast.LENGTH_SHORT).show();
             return;
         }
 
-        PolymerizeAgent.getInstance().getAuthenAPI().setAIChannelKey("CHAT GPT",API_KEY);
+//        PolymerizeAgent.getInstance().getAuthenAPI().setAIChannelKey("CHAT GPT",API_KEY);
+        PolymerizeAgent.getInstance().getAuthenAPI().setAIChannelKey("moonshot",null);
     }
 
     @Override
index a4561fa..ca99101 100644 (file)
@@ -17,7 +17,7 @@ import com.zhixun.android.sdk.polysdk.callback.AuthCallback;
 import com.zhixun.android.sdk.polysdk.callback.HttRequestCallback;
 import com.zhixun.android.sdk.polysdk.callback.IAudioConvertListener;
 import com.zhixun.android.sdk.polysdk.gpt.ChatGPTClient;
-import com.zhixun.android.sdk.polysdk.util.AESUtil;
+import com.zhixun.android.sdk.polysdk.callback.IOnKeyCheckCallback;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -111,6 +111,13 @@ public class MainActivity extends AppCompatActivity {
                     }
                 });
 
+
+        ChatGPTClient.getInstance().checkAIKey("sk-proj-04ogvrZQqyaiv1OWw8OZT3BlbkFJG9Gyr8oFvRdmr3oXQNbX", new IOnKeyCheckCallback() {
+            @Override
+            public void OnKeyCheckResult(boolean result) {
+                Log.d(TAG,"result--"+result);
+            }
+        });
     }
 
     private boolean isLogin = false;
index c80a012..e188b1e 100644 (file)
@@ -7,10 +7,10 @@ android {
     compileSdk 33
 
     defaultConfig {
-        minSdk 26
+        minSdk 24
         targetSdk 33
         versionCode 1
-        versionName "1.4"
+        versionName "1.5"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         ndk {
index 5164ffd..f880b8e 100644 (file)
@@ -76,7 +76,15 @@ public class ChatManager {
 
     /********************* chat部分 ***********************/
     private void connectChat() {
-        URI chatRri = URI.create(MyConfig.URL_AI_CHAT);
+        String url;
+        String channel = SpUtils.getInstance().getStringValue(SpUtils.KEY_CHANNEL);
+        if(TextUtils.isEmpty(channel)||channel.equals(MyConfig.CHANNLE_CHAT)){
+            url = MyConfig.URL_AI_CHAT;
+        }else {
+            url = MyConfig.URL_AI_CHAT+"?platform="+channel;
+        }
+        SobLog.d(TAG,"url--"+url);
+        URI chatRri = URI.create(url);
         chatClient = new JWebSocketClient(chatRri) {
             @Override
             public void onMessage(ByteBuffer bytes) {
@@ -100,15 +108,18 @@ public class ChatManager {
             public void onOpen(ServerHandshake handShakeData) {
                 super.onOpen(handShakeData);
                 Log.e(TAG, "onOpen: chatClient");
-
+                isReConnect = false;
             }
 
             @Override
             public void onClose(int code, String reason, boolean remote) {
                 super.onClose(code, reason, remote);
                 SobLog.d(TAG, "onClose:ttsClient-"+code+"-reason-"+reason);
-                handler.removeMessages(MSG_RECONNECT);
-                handler.sendEmptyMessageDelayed(MSG_RECONNECT,2000);
+                if(!isReConnect){
+                    handler.removeMessages(MSG_RECONNECT);
+                    handler.sendEmptyMessageDelayed(MSG_RECONNECT,2000);
+                }
+
             }
 
             @Override
@@ -185,4 +196,13 @@ public class ChatManager {
             chatClient = null;
         }
     }
+
+    private boolean isReConnect = false;
+    public void reConnect(){
+        isReConnect = true;
+        close();
+        handler.removeMessages(MSG_RECONNECT);
+        connectChat();
+    }
+
 }
index 73984d5..77c3e07 100644 (file)
@@ -1,5 +1,7 @@
 package com.zhixun.android.sdk.polysdk.asr;
 
+import android.media.AudioFormat;
+import android.media.AudioRecord;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -9,6 +11,7 @@ import android.util.Log;
 import androidx.annotation.NonNull;
 
 import com.google.gson.Gson;
+import com.zhixun.android.sdk.polysdk.PolymerizeAgent;
 import com.zhixun.android.sdk.polysdk.aigc.JWebSocketClient;
 import com.zhixun.android.sdk.polysdk.callback.HttRequestCallback;
 import com.zhixun.android.sdk.polysdk.callback.IAudioConvertListener;
@@ -138,6 +141,7 @@ public class TranscriptionManager {
     }
 
     private void connectTran() {
+
         URI arsRri = URI.create(MyConfig.URL_AI_TRAN);
         tranClient = new JWebSocketClient(arsRri) {
 
@@ -283,8 +287,36 @@ public class TranscriptionManager {
                 SobLog.d(TAG, "sendTransByte--fail--tranClient-isClose");
                 return;
             }
-//        SobLog.d(TAG, "sendTransByte--" + data.length);
-            tranClient.send(data);
+
+            int bufferSize = AudioRecord.getMinBufferSize(16000,
+                    AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
+            if(data.length<=bufferSize){
+                tranClient.send(data);
+            }else {
+                int page = data.length/bufferSize;
+                if(data.length%bufferSize!=0){
+                    page++;
+                }
+                int sendSize = 0;
+                while (sendSize<page){
+
+                    byte[] child = new byte[bufferSize];
+                    if(data.length%bufferSize!=0&&sendSize==page-1){
+                        child = new byte[data.length%bufferSize];
+                    }
+                    System.arraycopy(data,sendSize*bufferSize,child,0,child.length);
+                    tranClient.send(child);
+                    SobLog.i(TAG,"page--"+sendSize+"/"+page);
+                    sendSize++;
+                    try {
+                        Thread.sleep(5);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+
+
         }
 
     }
index 58f3492..8a6a622 100644 (file)
@@ -194,7 +194,7 @@ public class AuthReceiverHandler {
         loginObject.put("sign", sign);
         String param = new Gson().toJson(loginObject);
         Log.i(TAG, "doLogin--" + param);
-        HttpUtil.CallHttp("POST", MyConfig.URL_AUTH_LOGIN, param, new HttRequestCallback() {
+        HttpUtil.CallHttp("POST", MyConfig.URL_AUTH_LOGIN1, param, new HttRequestCallback() {
             @Override
             public void onSuccess(String result) {
                 SobLog.d(TAG, "doLogin-result--" + result);
@@ -253,7 +253,7 @@ public class AuthReceiverHandler {
         String sign = ByteTools.encryptMD5(deviceId + sn + time + secretKey);
         regiestObject.put("sign", sign);
 
-        HttpUtil.CallHttp("PUT", MyConfig.URL_AUTH_REGIEST, new Gson().toJson(regiestObject), new HttRequestCallback() {
+        HttpUtil.CallHttp("PUT", MyConfig.URL_AUTH_REGIEST1, new Gson().toJson(regiestObject), new HttRequestCallback() {
             @Override
             public void onSuccess(String result) {
                 SobLog.d(TAG, "doRegiest-result--" + result);
diff --git a/polysdk/src/main/java/com/zhixun/android/sdk/polysdk/callback/IOnKeyCheckCallback.java b/polysdk/src/main/java/com/zhixun/android/sdk/polysdk/callback/IOnKeyCheckCallback.java
new file mode 100644 (file)
index 0000000..579bb2d
--- /dev/null
@@ -0,0 +1,5 @@
+package com.zhixun.android.sdk.polysdk.callback;
+
+public interface IOnKeyCheckCallback {
+    void OnKeyCheckResult(boolean result);
+}
index 999a0eb..63830ad 100644 (file)
@@ -2,6 +2,7 @@ package com.zhixun.android.sdk.polysdk.callback;
 
 import android.content.Context;
 
+import com.zhixun.android.sdk.polysdk.entity.AigcQuery;
 import com.zhixun.android.sdk.polysdk.entity.AigcTask;
 
 import java.io.File;
@@ -35,11 +36,15 @@ public interface IPolyAiAPI {
 
     void creatAigcImg(AigcTask aigcTask,AIRequestCallback aiRequestCallback);
 
-    void queryTaskState(String taskId,AIRequestCallback aiRequestCallback);
+    void queryTaskState(AigcQuery aigcQuery, AIRequestCallback aiRequestCallback);
 
 
     void sendChatMsg(String text);
 
+    void setGPTModel(String model);
+    String getGPTModel();
+
+    void checkGPTKey(String key,IOnKeyCheckCallback onKeyCheckCallback);
     void sendChatMsg(String system,String text);
 
     void setOnChatMsgListener(OnChatMsgListener onChatMsgListener);
index db83c3c..bb373ba 100644 (file)
@@ -11,14 +11,17 @@ import com.zhixun.android.sdk.polysdk.asr.TranscriptionManager;
 import com.zhixun.android.sdk.polysdk.authentication.AuthReceiverHandler;
 import com.zhixun.android.sdk.polysdk.callback.AIRequestCallback;
 import com.zhixun.android.sdk.polysdk.callback.HttRequestCallback;
+import com.zhixun.android.sdk.polysdk.callback.IOnKeyCheckCallback;
 import com.zhixun.android.sdk.polysdk.callback.IPolyAiAPI;
 import com.zhixun.android.sdk.polysdk.callback.OnChatMsgListener;
 import com.zhixun.android.sdk.polysdk.callback.OnTTSDataChange;
 import com.zhixun.android.sdk.polysdk.callback.OnTranscriptionDataChange;
+import com.zhixun.android.sdk.polysdk.entity.AigcQuery;
 import com.zhixun.android.sdk.polysdk.entity.AigcTask;
 import com.zhixun.android.sdk.polysdk.entity.AigcStyle;
 import com.zhixun.android.sdk.polysdk.entity.AigcTaskResult;
 import com.zhixun.android.sdk.polysdk.entity.SupportLanguage;
+import com.zhixun.android.sdk.polysdk.gpt.ChatGPTClient;
 import com.zhixun.android.sdk.polysdk.http.HttpUtil;
 import com.zhixun.android.sdk.polysdk.util.AudioConvertManage;
 import com.zhixun.android.sdk.polysdk.util.MyConfig;
@@ -229,10 +232,10 @@ public class PolyAiKit implements IPolyAiAPI {
         if(!AuthReceiverHandler.getInstance().isLogined()&&!cannel.equals(MyConfig.CHANNLE_CHAT)){
             throw new RuntimeException(NOTLOGIN_TIP);
         }
-        String base64 = aigcTask.getImage_base64();
+        /*String base64 = aigcTask.getImage_base64();
         if(!TextUtils.isEmpty(base64)){
             aigcTask.setImage_base64("data:image/png;base64,"+base64);
-        }
+        }*/
 
         HttpUtil.CallHttp("POST", MyConfig.URL_AI_HOST + "/aigc/create-image",
                 new Gson().toJson(aigcTask), new HttRequestCallback() {
@@ -262,15 +265,15 @@ public class PolyAiKit implements IPolyAiAPI {
     }
 
     @Override
-    public void queryTaskState(String taskId, AIRequestCallback aiRequestCallback) {
+    public void queryTaskState(AigcQuery aigcQuery, AIRequestCallback aiRequestCallback) {
         String cannel = SpUtils.getInstance().getStringValue(SpUtils.KEY_CHANNEL_KEY);
         if(!AuthReceiverHandler.getInstance().isLogined()&&!cannel.equals(MyConfig.CHANNLE_CHAT)){
             throw new RuntimeException(NOTLOGIN_TIP);
         }
-        HashMap<String,String> param = new HashMap<>();
-        param.put("task_id",taskId);
+//        HashMap<String,String> param = new HashMap<>();
+//        param.put("task_id",taskId);
         HttpUtil.CallHttp("POST", MyConfig.URL_AI_HOST + "/aigc/get-result",
-                new Gson().toJson(param), new HttRequestCallback() {
+                new Gson().toJson(aigcQuery), new HttRequestCallback() {
                     @Override
                     public void onSuccess(String result) {
                         SobLog.d(TAG,"queryTaskState--result-"+result);
@@ -307,6 +310,21 @@ public class PolyAiKit implements IPolyAiAPI {
         ChatManager.getInstance().sendChat(text);
     }
 
+    @Override
+    public void setGPTModel(String model) {
+        SpUtils.getInstance().saveValue(SpUtils.KEY_CHAT_MODEL,model);
+    }
+
+    @Override
+    public String getGPTModel() {
+        return SpUtils.getInstance().getChatModel();
+    }
+
+    @Override
+    public void checkGPTKey(String key, IOnKeyCheckCallback onKeyCheckCallback) {
+        ChatGPTClient.getInstance().checkAIKey(key, onKeyCheckCallback);
+    }
+
     @Override
     public void sendChatMsg(String system, String text) {
         String cannel = SpUtils.getInstance().getStringValue(SpUtils.KEY_CHANNEL_KEY);
index 2463807..290e56f 100644 (file)
@@ -56,12 +56,15 @@ public class PolyApiKit implements IPolyAPI, IBtReceiverCallback {
         AuthReceiverHandler.getInstance().doRegiest(productKey,deviceId,
                 pid,authCallback);
 
+
     }
 
     @Override
     public void setAIChannelKey(String channel, String key) {
         SpUtils.getInstance().saveValue(SpUtils.KEY_CHANNEL,channel);
         SpUtils.getInstance().saveValue(SpUtils.KEY_CHANNEL_KEY,key);
+        ChatManager.getInstance().reConnect();
+
     }
 
     @Override
diff --git a/polysdk/src/main/java/com/zhixun/android/sdk/polysdk/entity/AigcQuery.java b/polysdk/src/main/java/com/zhixun/android/sdk/polysdk/entity/AigcQuery.java
new file mode 100644 (file)
index 0000000..ab689fc
--- /dev/null
@@ -0,0 +1,68 @@
+package com.zhixun.android.sdk.polysdk.entity;
+
+public class AigcQuery {
+
+    /**
+     * task_id : 111793d3-1999-4103-b3db-6f879d3b6ccb
+     * bit_depth : 32
+     * compression_quality : 80
+     * format : jpeg
+     * width : 128
+     * height : 128
+     */
+
+    private String task_id;
+    private int bit_depth;
+    private int compression_quality;
+    private String format;
+    private int width;
+    private int height;
+
+    public String getTask_id() {
+        return task_id;
+    }
+
+    public void setTask_id(String task_id) {
+        this.task_id = task_id;
+    }
+
+    public int getBit_depth() {
+        return bit_depth;
+    }
+
+    public void setBit_depth(int bit_depth) {
+        this.bit_depth = bit_depth;
+    }
+
+    public int getCompression_quality() {
+        return compression_quality;
+    }
+
+    public void setCompression_quality(int compression_quality) {
+        this.compression_quality = compression_quality;
+    }
+
+    public String getFormat() {
+        return format;
+    }
+
+    public void setFormat(String format) {
+        this.format = format;
+    }
+
+    public int getWidth() {
+        return width;
+    }
+
+    public void setWidth(int width) {
+        this.width = width;
+    }
+
+    public int getHeight() {
+        return height;
+    }
+
+    public void setHeight(int height) {
+        this.height = height;
+    }
+}
index 313416f..b8e024b 100644 (file)
@@ -15,8 +15,9 @@ public class AigcTask {
 
     private String subject;
     private int type;
-    private int height;
-    private int width;
+//    private int height;
+//    private int width;
+    private int amount;
     private String algorithm;
 
     private String image_base64;
@@ -37,23 +38,6 @@ public class AigcTask {
         this.type = type;
     }
 
-
-    public int getHeight() {
-        return height;
-    }
-
-    public void setHeight(int height) {
-        this.height = height;
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public void setWidth(int width) {
-        this.width = width;
-    }
-
     public String getAlgorithm() {
         return algorithm;
     }
@@ -69,4 +53,12 @@ public class AigcTask {
     public void setImage_base64(String image_base64) {
         this.image_base64 = image_base64;
     }
+
+    public int getAmount() {
+        return amount;
+    }
+
+    public void setAmount(int amount) {
+        this.amount = amount;
+    }
 }
index 90f4619..51cbe66 100644 (file)
@@ -12,7 +12,7 @@ public class AigcTaskResult {
 
     private String status;
     private String task_id;
-    private String result;
+    private List<String> result;
 
     public String getStatus() {
         return status;
@@ -31,11 +31,11 @@ public class AigcTaskResult {
     }
 
 
-    public String getResult() {
+    public List<String> getResult() {
         return result;
     }
 
-    public void setResult(String result) {
+    public void setResult(List<String> result) {
         this.result = result;
     }
 
index e141523..de9058c 100644 (file)
@@ -9,8 +9,10 @@ import com.google.gson.Gson;
 import com.zhixun.android.sdk.polysdk.bean.ChatResult;
 import com.zhixun.android.sdk.polysdk.bean.CompletionRequest;
 import com.zhixun.android.sdk.polysdk.callback.HttRequestCallback;
+import com.zhixun.android.sdk.polysdk.callback.IOnKeyCheckCallback;
 import com.zhixun.android.sdk.polysdk.util.JsonUtils;
 import com.zhixun.android.sdk.polysdk.util.SobLog;
+import com.zhixun.android.sdk.polysdk.util.SpUtils;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -65,13 +67,16 @@ public class ChatGPTClient {
     }
 
     public void sendMessage(String system,String message,IOnChatCallback callback){
+        sendMessage(system,message,API_KEY,callback);
+    }
+    public void sendMessage(String system,String message,String key,IOnChatCallback callback){
 
         new Thread(new Runnable() {
             @Override
             public void run() {
                 try {
                     CompletionRequest completionRequest = new CompletionRequest();
-                    completionRequest.setModel("gpt-3.5-turbo");
+                    completionRequest.setModel(SpUtils.getInstance().getChatModel());
                     List<CompletionRequest.MessagesBean> messagesBeans = new ArrayList<>();
                     if(!TextUtils.isEmpty(system)){
                         messagesBeans.add(new CompletionRequest.MessagesBean("system",system));
@@ -91,7 +96,7 @@ public class ChatGPTClient {
 
                     // 设置请求属性,如Content-Type
                     connection.setRequestProperty("Content-Type", "application/json");
-                    connection.setRequestProperty("Authorization", "Bearer " + API_KEY);
+                    connection.setRequestProperty("Authorization", "Bearer " + key);
                     OutputStream outputStream = connection.getOutputStream();
                     if (!TextUtils.isEmpty(reqJson)) {
                         outputStream.write(reqJson.getBytes());
@@ -120,14 +125,14 @@ public class ChatGPTClient {
                             }
                         }else {
                             if(callback!=null){
-                                callback.OnChatResult(1,0,"Data parsing failed");
+                                callback.OnChatResult(1,0,"failed:Data parsing failed");
                             }
                         }
 
 
                     }else {
                         if(callback!=null){
-                            callback.OnChatResult(1,0,"chat failed");
+                            callback.OnChatResult(1,0,"failed:chat failed");
                         }
                     }
 
@@ -136,7 +141,7 @@ public class ChatGPTClient {
                     SobLog.d(TAG, "请求失败--MalformedURLException--"+e.getMessage());
                     e.printStackTrace();
                     if(callback!=null){
-                        callback.OnChatResult(1,0,e.toString());
+                        callback.OnChatResult(1,0,"failed:"+e.toString());
                     }
                     //Looper.loop();
                 } catch (IOException e) {
@@ -145,7 +150,7 @@ public class ChatGPTClient {
                     e.printStackTrace();
                     //Looper.loop();
                     if(callback!=null){
-                        callback.OnChatResult(1,0,e.toString());
+                        callback.OnChatResult(1,0,"failed:"+e.toString());
                     }
                 }
             }
@@ -275,6 +280,23 @@ public class ChatGPTClient {
 
     }
 
+    private  final String OPENAI_API_URL = "https://api.openai.com/v1/engines/davinci-codex/completions?model=text-davinci-003&temperature=0.7&max_tokens=150&top_p=1&frequency_penalty=0.0&presence_penalty=0.0&stream=true&stop=\\\"\\\"&prompt=Hello, world!";
+
+    public void checkAIKey(String key, IOnKeyCheckCallback onKeyCheckCallback){
+        sendMessage(null, "hello",key, new IOnChatCallback() {
+            @Override
+            public void OnChatResult(int size, int position, String result) {
+                if(onKeyCheckCallback!=null){
+                    if(result.startsWith("failed")){
+                        onKeyCheckCallback.OnKeyCheckResult(false);
+                    }else {
+                        onKeyCheckCallback.OnKeyCheckResult(true);
+                    }
+                }
+            }
+        });
+    }
+
     private String createRequestBody(String message) {
         return "{\"prompt\": \"" + message + "\","
                 + "\"max_tokens\": 150,"
index 2bbe5a5..19e787d 100644 (file)
@@ -24,7 +24,7 @@ public class AESUtil {
                     cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
             return Base64.getEncoder().encodeToString(encrypted);
         } catch (Exception e) {
-            Log.i("TAG_MainActivity","encrypt--Exception--"+e.toString());
+            SobLog.i("AESUtil","encrypt--Exception--"+e.toString());
             e.printStackTrace();
         }
         return null;
@@ -43,7 +43,7 @@ public class AESUtil {
             byte[] original = cipher.doFinal(encrypted);
             return new String(original, StandardCharsets.UTF_8);
         } catch (Exception e) {
-            Log.i("TAG_MainActivity","Exception--"+e.toString());
+            SobLog.i("AESUtil","Exception--"+e.toString());
             e.printStackTrace();
         }
         return null;
index 939b3f0..8b0a806 100644 (file)
@@ -83,6 +83,7 @@ public class AudioConvertManage {
     public void convertAudioMsbcToPcm(byte[] inputData, String rate,String track, IAudioConvertListener iAudioConvertListener) {
         String inPath = SpUtils.getInstance().getSdkPath()+"input_temp.msbc";
         String outPath = SpUtils.getInstance().getSdkPath()+"output_temp.pcm";
+        SobLog.i(TAG, "convertAudioMsbcToPcm--");
         File inputFile = new File(inPath);
         File outfile = new File(outPath);
         if(inputFile.exists()){
@@ -96,6 +97,7 @@ public class AudioConvertManage {
             fos.write(inputData);
             fos.close();
         } catch (IOException e) {
+            SobLog.i(TAG, "IOException--"+e.toString());
             if(iAudioConvertListener!=null){
                 iAudioConvertListener.onError(e.getMessage());
             }
@@ -104,9 +106,8 @@ public class AudioConvertManage {
 
             @Override
             public void apply(final long executionId, final int returnCode) {
+                SobLog.i(TAG, "Async command returnCode--"+returnCode);
                 if (returnCode == RETURN_CODE_SUCCESS) {
-                    SobLog.i(TAG, "Async command SUCCESS");
-
                     if(outfile.exists()){
                         byte[] outData = readFile(outfile);
                         outfile.delete();
@@ -155,6 +156,7 @@ public class AudioConvertManage {
     }
 
     public void convertAudioSbcToPcm(byte[] inputData, String rate,String track, IAudioConvertListener iAudioConvertListener) {
+        SobLog.i(TAG, "convertAudioSbcToPcm--");
         String inPath = SpUtils.getInstance().getSdkPath()+"input_temp.sbc";
         String outPath = SpUtils.getInstance().getSdkPath()+"output_temp.pcm";
         File inputFile = new File(inPath);
@@ -170,6 +172,7 @@ public class AudioConvertManage {
             fos.write(inputData);
             fos.close();
         } catch (IOException e) {
+            SobLog.i(TAG, "IOException--"+e.getMessage());
             if(iAudioConvertListener!=null){
                 iAudioConvertListener.onError(e.getMessage());
             }
@@ -178,13 +181,13 @@ public class AudioConvertManage {
 
             @Override
             public void apply(final long executionId, final int returnCode) {
+                SobLog.i(TAG, "Async command SUCCESS--"+returnCode);
                 if (returnCode == RETURN_CODE_SUCCESS) {
-                    SobLog.i(TAG, "Async command SUCCESS");
 
                     if(outfile.exists()){
                         byte[] outData = readFile(outfile);
-//                        outfile.delete();
-//                        inputFile.delete();
+                        outfile.delete();
+                        inputFile.delete();
 
                         int bufferSize = AudioRecord.getMinBufferSize(16000,
                                 AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
index 6cc186f..90ac3c0 100644 (file)
@@ -4,8 +4,8 @@ public class MyConfig {
     public final static String FRAME_HEAD = "-$$";
     public final static String FRAME_END = "$$-";
     public final static String CHANNLE_CHAT = "CHAT GPT";
-//    public final static String URL_AUTH_REGIEST = "https://app.api.thisiot.com/da/auth/active";
-//    public final static String URL_AUTH_LOGIN = "https://app.api.thisiot.com/da/auth/login";
+    public final static String URL_AUTH_REGIEST1 = "https://app.api.thisiot.com/da/auth/active";
+    public final static String URL_AUTH_LOGIN1 = "https://app.api.thisiot.com/da/auth/login";
     public final static String URL_AUTH_REGIEST = "http://180.184.206.142/bz-api/dev/auth/active";
     public final static String URL_AUTH_LOGIN = "http://180.184.206.142/bz-api/dev/auth/sign_in";
     public final static String URL_AI_HOST = "http://118.145.158.207:80";
@@ -21,4 +21,6 @@ public class MyConfig {
 //    public final static String URL_AI_TTS= "ws://121.40.67.151:9099/tts/stream";
 
     public final static String URL_AI_TTS= "ws://118.145.158.207:80/tts/stream";
+
+    public final static String AI_IS_AUTH= "1";
 }
index 9b1274b..36086ff 100644 (file)
@@ -21,6 +21,8 @@ public class SpUtils {
     public static final String KEY_CHANNEL_KEY = "key_channel_key";
     private SharedPreferences sharedPreferences;
 
+    public static final String KEY_CHAT_MODEL = "key_chat_model";
+
     private Context mContext;
     private String sdkPath;
     public static SpUtils getInstance(){
@@ -66,6 +68,12 @@ public class SpUtils {
         return sharedPreferences.getString(key,"");
     }
 
+    public String getChatModel(){
+
+        sharedPreferences= mContext.getSharedPreferences(BLUEMAGPIESHARE,
+                Context.MODE_PRIVATE);
+        return sharedPreferences.getString(KEY_CHAT_MODEL,"gpt-3.5-turbo");
+    }
 
     public void saveValue(String key,String value){
         sharedPreferences= mContext.getSharedPreferences(BLUEMAGPIESHARE,