want string
}{
{
- name: "no calls",
+ name: "continues without recorded calls",
records: nil,
want: "",
},
{
- name: "growth within the limit",
+ name: "continues within the quota limit",
records: []ModelUsageRecord{quota("10", "40"), quota("25", "41")},
want: "",
},
{
- name: "growth over the limit",
+ name: "stops above the quota limit",
records: []ModelUsageRecord{quota("10", "40"), quota("12", "55.5")},
want: "x-codex-secondary-used-percent grew from 40 to 55.5",
},
{
- name: "failed call",
+ name: "stops after a failed call",
records: []ModelUsageRecord{quota("10", "40"), {
Status: 400,
Error: "model call: HTTP 400",
require.Greater(t, len(records), int(buildQuotaLimit))
var report strings.Builder
+
require.NoError(t, buildWriteReport(&report, appended, stop, records, sizes))
require.Contains(t, report.String(), "stopped early: ")
require.Contains(t, report.String(), "cached (80.0%)")
func TestBuildRunWaitsOnlyBeforeUserMessages(t *testing.T) {
gate := make(chan struct{})
+
var mutex sync.Mutex
+
running, most := 0, 0
server := newModelFake(t)
server.reply = func(w http.ResponseWriter, _ ModelFakeCall) {
mutex.Lock()
+
running++
most = max(most, running)
mutex.Unlock()
<-gate
mutex.Lock()
+
running--
mutex.Unlock()
root := t.TempDir()
usagePath := filepath.Join(root, "usage.jsonl")
client := newModelClient(server.URL, ModelAPIKey(modelTestKey), "onechat-"+probeName, usagePath)
- memory, err := openMemory(t.Context(), root, newTestClock().Now, newCompactor(client, probePrompt, defaultConfig().Compactor), discardLog())
+ memory, err := openMemory(t.Context(), root, newTestClock().Now, newCompactor(client, probePrompt, defaultConfig().Compactor, promptTools(), &ImageStore{dir: t.TempDir()}), discardLog())
require.NoError(t, err)
return &BuildRun{