llm/ant: convert dumpText constant to dump-ant-calls command line flag
Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: sd58268f97ed95de8k
diff --git a/llm/ant/ant.go b/llm/ant/ant.go
index 2afc69f..0b65d48 100644
--- a/llm/ant/ant.go
+++ b/llm/ant/ant.go
@@ -59,11 +59,12 @@
// Service provides Claude completions.
// Fields should not be altered concurrently with calling any method on Service.
type Service struct {
- HTTPC *http.Client // defaults to http.DefaultClient if nil
- URL string // defaults to DefaultURL if empty
- APIKey string // must be non-empty
- Model string // defaults to DefaultModel if empty
- MaxTokens int // defaults to DefaultMaxTokens if zero
+ HTTPC *http.Client // defaults to http.DefaultClient if nil
+ URL string // defaults to DefaultURL if empty
+ APIKey string // must be non-empty
+ Model string // defaults to DefaultModel if empty
+ MaxTokens int // defaults to DefaultMaxTokens if zero
+ DumpAntCalls bool // whether to dump request/response text to files for debugging; defaults to false
}
var _ llm.Service = (*Service)(nil)
@@ -209,13 +210,8 @@
TokenEfficientToolUse bool `json:"-"` // DO NOT USE, broken on Anthropic's side as of 2025-02-28
}
-const dumpText = false // debugging toggle to dump raw communications with Claude using dumpToFile
-
// dumpToFile writes the content to a timestamped file in ~/.cache/sketch/, with typ in the filename.
func dumpToFile(typ string, content []byte) error {
- if !dumpText {
- return nil
- }
homeDir, err := os.UserHomeDir()
if err != nil {
return err
@@ -444,7 +440,7 @@
var payload []byte
var err error
- if dumpText || testing.Testing() {
+ if s.DumpAntCalls || testing.Testing() {
payload, err = json.MarshalIndent(request, "", " ")
} else {
payload, err = json.Marshal(request)
@@ -476,8 +472,10 @@
slog.WarnContext(ctx, "anthropic request sleep before retry", "sleep", sleep, "attempts", attempts)
time.Sleep(sleep)
}
- if err := dumpToFile("request", payload); err != nil {
- slog.WarnContext(ctx, "failed to dump request to file", "error", err)
+ if s.DumpAntCalls {
+ if err := dumpToFile("request", payload); err != nil {
+ slog.WarnContext(ctx, "failed to dump request to file", "error", err)
+ }
}
req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(payload))
if err != nil {
@@ -518,8 +516,10 @@
switch {
case resp.StatusCode == http.StatusOK:
- if err := dumpToFile("response", buf); err != nil {
- slog.WarnContext(ctx, "failed to dump response to file", "error", err)
+ if s.DumpAntCalls {
+ if err := dumpToFile("response", buf); err != nil {
+ slog.WarnContext(ctx, "failed to dump response to file", "error", err)
+ }
}
var response response
err = json.NewDecoder(bytes.NewReader(buf)).Decode(&response)