fix: force summary on empty tool response
This commit is contained in:
parent
62d2c5eeed
commit
ed4aabe00b
1 changed files with 26 additions and 0 deletions
|
|
@ -387,6 +387,32 @@ func (al *AgentLoop) runAgentLoop(ctx context.Context, opts processOptions) (str
|
|||
return "", err
|
||||
}
|
||||
|
||||
// FIX: If we used tools (iteration > 1) but got no final response, ask for a summary.
|
||||
// This happens when the model thinks "Action completed" is enough and stops generating.
|
||||
if finalContent == "" && iteration > 1 {
|
||||
logger.InfoCF("agent", "Empty response after tool use, forcing summary", nil)
|
||||
|
||||
// Append a system instruction to force a response
|
||||
forceSummaryMsg := providers.Message{
|
||||
Role: "user",
|
||||
Content: "The tools have finished execution. Please provide a concise final answer to the user's original request based on the tool outputs above.",
|
||||
}
|
||||
messages = append(messages, forceSummaryMsg)
|
||||
|
||||
// One last call without tools allowed, just for summary
|
||||
resp, err := al.provider.Chat(ctx, messages, nil, al.model, map[string]interface{}{
|
||||
"max_tokens": 4096,
|
||||
"temperature": 0.7,
|
||||
})
|
||||
if err == nil && resp.Content != "" {
|
||||
finalContent = resp.Content
|
||||
// Update iteration count to reflect this extra step
|
||||
iteration++
|
||||
} else if err != nil {
|
||||
logger.WarnCF("agent", "Failed to force summary: %v", map[string]interface{}{"error": err.Error()})
|
||||
}
|
||||
}
|
||||
|
||||
// If last tool had ForUser content and we already sent it, we might not need to send final response
|
||||
// This is controlled by the tool's Silent flag and ForUser content
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue