(err error)
| 1491 | } |
| 1492 | |
| 1493 | func toolErrorMessage(err error) string { |
| 1494 | errResponse := err.Error() |
| 1495 | // propagate error values to the model |
| 1496 | var extErr dagql.ExtendedError |
| 1497 | if errors.As(err, &extErr) { |
| 1498 | // TODO: return a structured error object instead? |
| 1499 | var exts []string |
| 1500 | for k, v := range extErr.Extensions() { |
| 1501 | if k == "traceparent" || k == "baggage" { |
| 1502 | // silence this one |
| 1503 | continue |
| 1504 | } |
| 1505 | var ext strings.Builder |
| 1506 | fmt.Fprintf(&ext, "<%s>\n", k) |
| 1507 | |
| 1508 | switch v := v.(type) { |
| 1509 | case string: |
| 1510 | ext.WriteString(v) |
| 1511 | default: |
| 1512 | jsonBytes, err := json.Marshal(v) |
| 1513 | if err != nil { |
| 1514 | fmt.Fprintf(&ext, "error marshalling value: %s", err.Error()) |
| 1515 | } else { |
| 1516 | ext.Write(jsonBytes) |
| 1517 | } |
| 1518 | } |
| 1519 | |
| 1520 | fmt.Fprintf(&ext, "\n</%s>", k) |
| 1521 | |
| 1522 | exts = append(exts, ext.String()) |
| 1523 | } |
| 1524 | if len(exts) > 0 { |
| 1525 | sort.Strings(exts) |
| 1526 | errResponse += "\n\n" + strings.Join(exts, "\n\n") |
| 1527 | } |
| 1528 | } |
| 1529 | return errResponse |
| 1530 | } |
| 1531 | |
| 1532 | func (m *MCP) saveTool(srv *dagql.Server) LLMTool { |
| 1533 | desc := "Save an output that has been requested by the user." |
no test coverage detected