18C42C8A2C24344D000D8860 /* Sbc2PcmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C42C892C24344D000D8860 /* Sbc2PcmViewController.swift */; };
18DB20482C213D730070D571 /* AiMouseAudioRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DB20462C213D730070D571 /* AiMouseAudioRecord.m */; };
18DB20492C213D730070D571 /* AiMouseRecordManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DB20472C213D730070D571 /* AiMouseRecordManager.m */; };
+ 18FBC2BB2C38E0FC002240AF /* ChatGptViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18FBC2BA2C38E0FC002240AF /* ChatGptViewController.swift */; };
F59940004E1C16053FBD42F5 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B555BC40ACD8F31DBCDD1A2 /* Pods_Example.framework */; };
/* End PBXBuildFile section */
18DB20452C213D730070D571 /* AiMouseAudioRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiMouseAudioRecord.h; sourceTree = "<group>"; };
18DB20462C213D730070D571 /* AiMouseAudioRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouseAudioRecord.m; sourceTree = "<group>"; };
18DB20472C213D730070D571 /* AiMouseRecordManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouseRecordManager.m; sourceTree = "<group>"; };
+ 18FBC2BA2C38E0FC002240AF /* ChatGptViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatGptViewController.swift; sourceTree = "<group>"; };
4B555BC40ACD8F31DBCDD1A2 /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
759E170040ACED4895C8A49D /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
C85BC820E1AA39AC970C9E79 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
18B74A232C201CE900FABBA9 /* SttViewController.swift */,
18C42B402C230A15000D8860 /* TtsFileViewController.swift */,
18B74A252C201EBD00FABBA9 /* ChatViewController.swift */,
+ 18FBC2BA2C38E0FC002240AF /* ChatGptViewController.swift */,
18B74A272C201F2500FABBA9 /* TranslateViewController.swift */,
18B74A292C201FF200FABBA9 /* AigcViewController.swift */,
18C42C892C24344D000D8860 /* Sbc2PcmViewController.swift */,
18B74A212C201CD600FABBA9 /* TtsViewController.swift in Sources */,
18DB20482C213D730070D571 /* AiMouseAudioRecord.m in Sources */,
18204BD82C193F9A00F94E69 /* ViewController.swift in Sources */,
+ 18FBC2BB2C38E0FC002240AF /* ChatGptViewController.swift in Sources */,
18B74A242C201CE900FABBA9 /* SttViewController.swift in Sources */,
18204BD42C193F9A00F94E69 /* AppDelegate.swift in Sources */,
18B74A262C201EBD00FABBA9 /* ChatViewController.swift in Sources */,
--- /dev/null
+//
+// ChatGptViewController.swift
+// Example
+//
+// Created by incar on 2024/7/6.
+//
+
+import UIKit
+import MixSdk
+import SnapKit
+import Toast_Swift
+class ChatGptViewController: UIViewController{
+
+ let textView = UITextView()
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ // Do any additional setup after loading the view.
+
+ setupViews()
+ //设置平台
+ MixSdk.shared.setPlatform(.chatGPT, key: "sk-proj-fdifVB2nPBIVcQeegE0AT3BlbkFJsgOXO5mnrmzox8pnSxMV")
+ }
+
+ func setupViews(){
+ self.title = "ChatGpt"
+ self.view.backgroundColor = .white
+
+ let toolBar = SendToolBar()
+ toolBar.textField.text = "我马上大四毕业了,请列出2024年最火的10个行业,并且为我规划未来十年的工作安排"
+ toolBar.delegate = self
+ view.addSubview(toolBar)
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(60)
+ make.bottom.equalToSuperview().inset(20)
+ }
+
+ textView.isEditable = false
+ view.addSubview(textView)
+ textView.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(80)
+ make.left.right.equalToSuperview()
+ make.bottom.equalTo(toolBar.snp.top)
+ }
+ }
+}
+extension ChatGptViewController:SendToolBarDelegate{
+ func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
+ textView.text += "[send] " + text + "\n"
+
+ let range = NSMakeRange(textView.text.count - 1, 1)
+ textView.scrollRangeToVisible(range)
+ let content = text
+ view.makeToastActivity(.center)
+ MixSdk.shared.chatGpt.send(content: content) {[weak self] response, error in
+ guard let self = self else {return}
+ self.view.hideToastActivity()
+ if let model = response,let choices = model.choices.first {
+ textView.text += "[receive] " + choices.message.content + "\n"
+ let range = NSMakeRange(textView.text.count - 1, 1)
+ textView.scrollRangeToVisible(range)
+ }
+ else if let err = error{
+ self.view.makeToast(err.message)
+ }
+ }
+ }
+}
setupViews()
setupChatCallBack()
+ //设置默认平台
+ self.title = "chat-阿里云"
+ MixSdk.shared.setPlatform(.aliyun)
}
func setupViews(){
self.title = "大模型对话"
self.view.backgroundColor = .white
+ self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "切换平台", style: .done, target: self, action: #selector(changePlatform))
let toolBar = SendToolBar()
toolBar.textField.text = "今天天气怎么样"
self.textView.scrollRangeToVisible(range)
}
}
+
+
+ @objc func changePlatform(){
+ let vc = UIAlertController(title: nil, message: "请选择", preferredStyle: .actionSheet)
+ let action0 = UIAlertAction(title: "阿里云", style: .default) { action in
+ self.title = "chat-阿里云"
+ MixSdk.shared.setPlatform(.aliyun)
+ }
+ vc.addAction(action0)
+ let action1 = UIAlertAction(title: "火山", style: .default) { action in
+ MixSdk.shared.setPlatform(.huoshan)
+ self.title = "chat-火山"
+ }
+ vc.addAction(action1)
+ let action2 = UIAlertAction(title: "ChatGPT", style: .default) { action in
+ MixSdk.shared.setPlatform(.chatGPT, key: "sk-proj-fdifVB2nPBIVcQeegE0AT3BlbkFJsgOXO5mnrmzox8pnSxMV")
+ self.title = "chatGPT"
+ }
+ vc.addAction(action2)
+
+ let action3 = UIAlertAction(title: "取消", style: .cancel) { action in
+
+ }
+ vc.addAction(action3)
+
+ self.present(vc, animated: true)
+ }
}
extension ChatViewController:SendToolBarDelegate{
func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
- if MixSdk.shared.chat.connectState == .connected {
- MixSdk.shared.chat.send(content: text)
+ if(MixSdk.shared.aiPlatform == .chatGPT){
textView.text += "[send] " + text + "\n"
let range = NSMakeRange(textView.text.count - 1, 1)
textView.scrollRangeToVisible(range)
+ let content = text
+ view.makeToastActivity(.center)
+ MixSdk.shared.chatGpt.send(content: content) {[weak self] response, error in
+ guard let self = self else {return}
+ self.view.hideToastActivity()
+ if let model = response,let choices = model.choices.first {
+ textView.text += "[receive] " + choices.message.content + "\n"
+ let range = NSMakeRange(textView.text.count - 1, 1)
+ textView.scrollRangeToVisible(range)
+ }
+ else if let err = error{
+ self.view.makeToast(err.message)
+ }
+ }
}
else{
- //已断开连接
- textView.text += "已断开连接。。。"
-
- let range = NSMakeRange(textView.text.count - 1, 1)
- textView.scrollRangeToVisible(range)
+ if MixSdk.shared.chat.connectState == .connected {
+ MixSdk.shared.chat.send(content: text)
+ textView.text += "[send] " + text + "\n"
+
+ let range = NSMakeRange(textView.text.count - 1, 1)
+ textView.scrollRangeToVisible(range)
+ }
+ else{
+ //已断开连接
+ textView.text += "已断开连接。。。"
+
+ let range = NSMakeRange(textView.text.count - 1, 1)
+ textView.scrollRangeToVisible(range)
+ }
}
}
}
}
else{
//5
- MixSdk.shared.stt.stopTranscription()
recordMamager.stop()
+ MixSdk.shared.stt.stopTranscription()
}
}
//3
("翻译","translateAction"),
("aigc","aigcAction"),
("大模型对话","chatAction"),
+ ("ChatGPT","chatGptAction"),
("长文本合成语音","longTtsAction"),
("文本合成语音","ttsAction"),
("语音文件转文本","fileSttAction"),
("语音数据流转文本","sttAction"),
("sbc转pcm","sbc2PcmAction"),
+
]
override func viewDidLoad() {
let deviceId = "C0310000A57B"
let productKey = "ccvUoJOLbXn"
let secretKey = "nNRjkRpKTxvprGaW"
- let deviceSecret = "UGCJcceIrrETjKCBsE2SijSxFu4cPfmL"
+ let deviceSecret = "twLGAEo3RqlfCY3QLOjppdXkMb5I4dGC"
MixSdk.shared.auth.login(productKey: productKey, secretKey: secretKey, deviceId: deviceId, deviceSecrect: deviceSecret){[weak self] isSuccess,error in
self?.view.hideToastActivity()
if let err = error{
let vc = Sbc2PcmViewController()
self.navigationController?.pushViewController(vc, animated: true)
}
-
+ @objc func chatGptAction() {
+ let vc = ChatGptViewController()
+ self.navigationController?.pushViewController(vc, animated: true)
+ }
}
18C42C782C24241A000D8860 /* MixSdk-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C42C762C24241A000D8860 /* MixSdk-Bridging-Header.h */; };
18C42C7B2C24270D000D8860 /* MSAudioConvert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C42C7A2C24270D000D8860 /* MSAudioConvert.swift */; };
18C42C7D2C242A40000D8860 /* liblzma.5.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 18C42C7C2C242A40000D8860 /* liblzma.5.tbd */; };
+ 18FBC2B72C38DA05002240AF /* MSChatGpt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18FBC2B62C38DA05002240AF /* MSChatGpt.swift */; };
+ 18FBC2B92C38DA1D002240AF /* MSChatGptModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18FBC2B82C38DA1D002240AF /* MSChatGptModel.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
18C42C762C24241A000D8860 /* MixSdk-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MixSdk-Bridging-Header.h"; sourceTree = "<group>"; };
18C42C7A2C24270D000D8860 /* MSAudioConvert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MSAudioConvert.swift; sourceTree = "<group>"; };
18C42C7C2C242A40000D8860 /* liblzma.5.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = liblzma.5.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/lib/liblzma.5.tbd; sourceTree = DEVELOPER_DIR; };
+ 18FBC2B62C38DA05002240AF /* MSChatGpt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MSChatGpt.swift; sourceTree = "<group>"; };
+ 18FBC2B82C38DA1D002240AF /* MSChatGptModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MSChatGptModel.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
18C42B3C2C22F2C4000D8860 /* MSTtsModel.swift */,
18B74A1D2C1FDDB400FABBA9 /* MSChat.swift */,
18C42B3E2C22F2E1000D8860 /* MSChatModel.swift */,
+ 18FBC2B62C38DA05002240AF /* MSChatGpt.swift */,
+ 18FBC2B82C38DA1D002240AF /* MSChatGptModel.swift */,
181188442C1AC35F00C23FAB /* MSError.swift */,
);
path = MixSdk;
18204BFD2C19488900F94E69 /* Operation.swift in Sources */,
1811883C2C1A8B5200C23FAB /* JSON.swift in Sources */,
181188402C1A8B5200C23FAB /* LRC.swift in Sources */,
+ 18FBC2B92C38DA1D002240AF /* MSChatGptModel.swift in Sources */,
18204BFC2C19488900F94E69 /* HTTPSecurity.swift in Sources */,
18204BFB2C19488900F94E69 /* Upload.swift in Sources */,
18204BFA2C19488900F94E69 /* Request.swift in Sources */,
18C42B392C22F1FA000D8860 /* MSSttModel.swift in Sources */,
18C42C6F2C2422C2000D8860 /* AiAudioDecoder.m in Sources */,
18B74A1E2C1FDDB500FABBA9 /* MSChat.swift in Sources */,
+ 18FBC2B72C38DA05002240AF /* MSChatGpt.swift in Sources */,
184FFC542C21B091006F664D /* MSAigcModel.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
18204BC32C193E3D00F94E69 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
18204BC42C193E3D00F94E69 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
import Foundation
-
-
/// 对话回调
public typealias MSChatCallBack = (_ model: MSChatModel) -> Void
return
}
let params = [
+ "platform":MixSdk.shared.aiPlatform.value,
"type":"chat",
"content":content,
]
--- /dev/null
+//
+// MSChatGpt.swift
+// MixSdk
+//
+// Created by incar on 2024/7/6.
+//
+
+import Foundation
+
+
+/// ChatGpt
+public typealias MSChatGptCallBack = (_ response: MSChatGptModel?,_ error:MSChatGptError?) -> Void
+
+
+/// 鉴权管理类
+public class MSChatGpt {
+
+ func getUrl()->String{
+ return "https://api.openai.com/v1/chat/completions"
+ }
+
+ /// 发送对话内容
+ /// - Parameters:
+ /// - content: 内容
+ /// - completeHandler: 结果会调皮
+ public func send(content:String,completeHandler: @escaping MSChatGptCallBack){
+ guard let key = MixSdk.shared.aiKey else {
+ Logger.log("请设置key")
+ completeHandler(nil,MSChatGptError())
+ return
+ }
+ let params:[String : Any] = [
+ "model": "gpt-3.5-turbo",
+ "messages": [
+ [
+ "role": "user",
+ "content": content
+ ]
+ ]
+ ]
+// let params:[String : Any] = [
+// "model": "gpt-3.5-turbo",
+// "messages": [
+// [
+// "role": "system",
+// "content": "你是一个很聪明的职业规划师"
+// ],
+// [
+// "role": "user",
+// "content": "我马上大四毕业了,请列出2024年最火的10个行业,并且为我规划未来十年的工作安排"
+// ]
+// ]
+// ]
+ let url = getUrl()
+ let head:[String:String] = ["Authorization":"Bearer \(key)"]
+ Logger.log(params)
+ Logger.log(head)
+
+ HTTP.POST(url,parameters: params,headers: head,requestSerializer: JSONParameterSerializer()){ response in
+ DispatchQueue.main.sync {
+ let (dict,error) = MSHttpManager.receiveData(response)
+ if let error = error {
+ completeHandler(nil,MSChatGptError())
+ return
+ }
+ guard let dict = dict else {return completeHandler(nil,MSChatGptError())}
+
+ if let id = dict["id"] as? String,let model = JSON.decode(MSChatGptModel.self, from: response.data){
+ completeHandler(model,nil)
+ }
+ else if let error = JSON.decode(MSChatGptError.self, from: response.data){
+ completeHandler(nil,error)
+ }
+ else{
+ completeHandler(nil,MSChatGptError())
+ }
+ }
+ }
+ }
+}
--- /dev/null
+//
+// MSChatGptModel.swift
+// MixSdk
+//
+// Created by incar on 2024/7/6.
+//
+
+import Foundation
+
+public class MSChatGptError:Codable{
+ ///
+ public var message:String = "response error"
+ ///
+// public var type:String = ""
+ ///
+ public var code:String = "invalid_request"
+}
+
+
+public class MSChatGptModel:Codable{
+ /// id
+ public var id:String = ""
+ ///
+ public var object:String = ""
+ /// 创建的时间的时间戳
+ public var created:Int = 0
+ /// 使用的模型
+ public var model:String = ""
+ /// 消息体
+ public var choices:[MSChatGptChoices] = []
+ /// token使用情况
+ public var usage:MSChatGptUsage = MSChatGptUsage()
+}
+
+public class MSChatGptChoices:Codable{
+ /// 第几调回复
+ public var index:Int = 0
+ /// 回复的消息体
+ public var message:MSChatGptMessage = MSChatGptMessage()
+ /// 结束原因
+ public var finish_reason:String = ""
+}
+
+/// 回复的消息体
+public class MSChatGptMessage:Codable{
+ /// 角色
+ public var role:String = ""
+ /// 内容
+ public var content:String = ""
+}
+
+/// token使用情况
+public class MSChatGptUsage:Codable{
+ public var prompt_tokens:Int = 0
+ public var completion_tokens:Int = 0
+ public var total_tokens:Int = 0
+}
Logger.log("还未鉴权")
return
}
+ print("send \(pcmData)")
socket.send(data: pcmData)
}
}
func webSocketMessageText(_ text: String) {
Logger.log("MSStt receive",text)
- guard let data = text.data,let model = JSON.decode(MSSttEvent.self, from: data) else{
- return
+ if let data = text.data,let model = JSON.decode(MSSttEvent.self, from: data) {
+ eventCallBack?(model)
+ }
+ else if let data = text.data,let model = JSON.decode(MSSttEventHead.self, from: data) {
+ eventCallBack?(model.header)
+// openWebSocket()
}
- eventCallBack?(model)
}
func webSocketMessageData(_ data: Data){
//
import Foundation
+/// 语音转文字事件
+class MSSttEventHead:Codable{
+ var header:MSSttEvent = MSSttEvent()
+}
+
/// 语音识别结果模型
public class MSSttEvent:Codable{
/// 事件
import Foundation
+// https://apifox.com/apidoc/shared-054b7e2c-cf4b-4e2b-875c-79fda14ddbbf?pwd=xRzzNg7l
+// 访问密码: xRzzNg7l
//let wsBaseURL = "ws://121.40.67.151:9099/"
-let httpBaseURL = "http://121.40.67.151:9099/"
+//let httpBaseURL = "http://121.40.67.151:9099/"
let wsHeartBeatTime = 2.0
let wsBaseURL = "ws://118.145.158.207:80/"
-//let httpBaseURL = "http://118.145.158.207:80/"
+let httpBaseURL = "http://118.145.158.207:80/"
+
+
+/// Ai平台类型
+public enum MSPlatform {
+ /// 阿里云
+ case aliyun
+ /// 火山
+ case huoshan
+// /// 文心一言
+// case yiyan
+// /// 豆包
+// case doubao
+// /// Kimi
+// case kimi
+ /// chatGPT
+ case chatGPT
+
+ internal var value:String{
+ switch self {
+ case .aliyun:
+ return "aliyun"
+ case .huoshan:
+ return "huoshan"
+// case .yiyan:
+// return "yiyan"
+// case .doubao:
+// return "doubao"
+// case .kimi:
+// return "kimi"
+ case .chatGPT:
+ return "chatGPT"
+
+ }
+ }
+}
+
+
+
/// SDK 管理类
public class MixSdk:NSObject {
private override init() {
super.init()
-
-// https://apifox.com/apidoc/shared-054b7e2c-cf4b-4e2b-875c-79fda14ddbbf?pwd=xRzzNg7l
-// 访问密码: xRzzNg7l
-
AiAudioDecoder.sharedInstance().startSBCDecodec()
}
public var logs: [String] { Logger.logs }
/// SDK 版本号
- public let version: String = "1.0.4"
+ public let version: String = "1.0.5"
/// 默认为 false
public var isDebug: Bool = false {
didSet { Logger.isDebug = isDebug }
/// 语音转文字
public let stt = MSStt()
+ /// chatGpt
+ public let chatGpt = MSChatGpt()
+
- /// 设置aiKey
+ /// 设置平台
/// - Parameters:
- /// - chanel: 渠道,例如"CHAT GPT"
+ /// - platform: 使用的平台
/// - key: key值
- public func setAiKey(chanel:String,key:String){
- Logger.log(chanel,key)
+ public func setPlatform(_ platform:MSPlatform,key:String? = nil){
+ Logger.log("\nplatform = \(platform) \n key= \(key ?? "")")
+ aiPlatform = platform
+ aiKey = key
}
+ /// ai平台
+ public var aiPlatform:MSPlatform = .aliyun
+ /// aikey
+ public var aiKey:String? = ""
+
// /// 鉴权
// public lazy var auth:MSAuth = {
// return MSAuth()
## 介绍
-- 当前版本:v1.0.4
-- 更新内容20240627:
- 1. 新增设置AIKey接口。
- 1. 大会话模型、语音转文字、文字转语音增加连接状态回调
+- 当前版本:v1.0.5
+- 更新内容20240706:
+ 1. 新增chatGpt支持。
+ 1. 新增对大话模型平台切换。
## 环境要求
## 使用流程
-### 添加权限
-```swift
-info.plist中添加麦克风权限:
-
-Privacy - Microphone Usage Description
-
-```
### SDK初始化
## 大模型对话
+
+
+```swift
+/// SDK 管理类
+public class MixSdk : NSObject {
+ /// 对话模型平台切换
+ /// - Parameters:
+ /// - platform: 使用的平台
+ /// - key: key值
+ public func setPlatform(_ platform: MixSdk.MSPlatform, key: String? = nil)
+}
+```
+
+
+
```swift
/// 大模型对话管理类
public class MSChat {
/// - Parameter content: 内容
public func send(content: String)
}
+
+```
+
+## ChatGpt
+
+```swift
+/// 鉴权管理类
+public class MSChatGpt {
+
+ /// 发送对话内容
+ /// - Parameters:
+ /// - content: 内容
+ /// - completeHandler: 结果会调皮
+ public func send(content: String, completeHandler: @escaping MixSdk.MSChatGptCallBack)
+}
```
/// 语音转文字
public var stt: MixSdk.MSStt
- /// 设置aiKey
+ /// chatGpt
+ public let chatGpt: MixSdk.MSChatGpt
+
+ /// 设置平台
/// - Parameters:
- /// - chanel: 渠道,例如"CHAT GPT"
+ /// - platform: 使用的平台
/// - key: key值
- public func setAiKey(chanel: String, key: String)
+ public func setPlatform(_ platform: MixSdk.MSPlatform, key: String? = nil)
+
+ /// ai平台
+ public var aiPlatform: MixSdk.MSPlatform
+
+ /// aikey
+ public var aiKey: String?
}
```
}
```
+## MSChatGptModel
+
+```swift
+/// 回复的消息体
+public class MSChatGptMessage : Codable {
+
+ /// 角色
+ public var role: String
+
+ /// 内容
+ public var content: String
+}
+
+public class MSChatGptModel : Codable {
+
+ /// id
+ public var id: String
+
+ ///
+ public var object: String
+
+ /// 创建的时间的时间戳
+ public var created: Int
+
+ /// 使用的模型
+ public var model: String
+
+ /// 消息体
+ public var choices: [MixSdk.MSChatGptChoices]
+
+ /// token使用情况
+ public var usage: MixSdk.MSChatGptUsage
+}
+
+/// token使用情况
+public class MSChatGptUsage : Codable {
+
+ public var prompt_tokens: Int
+
+ public var completion_tokens: Int
+
+ public var total_tokens: Int
+}
+```
+
+
+
### MSSttEvent
```swift