Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,8 @@ func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []Agen
}

func (a *agent) createPrompt(system, prompt string, messages []Message, files ...FilePart) (Prompt, error) {
if prompt == "" {
// Prompt can't be empty if either a) there are no historical messages or b) there are files to handle.
if (len(messages) == 0 || len(files) > 0) && prompt == "" {
return nil, &Error{Title: "invalid argument", Message: "prompt can't be empty"}
}

Expand All @@ -992,7 +993,9 @@ func (a *agent) createPrompt(system, prompt string, messages []Message, files ..
preparedPrompt = append(preparedPrompt, NewSystemMessage(system))
}
preparedPrompt = append(preparedPrompt, messages...)
preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...))
if prompt != "" {
preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...))
}
return preparedPrompt, nil
}

Expand Down
35 changes: 30 additions & 5 deletions agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -530,13 +530,38 @@ func TestAgent_Generate_EmptyPrompt(t *testing.T) {
model := &mockLanguageModel{}
agent := NewAgent(model)

result, err := agent.Generate(context.Background(), AgentCall{
Prompt: "", // Empty prompt should cause error
t.Run("fails without historical messages", func(t *testing.T) {
result, err := agent.Generate(context.Background(), AgentCall{
Prompt: "",
})
require.Error(t, err)
require.Nil(t, result)
require.Contains(t, err.Error(), "invalid argument: prompt can't be empty")
})

t.Run("fails when there are files even with historical messages", func(t *testing.T) {
result, err := agent.Generate(context.Background(), AgentCall{
Prompt: "",
Messages: []Message{
{Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}},
},
Files: []FilePart{{Filename: "test.txt", Data: []byte("test"), MediaType: "text/plain"}},
})
require.Error(t, err)
require.Nil(t, result)
require.Contains(t, err.Error(), "invalid argument: prompt can't be empty")
})

require.Error(t, err)
require.Nil(t, result)
require.Contains(t, err.Error(), "invalid argument: prompt can't be empty")
t.Run("succeeds if there are historical messages and no files", func(t *testing.T) {
result, err := agent.Generate(context.Background(), AgentCall{
Prompt: "",
Messages: []Message{
{Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}},
},
})
require.NoError(t, err)
require.NotNil(t, result)
})
}

// Test with system prompt
Expand Down