var responseId = ""
var reply = ""
-
+ var recordData = Data()
++
var isLogin:Bool{
return MixSdk.shared.auth.authorized
setupChatCallBack()
}
- func aiValid(_ data:Data){
-
- /// 检查chatGPT key是否有效
- /// - Parameters:
- /// - key: key
- /// - completeHandler: 结果回调
- public func checkChatptValid(_ key:String ,completeHandler: @escaping MSChatGptCheckKeyCallBack){
- guard let key = chatGptKey else{
- Logger.log("请先设置chatGPT key")
- completeHandler(false,nil)
- return
- }
- MixSdk.shared.chatGpt.isValidKey(key, completeHandler: completeHandler)
- }
-
-
-
+ func checkAiValid(_ data:Data){
let result = IBGeneralParser.dataPacket(data)
let platform = chatModeMap[result.int] ?? .doubao
let key = platform == .chatGPT ? chatGptKey : nil
//取消当前思考
func cancelThinkAction(){
-- MixSdk.shared.chat.reset()
++// MixSdk.shared.chat.reset()
+ MixSdk.shared.voiceChat.reset()
cancelThink?()
}
- func aiRequest(_ data:Data){
+ func startRecord(_ data:Data){
+ recordData = Data()
- Logger.log("开始录音:")
let result = IBGeneralParser.dataPacket(data)
let code = result.int
- IBSender()
- .ability(IBAbility.aiReady)
- .parameters([.value(1)])
- .response {[weak self] result in
- self?.fectchAiAudio()
- }
+
-
let platform = chatModeMap[code] ?? .doubao
Logger.log("使用模型:",platform.title)
useMode?(platform)
}
else{
MixSdk.shared.setPlatform(platform,key: nil)
- //开始任务
- MixSdk.shared.voiceChat.start()
}
++ MixSdk.shared.voiceChat.start()
}
- func fectchAiAudio(){
- IBSender()
- .ability(IBAbility.fetchAiAudio)
- .parameters([])
- .response {[weak self] result in
- guard let self = self else {return}
- responseId = "\(Date().timeIntervalSince1970)"
- if result.isSuccess,let data = result.value as? Data{
- receiveAiData(sbcData: data)
- }
- else{
- Logger.log(result)
- let model = IBAiResponse(responseId)
- model.type = 0
- model.state = "end"
- model.content = "录音解析错误"
- sendRelpy(model: model)
- }
- }
+ func stopRecord(_ data:Data){
+ Logger.log("结束录音:")
+ receiveFullData(sbcData: recordData)
}
- }
- extension IBAiManager{
- func receiveAiData(sbcData:Data){
+ func receiveRecordData(data:Data){
+ recordData.append(data)
+ }
-}
-extension IBAiManager{
-
- func sendAiState(isValid:Bool,gptKey:String?){
- let model = IBAiValid()
- model.isValid = isValid
- model.key = gptKey
- IBSender()
- .ability(IBAbility.aiValid)
- .parameters([.aiValid(model)])
- .response { result in
-
- }
- }
-
- func saveRecordData(data:Data){
- Logger.log("文件大小 \(data.count)")
- let filePath = NSHomeDirectory() + "/Documents/\(Date().format(.long2)).sbc"
- let url = URL(fileURLWithPath: filePath)
- do {
- try data.write(to: url)
- print("保存路径 \(filePath)")
- } catch let error {
- print("\(error)")
- }
- }
-}
-extension IBAiManager{
+ private func receiveFullData(sbcData:Data){
- saveRecordData(data: sbcData)
++// saveRecordData(data: sbcData)
let pcmData = MSAudioConvert.sbcTopcm(sbcData)
if pcmData.count == 0{
++ Logger.log("sbc2pcm失败")
Logger.log("sbc2pcm失败")
let model = IBAiResponse(responseId)
model.type = 0
sendRelpy(model: model)
return
}
++
guard let pcmPath = IBTools.saveToFile(data: pcmData) else {return}
MixSdk.shared.stt.sentenceRecognize(filePath: pcmPath,format:"pcm",sample_rate:"16000",lang: "zh-cn") {[weak self] text, error in
guard let self = self else {return}
}
}
}
--
- private func sendToChatGpt(content text:String){
++ func saveRecordData(data:Data){
++ Logger.log("文件大小 \(data.count)")
++ let filePath = NSHomeDirectory() + "/Documents/\(Date().format(.long2)).sbc"
++ let url = URL(fileURLWithPath: filePath)
++ do {
++ try data.write(to: url)
++ print("保存路径 \(filePath)")
++ } catch let error {
++ print("\(error)")
++ }
++ }
++}
++extension IBAiManager{
+ func sendToChatGpt(content text:String){
reply = ""
MixSdk.shared.chatGpt.send(content: text) {[weak self] response, error in
guard let self = self else {return}