| 203 | } |
| 204 | |
| 205 | func formatToolCallArguments(arguments string) string { |
| 206 | if arguments == "" { |
| 207 | return "()" |
| 208 | } |
| 209 | |
| 210 | // Is is a map? |
| 211 | kv := orderedmap.New[string, any]() |
| 212 | if err := json.Unmarshal([]byte(arguments), &kv); err == nil { |
| 213 | if kv.Len() == 0 { |
| 214 | return "()" |
| 215 | } |
| 216 | |
| 217 | var ( |
| 218 | parts []string |
| 219 | multiline bool |
| 220 | ) |
| 221 | |
| 222 | for key, value := range kv.FromOldest() { |
| 223 | formatted := formatJSONValue(key, value) |
| 224 | parts = append(parts, formatted) |
| 225 | |
| 226 | multiline = multiline || strings.Contains(formatted, "\n") |
| 227 | } |
| 228 | |
| 229 | if len(parts) == 1 && !multiline { |
| 230 | return fmt.Sprintf("(%s)", parts[0]) |
| 231 | } |
| 232 | |
| 233 | return fmt.Sprintf("(\n %s\n)", strings.Join(parts, "\n ")) |
| 234 | } |
| 235 | |
| 236 | // Maybe some other JSON type? |
| 237 | var parsed any |
| 238 | if err := json.Unmarshal([]byte(arguments), &parsed); err == nil { |
| 239 | formatted, _ := json.MarshalIndent(parsed, "", " ") |
| 240 | return fmt.Sprintf("(%s)", string(formatted)) |
| 241 | } |
| 242 | |
| 243 | // JSON parsing failed |
| 244 | return fmt.Sprintf("(%s)", arguments) |
| 245 | } |
| 246 | |
| 247 | func formatToolCallResponse(response string) string { |
| 248 | if response == "" { |