@@ -5,7 +5,6 @@ struct ChatSettingsView: View {
55 class Settings : ObservableObject {
66 static let availableLocalizedLocales = Locale . availableLocalizedLocales
77 @AppStorage ( \. chatGPTLanguage) var chatGPTLanguage
8- @AppStorage ( \. chatGPTMaxToken) var chatGPTMaxToken
98 @AppStorage ( \. chatGPTTemperature) var chatGPTTemperature
109 @AppStorage ( \. chatGPTMaxMessageCount) var chatGPTMaxMessageCount
1110 @AppStorage ( \. chatFontSize) var chatFontSize
@@ -14,13 +13,12 @@ struct ChatSettingsView: View {
1413 var maxFocusedCodeLineCount
1514 @AppStorage ( \. useCodeScopeByDefaultInChatContext)
1615 var useCodeScopeByDefaultInChatContext
17-
18- @AppStorage ( \. chatFeatureProvider) var chatFeatureProvider
19- @AppStorage ( \. chatGPTModel) var chatGPTModel
16+ @AppStorage ( \. defaultChatFeatureChatModelId) var defaultChatFeatureChatModelId
2017 @AppStorage ( \. defaultChatSystemPrompt) var defaultChatSystemPrompt
2118 @AppStorage ( \. chatSearchPluginMaxIterations) var chatSearchPluginMaxIterations
22-
23- @AppStorage ( \. embeddingFeatureProvider) var embeddingFeatureProvider
19+ @AppStorage ( \. defaultChatFeatureEmbeddingModelId) var defaultChatFeatureEmbeddingModelId
20+ @AppStorage ( \. chatModels) var chatModels
21+ @AppStorage ( \. embeddingModels) var embeddingModels
2422
2523 init ( ) { }
2624 }
@@ -47,18 +45,34 @@ struct ChatSettingsView: View {
4745 Form {
4846 Picker (
4947 " Chat Feature Provider " ,
50- selection: $settings. chatFeatureProvider
48+ selection: $settings. defaultChatFeatureChatModelId
5149 ) {
52- Text ( " OpenAI " ) . tag ( ChatFeatureProvider . openAI)
53- Text ( " Azure OpenAI " ) . tag ( ChatFeatureProvider . azureOpenAI)
50+ if !settings. chatModels
51+ . contains ( where: { $0. id == settings. defaultChatFeatureChatModelId } )
52+ {
53+ Text ( settings. chatModels. first? . name ?? " No Model Found " )
54+ . tag ( settings. defaultChatFeatureChatModelId)
55+ }
56+
57+ ForEach ( settings. chatModels, id: \. id) { chatModel in
58+ Text ( chatModel. name) . tag ( chatModel. id)
59+ }
5460 }
55-
61+
5662 Picker (
5763 " Embedding Feature Provider " ,
58- selection: $settings. embeddingFeatureProvider
64+ selection: $settings. defaultChatFeatureEmbeddingModelId
5965 ) {
60- Text ( " OpenAI " ) . tag ( EmbeddingFeatureProvider . openAI)
61- Text ( " Azure OpenAI " ) . tag ( EmbeddingFeatureProvider . azureOpenAI)
66+ if !settings. embeddingModels
67+ . contains ( where: { $0. id == settings. defaultChatFeatureEmbeddingModelId } )
68+ {
69+ Text ( settings. embeddingModels. first? . name ?? " No Model Found " )
70+ . tag ( settings. defaultChatFeatureEmbeddingModelId)
71+ }
72+
73+ ForEach ( settings. embeddingModels, id: \. id) { embeddingModel in
74+ Text ( embeddingModel. name) . tag ( embeddingModel. id)
75+ }
6276 }
6377
6478 if #available( macOS 13 . 0 , * ) {
@@ -72,39 +86,6 @@ struct ChatSettingsView: View {
7286 }
7387 }
7488
75- let binding = Binding (
76- get: { String ( settings. chatGPTMaxToken) } ,
77- set: {
78- if let selectionMaxToken = Int ( $0) {
79- settings. chatGPTMaxToken = selectionMaxToken
80- } else {
81- settings. chatGPTMaxToken = 0
82- }
83- }
84- )
85- HStack {
86- Stepper (
87- value: $settings. chatGPTMaxToken,
88- in: 0 ... Int . max,
89- step: 1
90- ) {
91- Text ( " Max Token (Including Reply) " )
92- . multilineTextAlignment ( . trailing)
93- }
94- TextField ( text: binding) {
95- EmptyView ( )
96- }
97- . labelsHidden ( )
98- . textFieldStyle ( . roundedBorder)
99- . foregroundColor ( maxTokenOverLimit ? . red : . primary)
100-
101- if let model = ChatGPTModel ( rawValue: settings. chatGPTModel) ,
102- settings. chatFeatureProvider == . openAI
103- {
104- Text ( " Max: \( model. maxToken) " )
105- }
106- }
107-
10889 HStack {
10990 Slider ( value: $settings. chatGPTTemperature, in: 0 ... 2 , step: 0.1 ) {
11091 Text ( " Temperature " )
@@ -141,14 +122,6 @@ struct ChatSettingsView: View {
141122 . lineLimit ( 6 )
142123 }
143124 . padding ( . vertical, 4 )
144- } . onAppear {
145- checkMaxToken ( )
146- } . onChange ( of: settings. chatFeatureProvider) { _ in
147- checkMaxToken ( )
148- } . onChange ( of: settings. chatGPTModel) { _ in
149- checkMaxToken ( )
150- } . onChange ( of: settings. chatGPTMaxToken) { _ in
151- checkMaxToken ( )
152125 }
153126 }
154127
@@ -251,19 +224,6 @@ struct ChatSettingsView: View {
251224 )
252225 }
253226 }
254-
255- func checkMaxToken( ) {
256- switch settings. chatFeatureProvider {
257- case . openAI:
258- if let model = ChatGPTModel ( rawValue: settings. chatGPTModel) {
259- maxTokenOverLimit = model. maxToken < settings. chatGPTMaxToken
260- } else {
261- maxTokenOverLimit = false
262- }
263- case . azureOpenAI:
264- maxTokenOverLimit = false
265- }
266- }
267227}
268228
269229// MARK: - Preview
0 commit comments