fix: improve error handling and nil consistency in FormatArgsJSON
- Use fmt.Sprintf fallback instead of {} on encoding errors
- Normalize nil args to {} in FormatArgsJSON for consistent output
- Update tests to expect {} instead of null for nil args
Based on PR #2670 review feedback from afjcjsbx
This commit is contained in:
parent
97b1c3efec
commit
8dca2a1319
4 changed files with 9 additions and 7 deletions
|
|
@ -172,10 +172,6 @@ func toolFeedbackExplanationFromMessages(messages []providers.Message) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func toolFeedbackArgsPreview(args map[string]any, maxLen int) string {
|
func toolFeedbackArgsPreview(args map[string]any, maxLen int) string {
|
||||||
if args == nil {
|
|
||||||
args = map[string]any{}
|
|
||||||
}
|
|
||||||
|
|
||||||
argsJSON := utils.FormatArgsJSON(args, true, false)
|
argsJSON := utils.FormatArgsJSON(args, true, false)
|
||||||
return utils.Truncate(argsJSON, maxLen)
|
return utils.Truncate(argsJSON, maxLen)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ toolLoop:
|
||||||
feedbackMsg := utils.FormatToolFeedbackMessage(
|
feedbackMsg := utils.FormatToolFeedbackMessage(
|
||||||
toolName,
|
toolName,
|
||||||
toolFeedbackExplanation,
|
toolFeedbackExplanation,
|
||||||
toolFeedbackArgsPreview(toolArgs, toolFeedbackMaxLen),
|
toolFeedbackArgsPreview(toolArgs, toolFeedbackMaxLen),
|
||||||
)
|
)
|
||||||
fbCtx, fbCancel := context.WithTimeout(turnCtx, 3*time.Second)
|
fbCtx, fbCancel := context.WithTimeout(turnCtx, 3*time.Second)
|
||||||
_ = al.bus.PublishOutbound(fbCtx, outboundMessageForTurnWithKind(ts, feedbackMsg, messageKindToolFeedback))
|
_ = al.bus.PublishOutbound(fbCtx, outboundMessageForTurnWithKind(ts, feedbackMsg, messageKindToolFeedback))
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,11 @@ import (
|
||||||
const ToolFeedbackContinuationHint = "Continuing the current task."
|
const ToolFeedbackContinuationHint = "Continuing the current task."
|
||||||
|
|
||||||
func FormatArgsJSON(args map[string]any, prettyPrint, disableEscapeHTML bool) string {
|
func FormatArgsJSON(args map[string]any, prettyPrint, disableEscapeHTML bool) string {
|
||||||
|
// Normalize nil to empty map for consistent output
|
||||||
|
if args == nil {
|
||||||
|
args = map[string]any{}
|
||||||
|
}
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
enc := json.NewEncoder(&buf)
|
enc := json.NewEncoder(&buf)
|
||||||
if prettyPrint {
|
if prettyPrint {
|
||||||
|
|
@ -19,7 +24,8 @@ func FormatArgsJSON(args map[string]any, prettyPrint, disableEscapeHTML bool) st
|
||||||
enc.SetEscapeHTML(false)
|
enc.SetEscapeHTML(false)
|
||||||
}
|
}
|
||||||
if err := enc.Encode(args); err != nil {
|
if err := enc.Encode(args); err != nil {
|
||||||
return "{}"
|
// Fallback to fmt.Sprintf to preserve visibility of problematic args
|
||||||
|
return fmt.Sprintf("%v", args)
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(buf.String())
|
return strings.TrimSpace(buf.String())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ func TestFormatArgsJSON_EscapeHTMLByDefault(t *testing.T) {
|
||||||
|
|
||||||
func TestFormatArgsJSON_NilArgs(t *testing.T) {
|
func TestFormatArgsJSON_NilArgs(t *testing.T) {
|
||||||
got := FormatArgsJSON(nil, false, false)
|
got := FormatArgsJSON(nil, false, false)
|
||||||
want := `null`
|
want := `{}`
|
||||||
if got != want {
|
if got != want {
|
||||||
t.Fatalf("FormatArgsJSON() nil = %q, want %q", got, want)
|
t.Fatalf("FormatArgsJSON() nil = %q, want %q", got, want)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue