on main help sign in
fix(agent): queued messages issues
commit6e9460300d848efbe4a18464a4335f3fd3184e3d authorKujtim Hoxha <kujtimii.h@gmail.com> dateMon 20 Oct 2025, 11:03 (1 year ago) parentd521e93
1 file changed+18−16
internal/agent/agent.go+18−16
internal/agent/agent.go+18−16
@@ -183,21 +183,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
183183 FrequencyPenalty: call.FrequencyPenalty,
184184 // Before each step create the new assistant message
185185 PrepareStep: func(callContext context.Context, options fantasy.PrepareStepFunctionOptions) (_ context.Context, prepared fantasy.PrepareStepResult, err error) {
186− var assistantMsg message.Message
187− assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
188− Role: message.Assistant,
189− Parts: []message.ContentPart{},
190− Model: a.largeModel.ModelCfg.Model,
191− Provider: a.largeModel.ModelCfg.Provider,
192− })
193− if err != nil {
194− return callContext, prepared, err
195− }
196−
197− callContext = context.WithValue(callContext, tools.MessageIDContextKey, assistantMsg.ID)
198−
199− currentAssistant = &assistantMsg
200−
201186 prepared.Messages = options.Messages
202187 // reset all cached items
203188 for i := range prepared.Messages {
@@ -229,6 +214,19 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
229214 prepared.Messages[i].ProviderOptions = a.getCacheControlOptions()
230215 }
231216 }
217+
218+ var assistantMsg message.Message
219+ assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
220+ Role: message.Assistant,
221+ Parts: []message.ContentPart{},
222+ Model: a.largeModel.ModelCfg.Model,
223+ Provider: a.largeModel.ModelCfg.Provider,
224+ })
225+ if err != nil {
226+ return callContext, prepared, err
227+ }
228+ callContext = context.WithValue(callContext, tools.MessageIDContextKey, assistantMsg.ID)
229+ currentAssistant = &assistantMsg
232230 return callContext, prepared, err
233231 },
234232 OnReasoningDelta: func(id string, text string) error {
@@ -432,6 +430,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
432430 }
433431 }
434432
433+ // release active request before processing queued messages
434+ a.activeRequests.Del(call.SessionID)
435+ cancel()
436+
435437 queuedMessages, ok := a.messageQueue.Get(call.SessionID)
436438 if !ok || len(queuedMessages) == 0 {
437439 return result, err
@@ -439,7 +441,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
439441 // there are queued messages restart the loop
440442 firstQueuedMessage := queuedMessages[0]
441443 a.messageQueue.Set(call.SessionID, queuedMessages[1:])
442− return a.Run(genCtx, firstQueuedMessage)
444+ return a.Run(ctx, firstQueuedMessage)
443445}
444446
445447func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fantasy.ProviderOptions) error {