diff --git a/internal/ai/runtime/reply_commit_service.go b/internal/ai/runtime/reply_commit_service.go index 93d1791..c312176 100644 --- a/internal/ai/runtime/reply_commit_service.go +++ b/internal/ai/runtime/reply_commit_service.go @@ -46,6 +46,18 @@ func (s *replyCommitService) SendAIReply(conversation models.Conversation, messa return replyMessage, err } +func (s *replyCommitService) CommitAIReply(conversation models.Conversation, message models.Message, aiAgent models.AIAgent, + replyText string, trace *aiReplyTraceData, clientPrefix string) (*models.Message, error) { + replyMessage, err := s.SendAIReply(conversation, message, aiAgent, replyText, trace, clientPrefix) + if err != nil { + return nil, err + } + if err := s.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { + return nil, err + } + return replyMessage, nil +} + func (s *replyCommitService) IncrementAIReplyRounds(conversationID int64, nextRounds int, aiAgentName string) error { return repositories.ConversationRepository.Updates(sqls.DB(), conversationID, map[string]any{ "ai_reply_rounds": nextRounds, diff --git a/internal/ai/runtime/reply_interrupt_service.go b/internal/ai/runtime/reply_interrupt_service.go index 93d0725..0e81bf0 100644 --- a/internal/ai/runtime/reply_interrupt_service.go +++ b/internal/ai/runtime/reply_interrupt_service.go @@ -28,13 +28,10 @@ func (s *replyInterruptService) ResumePendingInterrupt(ctx context.Context, owne *summaryRef = summary trace.Status = "interrupt_expired" trace.FinalAction = "expired" - replyMessage, expireErr := owner.commit.SendAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_interrupt_expired") + replyMessage, expireErr := owner.commit.CommitAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_interrupt_expired") if expireErr != nil { return expireErr } - if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { - return err - } lastResumeMessageID := int64(0) if replyMessage != nil { lastResumeMessageID = replyMessage.ID @@ -50,13 +47,10 @@ func (s *replyInterruptService) ResumePendingInterrupt(ctx context.Context, owne return s.HandleInterruptedResume(owner, conversation, message, aiAgent, pendingInterrupt, summary, trace) } if summary != nil && strings.TrimSpace(summary.ReplyText) != "" { - replyMessage, err := owner.commit.SendAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_resume") + replyMessage, err := owner.commit.CommitAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_resume") if err != nil { return err } - if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { - return err - } replyMessageID := int64(0) if replyMessage != nil { replyMessageID = replyMessage.ID @@ -80,13 +74,10 @@ func (s *replyInterruptService) HandleInterruptedSummary(owner *aiReplyService, } pending = svc.ConversationInterruptService.GetByCheckPointID(summary.CheckPointID) replyText := resolveInterruptPrompt(summary) - replyMessage, err := owner.commit.SendAIReply(conversation, message, aiAgent, replyText, trace, "ai_interrupt") + replyMessage, err := owner.commit.CommitAIReply(conversation, message, aiAgent, replyText, trace, "ai_interrupt") if err != nil { return err } - if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { - return err - } if replyMessage != nil && pending != nil { return svc.ConversationInterruptService.MarkPendingAgain(pending.ID, pending.InterruptID, replyText, replyMessage.ID) } @@ -99,13 +90,10 @@ func (s *replyInterruptService) HandleInterruptedResume(owner *aiReplyService, c return nil } replyText := resolveInterruptPrompt(summary) - replyMessage, err := owner.commit.SendAIReply(conversation, message, aiAgent, replyText, trace, "ai_interrupt_resume") + replyMessage, err := owner.commit.CommitAIReply(conversation, message, aiAgent, replyText, trace, "ai_interrupt_resume") if err != nil { return err } - if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { - return err - } if replyMessage != nil { return svc.ConversationInterruptService.MarkPendingAgain(pendingInterrupt.ID, firstInterruptID(summary), replyText, replyMessage.ID) } diff --git a/internal/ai/runtime/reply_trigger_service.go b/internal/ai/runtime/reply_trigger_service.go index b431f26..116c25c 100644 --- a/internal/ai/runtime/reply_trigger_service.go +++ b/internal/ai/runtime/reply_trigger_service.go @@ -84,13 +84,10 @@ func (s *aiReplyService) executeReply(ctx context.Context, conversation models.C return s.interrupts.HandleInterruptedSummary(s, conversation, message, aiAgent, summary, trace) } if summary != nil && strings.TrimSpace(summary.ReplyText) != "" { - replyMessage, err := s.commit.SendAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_reply") + replyMessage, err := s.commit.CommitAIReply(conversation, message, aiAgent, summary.ReplyText, trace, "ai_reply") if err != nil { return err } - if err := s.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil { - return err - } trace.ReplySent = replyMessage != nil } return nil