/// aigc类
public class MSAigc{
- func getUrl(_ api:String)->String{
- return MSConfig.httpBaseURL + api + MSConfig.headQuery()
- }
/// 获取算法类型
/// - Parameters:
completeHandler(nil,.unauthorised)
return
}
- let url = getUrl("aigc/get-style")
+ let url = MSConfig.httpUrl(api: "aigc/get-style")
let params = [
"type":type,
]
- Logger.log(params)
+ Logger.log(url,params)
HTTP.POST(url,parameters: params,requestSerializer: JSONParameterSerializer()){ response in
DispatchQueue.main.sync {
completeHandler(nil,.unauthorised)
return
}
- let url = getUrl("aigc/get-result")
+ let url = MSConfig.httpUrl(api: "aigc/get-result")
let params:[String:Any] = [
"task_id":task.task_id,
"bit_depth":task.bit_depth,
"height":task.height,
"width":task.width,
]
- Logger.log(params)
+ Logger.log(url,params)
HTTP.POST(url,parameters: params,requestSerializer: JSONParameterSerializer()){ response in
DispatchQueue.main.sync {
completeHandler(nil,MSError.invalidRequest)
return }
- let url = getUrl("aigc/create-image")
- Logger.log(params)
+ let url = MSConfig.httpUrl(api: "aigc/create-image")
+ Logger.log(url,params)
HTTP.POST(url,parameters: params,requestSerializer: JSONParameterSerializer()){ response in
DispatchQueue.main.sync {
if let result = dict["success"] as? Bool,result == true,let dataDict = dict["data"] as? [String:Any]{
self.authorized = true
self.deviceToken = dataDict["token"] as? String ?? ""
+
+ MixSdk.shared.setupWebsoket()
completeHandler(self.deviceToken,nil)
}
else{
}
}
-extension MSAuth{
- func addHead(_ params:inout [String:Any]) -> [String:Any] {
- params["ut"] = ""
- params["is_auth"] = "1"
- return params
- }
-}
/// 大模型对话类
public class MSChat {
+ var timer:Timer?
var socket:WebSocket!
/// 对话回调
}
}
- init(){
+ func setupWebSocket(){
openWebSocket()
setupHeartBeat()
}
func openWebSocket(){
- let url = MSConfig.wsBaseURL + "chat/ws/watches" + MSConfig.headQuery()
+ let url = MSConfig.webSocketUrl(api: "chat/ws/watches",addPlatform: true)
+ Logger.log(url)
socket = WebSocket(url)
socket.delegate = self
}
func setupHeartBeat(){
- let timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
+ timer?.invalidate()
+ timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
guard let self = self else {return}
if socket.readyState == .open{
self.socket.ping()
self.openWebSocket()
}
}
- RunLoop.current.add(timer, forMode: .common)
+ RunLoop.current.add(timer!, forMode: .common)
}
/// 发送内容
return
}
let params:[String:Any] = [
- "platform":MixSdk.shared.aiPlatform.value,
+// "platform":MixSdk.shared.aiPlatform.value,
"type":"chat",
"content":content,
]
extension MSChat:WebSocketDelegate{
func webSocketOpen() {
- // Logger.log("MSChat webSocketOpen")
+ Logger.log("MSChat webSocketOpen")
connectStateCallBack?(.connected)
}
func webSocketClose(_ code: Int, reason: String, wasClean: Bool) {
-// Logger.log("MSChat webSocketClose",code,reason,wasClean)
+ Logger.log("MSChat webSocketClose",code,reason,wasClean)
connectStateCallBack?(.disConnected)
}
completeHandler(nil,MSChatGptError())
return
}
- let fileUrl = URL(fileURLWithPath: filePath)
+// let fileUrl = URL(fileURLWithPath: filePath)
// let params:[String : Any] = [
//// "model": model,
// "model":"whisper-1",
/// 语音转文字类
public class MSStt {
+ var timer:Timer?
var socket:WebSocket!
var taskId:String?
}
}
- init(){
+ func setupWebSocket(){
openWebSocket()
setupHeartBeat()
}
func openWebSocket(){
- socket = WebSocket(MSConfig.wsBaseURL + "asr/ws" + MSConfig.headQuery())
+ let url = MSConfig.webSocketUrl(api: "asr/ws",addPlatform: false)
+// Logger.log(url)
+ socket = WebSocket(url)
socket.delegate = self
}
func setupHeartBeat(){
- let timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
+ timer?.invalidate()
+ timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
guard let self = self else {return}
if socket.readyState == .open{
self.socket.ping()
self.openWebSocket()
}
}
- RunLoop.current.add(timer, forMode: .common)
+ RunLoop.current.add(timer!, forMode: .common)
}
/// 一句话识别
return
}
- var url = MSConfig.httpBaseURL + "asr/sentence-recognize?" + MSConfig.headQuery()
+ var url = MSConfig.httpUrl(api: "asr/sentence-recognize?")
if let value = format{
url += "format=\(value)&"
}
if let value = sample_rate{
url += "sample_rate=\(value)&"
}
-// Logger.log(url)
+ Logger.log(url)
var request = URLRequest(url: URL(string:url)!)
request.httpMethod = "POST"
extension MSStt:WebSocketDelegate{
func webSocketOpen() {
- Logger.log("MSStt webSocketOpen")
+// Logger.log("MSStt webSocketOpen")
connectStateCallBack?(.connected)
}
func webSocketClose(_ code: Int, reason: String, wasClean: Bool) {
- Logger.log("MSStt webSocketClose",code,reason,wasClean)
+// Logger.log("MSStt webSocketClose",code,reason,wasClean)
connectStateCallBack?(.disConnected)
}
/// 翻译类
public class MSTranslate {
- private func getUrl(_ api:String)->String{
- return MSConfig.httpBaseURL + api + MSConfig.headQuery()
- }
-}
-
-public extension MSTranslate{
-
/// 通用翻译
/// - Parameters:
/// - lang: 语言
/// - text: 需要翻译的文字
/// - completeHandler: 结果回调
- func translate(lang:MSTranslateLanguage,text:String,completeHandler: @escaping MSTranslateCallBack){
+ public func translate(lang:MSTranslateLanguage,text:String,completeHandler: @escaping MSTranslateCallBack){
if !MixSdk.shared.auth.authorized {
completeHandler(nil,.unauthorised)
return
}
- let url = getUrl("translate/general")
+ let url = MSConfig.httpUrl(api: "translate/general")
let params = [
"sl":"auto",
"tl":lang.code,
"text":text
]
- Logger.log(params)
+ Logger.log(url,params)
HTTP.POST(url,parameters: params,requestSerializer: JSONParameterSerializer()){ response in
DispatchQueue.main.sync {
/// 获取支持的语言
/// - Parameter completeHandler: 结果回调
- func getSupportLanguages(completeHandler: @escaping MSLanuageCallBack){
+ public func getSupportLanguages(completeHandler: @escaping MSLanuageCallBack){
if !MixSdk.shared.auth.authorized {
completeHandler(nil,.unauthorised)
return
}
- let url = getUrl("translate/languages")
+ let url = MSConfig.httpUrl(api: "translate/languages")
+ Logger.log(url)
HTTP.POST(url,requestSerializer: JSONParameterSerializer()){ response in
DispatchQueue.main.sync {
/// 文字转语音类
public class MSTts {
+ var timer:Timer?
var socket:WebSocket!
var taskId:String?
}
}
- init(){
+ func setupWebSocket(){
openWebSocket()
setupHeartBeat()
}
func openWebSocket(){
- socket = WebSocket(MSConfig.wsBaseURL + "tts/stream" + MSConfig.headQuery())
+ let url = MSConfig.webSocketUrl(api: "tts/stream",addPlatform: false)
+// Logger.log(url)
+ socket = WebSocket(url)
socket.delegate = self
}
func setupHeartBeat(){
- let timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
+ timer?.invalidate()
+ timer = Timer.scheduledTimer(withTimeInterval: MSConfig.wsHeartBeatTime, repeats: true) { [weak self] _ in
guard let self = self else {return}
if socket.readyState == .open{
self.socket.ping()
self.openWebSocket()
}
}
- RunLoop.current.add(timer, forMode: .common)
+ RunLoop.current.add(timer!, forMode: .common)
}
}
extension MSTts:WebSocketDelegate{
func webSocketOpen() {
- // Logger.log("MSTts webSocketOpen")
+// Logger.log("MSTts webSocketOpen")
connectStateCallBack?(.connected)
}
static let httpBaseURL = "https://amp.raisound.com/"
static let wsHeartBeatTime = 2.0
- static func headQuery()->String{
+// static func add(api:String)->String{
// return "?platform=aliyun&is_auth=false"
-// return "?platform=aliyun&is_auth=1&tu=\(MixSdk.shared.auth.deviceToken)"
- return ""
+// return api + "?platform=\(MixSdk.shared.aiPlatform.value)&is_auth=1&tu=\(MixSdk.shared.auth.deviceToken)"
+// return ""
+// }
+
+ static func httpUrl(api:String)->String{
+// return httpBaseURL + api + "?platform=\(MixSdk.shared.aiPlatform.value)&is_auth=1&dt=\(MixSdk.shared.auth.deviceToken)"
+ return httpBaseURL + api + ""
+ }
+ static func webSocketUrl(api:String,addPlatform:Bool)->String{
+ if addPlatform{
+ return wsBaseURL + api + "?platform=\(MixSdk.shared.aiPlatform.value)"
+ }
+ else{
+ return wsBaseURL + api
+ }
+// return wsBaseURL + api + "?platform=\(MixSdk.shared.aiPlatform.value)&is_auth=1&dt=\(MixSdk.shared.auth.deviceToken)"
}
}
/// Ai平台类型
public enum MSPlatform {
-// /// 阿里云
+ /// 阿里云
// case aliyun
-// /// 火山
-// case huoshan
/// 文心一言
case yiyan
/// 豆包
switch self {
// case .aliyun:
// return "aliyun"
-// case .huoshan:
-// return "huoshan"
case .yiyan:
- return "yiyan"
+ return "baidu"
case .doubao:
return "huoshan"
case .kimi:
- return "kimi"
+ return "moonshot"
case .chatGPT:
return "chatGPT"
Logger.log("\nplatform = \(platform) \n key= \(key ?? "")")
aiPlatform = platform
aiKey = key
+
+ if platform != .chatGPT{
+ setupWebsoket()
+ }
}
/// ai平台
// return MSStt()
// }()
+ func setupWebsoket(){
+ MixSdk.shared.stt.setupWebSocket()
+ MixSdk.shared.tts.setupWebSocket()
+ MixSdk.shared.chat.setupWebSocket()
+ }
}