X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/790279faf0fda789d93a75f6f5996e65d5de4a18..c781f79f3c8cb9a7577ee1574d196988da2719b3:/probe.go?ds=sidebyside diff --git a/probe.go b/probe.go index 3781cd3..a1ee38d 100644 --- a/probe.go +++ b/probe.go @@ -23,6 +23,28 @@ const ( probeCallLimit = 660 ) +// ProbeSlotSummarizer lets at most cap(slots) builds call inner at once. A +// build past the limit waits for a slot. +type ProbeSlotSummarizer struct { + inner Summarizer + slots chan struct{} +} + +// Summarize waits for a slot and builds the node with inner. +func (s ProbeSlotSummarizer) Summarize(ctx context.Context, task Task) (string, error) { + select { + case s.slots <- struct{}{}: + case <-ctx.Done(): + return "", ctx.Err() + } + + defer func() { + <-s.slots + }() + + return s.inner.Summarize(ctx, task) +} + // 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. @@ -103,7 +125,7 @@ func probe(ctx context.Context, args []string, out io.Writer) (err error) { client.LimitCalls(probeCallLimit) summarizer := ProbeSlotSummarizer{ - inner: newCompactor(client, probePrompt, config.Compactor), + inner: newCompactor(client, probePrompt, config.Compactor, promptTools(), &ImageStore{dir: filepath.Join(dir, imageDirName)}), slots: make(chan struct{}, builds), } @@ -145,28 +167,6 @@ func probe(ctx context.Context, args []string, out io.Writer) (err error) { return nil } -// ProbeSlotSummarizer lets at most cap(slots) builds call inner at once. A -// build past the limit waits for a slot. -type ProbeSlotSummarizer struct { - inner Summarizer - slots chan struct{} -} - -// Summarize waits for a slot and builds the node with inner. -func (s ProbeSlotSummarizer) Summarize(ctx context.Context, task Task) (string, error) { - select { - case s.slots <- struct{}{}: - case <-ctx.Done(): - return "", ctx.Err() - } - - defer func() { - <-s.slots - }() - - return s.inner.Summarize(ctx, task) -} - // probeReadLog reads the first count messages of the probe log at path. Source // dates are ignored because a probe uses its own clock. func probeReadLog(path string, count int) (entries []DatedMessage, err error) {