Skip to content

Commit 4d4402b

Browse files
authored
Merge pull request docker#575 from docker/set-system-prompt
Add /set system command to interactive mode
2 parents ab5cf78 + 38776dd commit 4d4402b

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

cmd/cli/commands/run.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func readMultilineInput(cmd *cobra.Command, scanner *bufio.Scanner) (string, err
9090
func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.Client, model string) error {
9191
usage := func() {
9292
fmt.Fprintln(os.Stderr, "Available Commands:")
93+
fmt.Fprintln(os.Stderr, " /set system Set or update the system message")
9394
fmt.Fprintln(os.Stderr, " /bye Exit")
9495
fmt.Fprintln(os.Stderr, " /?, /help Help for a command")
9596
fmt.Fprintln(os.Stderr, " /? shortcuts Help for keyboard shortcuts")
@@ -154,6 +155,7 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
154155
var sb strings.Builder
155156
var multiline bool
156157
var conversationHistory []desktop.OpenAIChatMessage
158+
var systemPrompt string
157159

158160
// Add a helper function to handle file inclusion when @ is pressed
159161
// We'll implement a basic version here that shows a message when @ is pressed
@@ -217,6 +219,16 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
217219
usage()
218220
}
219221
continue
222+
case strings.HasPrefix(line, "/set system ") || line == "/set system":
223+
// Extract the system prompt text after "/set system "
224+
systemPrompt = strings.TrimPrefix(line, "/set system ")
225+
systemPrompt = strings.TrimSpace(systemPrompt)
226+
if systemPrompt == "" {
227+
fmt.Fprintln(os.Stderr, "Cleared system message.")
228+
} else {
229+
fmt.Fprintln(os.Stderr, "Set system message.")
230+
}
231+
continue
220232
case strings.HasPrefix(line, "/exit"), strings.HasPrefix(line, "/bye"):
221233
return nil
222234
case strings.HasPrefix(line, "/"):
@@ -245,7 +257,20 @@ func generateInteractiveWithReadline(cmd *cobra.Command, desktopClient *desktop.
245257
}
246258
}()
247259

248-
assistantResponse, processedUserMessage, err := chatWithMarkdownContext(chatCtx, cmd, desktopClient, model, userInput, conversationHistory)
260+
// Build message history with system prompt prepended if set
261+
var messagesWithSystem []desktop.OpenAIChatMessage
262+
if systemPrompt == "" {
263+
messagesWithSystem = conversationHistory
264+
} else {
265+
messagesWithSystem = make([]desktop.OpenAIChatMessage, 1, 1+len(conversationHistory))
266+
messagesWithSystem[0] = desktop.OpenAIChatMessage{
267+
Role: "system",
268+
Content: systemPrompt,
269+
}
270+
messagesWithSystem = append(messagesWithSystem, conversationHistory...)
271+
}
272+
273+
assistantResponse, processedUserMessage, err := chatWithMarkdownContext(chatCtx, cmd, desktopClient, model, userInput, messagesWithSystem)
249274

250275
// Clean up signal handler
251276
signal.Stop(sigChan)

0 commit comments

Comments
 (0)