diff --git a/agent.go b/agent.go index f7672b210..111d0115b 100644 --- a/agent.go +++ b/agent.go @@ -986,17 +986,36 @@ 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 + // Check first message for system role + 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 + } + } + } + // Rewrite system role with main role of agent if it exist if system != "" { - preparedPrompt = append(preparedPrompt, NewSystemMessage(system)) + newsystem = system + } + + 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 }