From d80fa091701416e2eee9c0208f5cb3c238cf90b3 Mon Sep 17 00:00:00 2001 From: ruslan Date: Thu, 18 Dec 2025 19:13:44 +0700 Subject: [PATCH 1/3] Support empty prompt when messages exist - Infer system from first system message when present - Append user message only when prompt is non-empty --- agent.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/agent.go b/agent.go index f7672b210..0f6c524d0 100644 --- a/agent.go +++ b/agent.go @@ -986,17 +986,34 @@ func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []Agen } func (a *agent) createPrompt(system, prompt string, messages []Message, files ...FilePart) (Prompt, error) { - if prompt == "" { + if prompt == "" && len(messages) < 1 { return nil, &Error{Title: "invalid argument", Message: "prompt can't be empty"} } var preparedPrompt Prompt + var newsystem string if system != "" { - preparedPrompt = append(preparedPrompt, NewSystemMessage(system)) + newsystem = system } + if messages[0].Role == MessageRoleSystem { + if len(messages[0].Content) > 0 { + if tp, ok := messages[0].Content[0].(TextPart); ok { + newsystem = tp.Text + } + } + } + + if newsystem != "" { + preparedPrompt = append(preparedPrompt, NewSystemMessage(newsystem)) + } + preparedPrompt = append(preparedPrompt, messages...) - preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...)) + + if prompt != "" { + preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...)) + } + return preparedPrompt, nil } From 36c4d4a9c13bc4737f075916811e9594b0eb8121 Mon Sep 17 00:00:00 2001 From: ruslan Date: Thu, 18 Dec 2025 19:17:01 +0700 Subject: [PATCH 2/3] Make agent system role more priority --- agent.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/agent.go b/agent.go index 0f6c524d0..df73e7aae 100644 --- a/agent.go +++ b/agent.go @@ -993,9 +993,7 @@ func (a *agent) createPrompt(system, prompt string, messages []Message, files .. var preparedPrompt Prompt var newsystem string - if system != "" { - newsystem = system - } + // Check first message for system role if messages[0].Role == MessageRoleSystem { if len(messages[0].Content) > 0 { if tp, ok := messages[0].Content[0].(TextPart); ok { @@ -1003,6 +1001,10 @@ func (a *agent) createPrompt(system, prompt string, messages []Message, files .. } } } + // Rewrite system role with main role of agent if it exist + if system != "" { + newsystem = system + } if newsystem != "" { preparedPrompt = append(preparedPrompt, NewSystemMessage(newsystem)) From c274228a2f8765cbb9f01889350937b3019ce44e Mon Sep 17 00:00:00 2001 From: ruslan Date: Thu, 18 Dec 2025 19:50:53 +0700 Subject: [PATCH 3/3] fix: checking len(messages) before checking system role --- agent.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent.go b/agent.go index df73e7aae..111d0115b 100644 --- a/agent.go +++ b/agent.go @@ -994,7 +994,7 @@ func (a *agent) createPrompt(system, prompt string, messages []Message, files .. var newsystem string // Check first message for system role - if messages[0].Role == MessageRoleSystem { + if len(messages) > 0 && messages[0].Role == MessageRoleSystem { if len(messages[0].Content) > 0 { if tp, ok := messages[0].Content[0].(TextPart); ok { newsystem = tp.Text