-
-
Notifications
You must be signed in to change notification settings - Fork 255
Open
Description
import OpenAISwift
import SwiftUI
final class ViewModel: ObservableObject {
init(){}
private var client: OpenAISwift?
func setup(){
client = OpenAISwift(config: OpenAISwift.Config.makeDefaultOpenAI(apiKey: "key"))
}
func send(text: String, completion: @escaping (String) -> Void) {
client?.sendCompletion(with: text, maxTokens: 500, temperature: 0.7, completionHandler: { result in
switch result {
case .success(let model):
let output = model.choices?.first?.text ?? "blank message"
print(model)
completion(output)
case .failure:
break
}
})3
}
}
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
@State var text = ""
@State var models = [String]()
var body: some View {
VStack(alignment: .leading) {
ForEach(models, id: \.self) { string in
Text(string)
}
Spacer()
HStack {
TextField("在此輸入", text: $text)
Button("送出") {
send()
}
}
}
.onAppear {
viewModel.setup()
}
.padding()
}
func send() {
guard !text.trimmingCharacters(in: .whitespaces).isEmpty else {
return
}
models.append("Me: \(text)")
viewModel.send(text: text) { response in
DispatchQueue.main.async {
self.models.append("ChatGPT: \(response)")
self.text = ""
}
}
}
}
#Preview {
ContentView()
}
Metadata
Metadata
Assignees
Labels
No labels