@@ -17,7 +17,8 @@ const (
1717 systemCmdPrefix = "!"
1818 systemCmdQuit = "!q"
1919 systemCmdPurgeHistory = "!p"
20- systemCmdToggleInputMode = "!m"
20+ systemCmdSelectInputMode = "!i"
21+ systemCmdSelectModel = "!m"
2122)
2223
2324type command interface {
@@ -44,18 +45,39 @@ func (c *systemCommand) run(message string) bool {
4445 case systemCmdPurgeHistory :
4546 c .chat .model .ClearHistory ()
4647 c .print ("Cleared the chat history." )
47- case systemCmdToggleInputMode :
48+ case systemCmdSelectInputMode :
49+ multiline , err := selectInputMode (c .chat .opts .Multiline )
50+ if err != nil {
51+ c .error (err )
52+ break
53+ }
54+ if multiline == c .chat .opts .Multiline {
55+ c .printSelectedCurrent ()
56+ break
57+ }
58+ c .chat .opts .Multiline = multiline
4859 if c .chat .opts .Multiline {
49- c .print ("Switched to single-line input mode." )
50- c .chat .reader .HistoryEnable ()
51- c .chat .opts .Multiline = false
52- } else {
5360 c .print ("Switched to multi-line input mode." )
5461 // disable history for multi-line messages since it is
5562 // unusable for future requests
5663 c .chat .reader .HistoryDisable ()
57- c .chat .opts .Multiline = true
64+ } else {
65+ c .print ("Switched to single-line input mode." )
66+ c .chat .reader .HistoryEnable ()
67+ }
68+ case systemCmdSelectModel :
69+ model , err := selectModel (c .chat .opts .Model , c .chat .model .ListModels ())
70+ if err != nil {
71+ c .error (err )
72+ break
73+ }
74+ if model == c .chat .opts .Model {
75+ c .printSelectedCurrent ()
76+ break
5877 }
78+ c .chat .opts .Model = model
79+ c .chat .model .SetGenerativeModel (model )
80+ c .print (fmt .Sprintf ("Selected '%s' generative model." , model ))
5981 default :
6082 c .print ("Unknown system command." )
6183 }
@@ -66,6 +88,14 @@ func (c *systemCommand) print(message string) {
6688 fmt .Printf ("%s%s\n " , c .chat .prompt .cli , message )
6789}
6890
91+ func (c * systemCommand ) printSelectedCurrent () {
92+ fmt .Printf ("%sThe selection is unchanged.\n " , c .chat .prompt .cli )
93+ }
94+
95+ func (c * systemCommand ) error (err error ) {
96+ fmt .Printf (color .Red ("%s%s\n " ), c .chat .prompt .cli , err )
97+ }
98+
6999type geminiCommand struct {
70100 chat * Chat
71101 spinner * spinner
@@ -104,7 +134,7 @@ func (c *geminiCommand) runBlocking(message string) {
104134 var buf strings.Builder
105135 for _ , candidate := range response .Candidates {
106136 for _ , part := range candidate .Content .Parts {
107- buf . WriteString ( fmt .Sprintf ( "%s" , part ) )
137+ fmt .Fprintf ( & buf , "%s" , part )
108138 }
109139 }
110140 output , err := glamour .Render (buf .String (), c .chat .opts .Style )
@@ -138,6 +168,6 @@ func (c *geminiCommand) runStreaming(message string) {
138168}
139169
140170func (c * geminiCommand ) printFlush (message string ) {
141- fmt . Fprintf ( c . writer , "%s" , message )
142- c .writer .Flush ()
171+ _ , _ = c . writer . WriteString ( message )
172+ _ = c .writer .Flush ()
143173}
0 commit comments