import AppKit import Client import OpenAIService import Preferences import SuggestionModel import SwiftUI final class AzureViewSettings: ObservableObject { @AppStorage(\.azureOpenAIAPIKey) var azureOpenAIAPIKey: String @AppStorage(\.azureOpenAIBaseURL) var azureOpenAIBaseURL: String @AppStorage(\.azureChatGPTDeployment) var azureChatGPTDeployment: String @AppStorage(\.azureEmbeddingDeployment) var azureEmbeddingDeployment: String init() {} } struct AzureView: View { @Environment(\.toast) var toast @State var isTesting = false @StateObject var settings = AzureViewSettings() var body: some View { Form { SecureField(text: $settings.azureOpenAIAPIKey, prompt: Text("")) { Text("OpenAI Service API Key") } .textFieldStyle(.roundedBorder) TextField( text: $settings.azureOpenAIBaseURL, prompt: Text("https://XXXXXX.openai.azure.com") ) { Text("OpenAI Service Base URL") }.textFieldStyle(.roundedBorder) HStack { TextField( text: $settings.azureChatGPTDeployment, prompt: Text("") ) { Text("Chat Model Deployment Name") }.textFieldStyle(.roundedBorder) Button("Test") { Task { @MainActor in isTesting = true defer { isTesting = false } do { let reply = try await ChatGPTService( configuration: UserPreferenceChatGPTConfiguration() .overriding(.init(featureProvider: .azureOpenAI)) ) .sendAndWait(content: "Hello", summary: nil) toast(Text("ChatGPT replied: \(reply ?? "N/A")"), .info) } catch { toast(Text(error.localizedDescription), .error) } } } .disabled(isTesting) } HStack { TextField( text: $settings.azureEmbeddingDeployment, prompt: Text("") ) { Text("Embedding Model Deployment Name") }.textFieldStyle(.roundedBorder) } } } } struct AzureView_Previews: PreviewProvider { static var previews: some View { VStack(alignment: .leading, spacing: 8) { AzureView() } .frame(height: 800) .padding(.all, 8) } }