Skip to content

Commit 8a99568

Browse files
committed
Add gemini support in UI
1 parent 4f00c12 commit 8a99568

4 files changed

Lines changed: 51 additions & 8 deletions

File tree

Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,26 @@ struct ChatModelEdit: ReducerProtocol {
114114
return .none
115115

116116
case .checkSuggestedMaxTokens:
117-
guard state.format == .openAI,
118-
let knownModel = ChatGPTModel(rawValue: state.modelName)
119-
else {
117+
switch state.format {
118+
case .openAI:
119+
if let knownModel = ChatGPTModel(rawValue: state.modelName) {
120+
state.suggestedMaxTokens = knownModel.maxToken
121+
} else {
122+
state.suggestedMaxTokens = nil
123+
}
124+
return .none
125+
case .googleAI:
126+
if let knownModel = GoogleGenerativeAIModel(rawValue: state.modelName) {
127+
state.suggestedMaxTokens = knownModel.maxToken
128+
} else {
129+
state.suggestedMaxTokens = nil
130+
}
131+
return .none
132+
default:
120133
state.suggestedMaxTokens = nil
121134
return .none
122135
}
123-
state.suggestedMaxTokens = knownModel.maxToken
124-
return .none
125-
136+
126137
case .apiKeySelection:
127138
return .none
128139

Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,27 @@ struct ChatModelEditView: View {
277277
@ViewBuilder
278278
var googleAI: some View {
279279
apiKeyNamePicker
280-
280+
281281
WithViewStore(
282282
store,
283283
removeDuplicates: { $0.modelName == $1.modelName }
284284
) { viewStore in
285285
TextField("Model Name", text: viewStore.$modelName)
286+
.overlay(alignment: .trailing) {
287+
Picker(
288+
"",
289+
selection: viewStore.$modelName,
290+
content: {
291+
if GoogleGenerativeAIModel(rawValue: viewStore.state.modelName) == nil {
292+
Text("Custom Model").tag(viewStore.state.modelName)
293+
}
294+
ForEach(GoogleGenerativeAIModel.allCases, id: \.self) { model in
295+
Text(model.rawValue).tag(model.rawValue)
296+
}
297+
}
298+
)
299+
.frame(width: 20)
300+
}
286301
}
287302

288303
maxTokensTextField

Pro

Submodule Pro updated from 26f9ee8 to eeae9b4
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Foundation
2+
3+
public enum GoogleGenerativeAIModel: String {
4+
case geminiPro = "gemini-pro"
5+
}
6+
7+
public extension GoogleGenerativeAIModel {
8+
var maxToken: Int {
9+
switch self {
10+
case .geminiPro:
11+
return 32768
12+
}
13+
}
14+
}
15+
16+
extension GoogleGenerativeAIModel: CaseIterable {}
17+

0 commit comments

Comments
 (0)