@@ -4,7 +4,7 @@ import SwiftUI
44
55struct ChatTabItemView : View {
66 @ObservedObject var chat : ChatProvider
7-
7+
88 var body : some View {
99 Text ( chat. title)
1010 }
@@ -13,6 +13,9 @@ struct ChatTabItemView: View {
1313struct ChatContextMenu : View {
1414 @ObservedObject var chat : ChatProvider
1515 @AppStorage ( \. customCommands) var customCommands
16+ @AppStorage ( \. chatModels) var chatModels
17+ @AppStorage ( \. defaultChatFeatureChatModelId) var defaultChatModelId
18+ @AppStorage ( \. chatGPTTemperature) var defaultTemperature
1619
1720 var body : some View {
1821 currentSystemPrompt
@@ -21,6 +24,11 @@ struct ChatContextMenu: View {
2124
2225 Divider ( )
2326
27+ chatModel
28+ temperature
29+
30+ Divider ( )
31+
2432 customCommandMenu
2533 }
2634
@@ -52,6 +60,89 @@ struct ChatContextMenu: View {
5260 }
5361 }
5462
63+ @ViewBuilder
64+ var chatModel : some View {
65+ Menu ( " Chat Model " ) {
66+ Button ( action: {
67+ chat. chatModelId = nil
68+ } ) {
69+ HStack {
70+ if let defaultModel = chatModels. first ( where: { $0. id == defaultChatModelId } ) {
71+ Text ( " Default ( \( defaultModel. name) ) " )
72+ if chat. chatModelId == nil {
73+ Image ( systemName: " checkmark " )
74+ }
75+ } else {
76+ Text ( " No Model Available " )
77+ }
78+ }
79+ }
80+
81+ if let id = chat. chatModelId,
82+ !chatModels. map ( \. id) . contains ( id)
83+ {
84+ Button ( action: {
85+ chat. chatModelId = nil
86+ chat. objectWillChange. send ( )
87+ } ) {
88+ HStack {
89+ Text ( " Default (Selected Model Not Found) " )
90+ Image ( systemName: " checkmark " )
91+ }
92+ }
93+ }
94+
95+ Divider ( )
96+
97+ ForEach ( chatModels, id: \. id) { model in
98+ Button ( action: {
99+ chat. chatModelId = model. id
100+ chat. objectWillChange. send ( )
101+ } ) {
102+ HStack {
103+ Text ( model. name)
104+ if model. id == chat. chatModelId {
105+ Image ( systemName: " checkmark " )
106+ }
107+ }
108+ }
109+ }
110+ }
111+ }
112+
113+ @ViewBuilder
114+ var temperature : some View {
115+ Menu ( " Temperature " ) {
116+ Button ( action: {
117+ chat. temperature = nil
118+ } ) {
119+ HStack {
120+ Text (
121+ " Default ( \( defaultTemperature. formatted ( . number. precision ( . fractionLength( 1 ) ) ) ) ) "
122+ )
123+ if chat. temperature == nil {
124+ Image ( systemName: " checkmark " )
125+ }
126+ }
127+ }
128+
129+ Divider ( )
130+
131+ ForEach ( Array ( stride ( from: 0.0 , through: 2.0 , by: 0.1 ) ) , id: \. self) { value in
132+ Button ( action: {
133+ chat. temperature = value
134+ } ) {
135+ HStack {
136+ Text ( " \( value. formatted ( . number. precision ( . fractionLength( 1 ) ) ) ) " )
137+ if value == chat. temperature {
138+ Image ( systemName: " checkmark " )
139+ }
140+ }
141+ }
142+ }
143+ }
144+ }
145+
55146 var customCommandMenu : some View {
56147 Menu ( " Custom Commands " ) {
57148 ForEach (
@@ -73,3 +164,4 @@ struct ChatContextMenu: View {
73164 }
74165 }
75166}
167+
0 commit comments