diff --git a/internal/agent/agent.go b/internal/agent/agent.go index fdc9b5a21fecae49cf8ed64b1f3df705a90841d0..90eabe638f5fe167a5cdedc9e9cf1e5b02a9125a 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -732,7 +732,24 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan currentSession.CompletionTokens = usage.OutputTokens currentSession.PromptTokens = 0 _, err = a.sessions.Save(genCtx, currentSession) - return err + if err != nil { + return err + } + + // Release the active request before processing queued messages so that + // Run() does not see the session as busy. + a.activeRequests.Del(sessionID) + cancel() + + // Process any messages that were queued while summarizing. + queuedMessages, ok := a.messageQueue.Get(sessionID) + if !ok || len(queuedMessages) == 0 { + return nil + } + firstQueuedMessage := queuedMessages[0] + a.messageQueue.Set(sessionID, queuedMessages[1:]) + _, qErr := a.Run(ctx, firstQueuedMessage) + return qErr } func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {