X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/a606686934b4028c29dca8e9dae6b2e188cee9c5..723f6e18adc6482ed913e1618c8a76e981720c2b:/probe.go?ds=sidebyside diff --git a/probe.go b/probe.go index 69d81d1..b004829 100644 --- a/probe.go +++ b/probe.go @@ -7,7 +7,7 @@ import ( "errors" "fmt" "io" - "log" + "log/slog" "os" "path/filepath" "strconv" @@ -18,13 +18,16 @@ const ( // probeName is the agent name of a probe run. The cache key comes from // it. probeName = "Probe" + + // probeCallLimit is the most model calls of a probe run. + probeCallLimit = 660 ) // probe runs "onechat probe LOG COUNT [BUILDS]". It appends the first COUNT // messages of LOG, one JSON object {kind, text} per line, to a new chat in // probe/ in the data directory, and builds its tree with the real compactor. // Before each user message it waits for the builds, as a turn does. It stops at -// the first failed call, after buildCallLimit calls, or when the used percent +// the first failed call, after probeCallLimit calls, or when the used percent // of a quota window grows by more than buildQuotaLimit points. At the end it // reports the calls, the time per call, the calls at once, the cached share, // the quota, the retries, and the line sizes. BUILDS, from 1 to buildMax, @@ -97,15 +100,16 @@ func probe(ctx context.Context, args []string, out io.Writer) (err error) { usagePath := filepath.Join(root, "usage.jsonl") client := newModelClient(address, auth, "onechat-"+probeName, usagePath) - client.LimitCalls(buildCallLimit) + client.LimitCalls(probeCallLimit) + summarizer := ProbeSlotSummarizer{ - inner: newCompactor(client, probePrompt, config.Compactor), + inner: newCompactor(client, probePrompt, config.Compactor, promptTools()), slots: make(chan struct{}, builds), } // The report of the probe counts the failed calls, so the lines of the // failed builds are not needed. - memory, err := openMemory(ctx, root, time.Now, summarizer, log.New(io.Discard, "", 0)) + memory, err := openMemory(ctx, root, time.Now, summarizer, slog.New(slog.DiscardHandler)) if err != nil { return fmt.Errorf("open probe memory: %w", err) } @@ -180,8 +184,10 @@ func probeReadLog(path string, count int) (entries []DatedMessage, err error) { scanner := bufio.NewScanner(file) scanner.Buffer(make([]byte, 64*1024), buildLineBytes) + for len(entries) < count && scanner.Scan() { var entry DatedMessage + err = json.Unmarshal(scanner.Bytes(), &entry) if err != nil { return nil, fmt.Errorf("probe log line %d: %w", len(entries)+1, err)