feat: add CommitAIReply method to streamline reply handling and increment AI reply rounds
This commit is contained in:
@@ -46,6 +46,18 @@ func (s *replyCommitService) SendAIReply(conversation models.Conversation, messa
|
|||||||
return replyMessage, err
|
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 {
|
func (s *replyCommitService) IncrementAIReplyRounds(conversationID int64, nextRounds int, aiAgentName string) error {
|
||||||
return repositories.ConversationRepository.Updates(sqls.DB(), conversationID, map[string]any{
|
return repositories.ConversationRepository.Updates(sqls.DB(), conversationID, map[string]any{
|
||||||
"ai_reply_rounds": nextRounds,
|
"ai_reply_rounds": nextRounds,
|
||||||
|
|||||||
@@ -28,13 +28,10 @@ func (s *replyInterruptService) ResumePendingInterrupt(ctx context.Context, owne
|
|||||||
*summaryRef = summary
|
*summaryRef = summary
|
||||||
trace.Status = "interrupt_expired"
|
trace.Status = "interrupt_expired"
|
||||||
trace.FinalAction = "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 {
|
if expireErr != nil {
|
||||||
return expireErr
|
return expireErr
|
||||||
}
|
}
|
||||||
if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
lastResumeMessageID := int64(0)
|
lastResumeMessageID := int64(0)
|
||||||
if replyMessage != nil {
|
if replyMessage != nil {
|
||||||
lastResumeMessageID = replyMessage.ID
|
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)
|
return s.HandleInterruptedResume(owner, conversation, message, aiAgent, pendingInterrupt, summary, trace)
|
||||||
}
|
}
|
||||||
if summary != nil && strings.TrimSpace(summary.ReplyText) != "" {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
replyMessageID := int64(0)
|
replyMessageID := int64(0)
|
||||||
if replyMessage != nil {
|
if replyMessage != nil {
|
||||||
replyMessageID = replyMessage.ID
|
replyMessageID = replyMessage.ID
|
||||||
@@ -80,13 +74,10 @@ func (s *replyInterruptService) HandleInterruptedSummary(owner *aiReplyService,
|
|||||||
}
|
}
|
||||||
pending = svc.ConversationInterruptService.GetByCheckPointID(summary.CheckPointID)
|
pending = svc.ConversationInterruptService.GetByCheckPointID(summary.CheckPointID)
|
||||||
replyText := resolveInterruptPrompt(summary)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if replyMessage != nil && pending != nil {
|
if replyMessage != nil && pending != nil {
|
||||||
return svc.ConversationInterruptService.MarkPendingAgain(pending.ID, pending.InterruptID, replyText, replyMessage.ID)
|
return svc.ConversationInterruptService.MarkPendingAgain(pending.ID, pending.InterruptID, replyText, replyMessage.ID)
|
||||||
}
|
}
|
||||||
@@ -99,13 +90,10 @@ func (s *replyInterruptService) HandleInterruptedResume(owner *aiReplyService, c
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
replyText := resolveInterruptPrompt(summary)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := owner.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if replyMessage != nil {
|
if replyMessage != nil {
|
||||||
return svc.ConversationInterruptService.MarkPendingAgain(pendingInterrupt.ID, firstInterruptID(summary), replyText, replyMessage.ID)
|
return svc.ConversationInterruptService.MarkPendingAgain(pendingInterrupt.ID, firstInterruptID(summary), replyText, replyMessage.ID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,13 +84,10 @@ func (s *aiReplyService) executeReply(ctx context.Context, conversation models.C
|
|||||||
return s.interrupts.HandleInterruptedSummary(s, conversation, message, aiAgent, summary, trace)
|
return s.interrupts.HandleInterruptedSummary(s, conversation, message, aiAgent, summary, trace)
|
||||||
}
|
}
|
||||||
if summary != nil && strings.TrimSpace(summary.ReplyText) != "" {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.commit.IncrementAIReplyRounds(conversation.ID, conversation.AIReplyRounds+1, aiAgent.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
trace.ReplySent = replyMessage != nil
|
trace.ReplySent = replyMessage != nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user