Skip to content

Commit b5f3ef9

Browse files
committed
urgent: revert the backend message
1 parent 969236c commit b5f3ef9

1 file changed

Lines changed: 61 additions & 2 deletions

File tree

internal/api/chat/create_conversation_message_stream.go

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package chat
22

33
import (
4-
"errors"
4+
"paperdebugger/internal/api/mapper"
5+
"paperdebugger/internal/models"
6+
"paperdebugger/internal/services"
57
chatv1 "paperdebugger/pkg/gen/api/chat/v1"
8+
9+
"go.mongodb.org/mongo-driver/v2/bson"
610
)
711

812
func (s *ChatServer) sendStreamError(stream chatv1.ChatService_CreateConversationMessageStreamServer, err error) error {
@@ -19,5 +23,60 @@ func (s *ChatServer) CreateConversationMessageStream(
1923
req *chatv1.CreateConversationMessageStreamRequest,
2024
stream chatv1.ChatService_CreateConversationMessageStreamServer,
2125
) error {
22-
return s.sendStreamError(stream, errors.New("Due to some technical problem from LLM providers, we are trying to bring the service back. Please retry later."))
26+
ctx := stream.Context()
27+
ctx, conversation, err := s.prepare(
28+
ctx,
29+
req.GetProjectId(),
30+
req.GetConversationId(),
31+
req.GetUserMessage(),
32+
req.GetUserSelectedText(),
33+
models.LanguageModel(req.GetLanguageModel()),
34+
req.GetConversationType(),
35+
)
36+
if err != nil {
37+
return s.sendStreamError(stream, err)
38+
}
39+
40+
// 用法跟 ChatCompletion 一样,只是传递了 stream 参数
41+
openaiChatHistory, inappChatHistory, err := s.aiClient.ChatCompletionStream(ctx, stream, conversation.ID.Hex(), conversation.LanguageModel, conversation.OpenaiChatHistory)
42+
if err != nil {
43+
return s.sendStreamError(stream, err)
44+
}
45+
46+
// 附加消息到对话
47+
bsonMessages := make([]bson.M, len(inappChatHistory))
48+
for i := range inappChatHistory {
49+
bsonMsg, err := convertToBSON(&inappChatHistory[i])
50+
if err != nil {
51+
return s.sendStreamError(stream, err)
52+
}
53+
bsonMessages[i] = bsonMsg
54+
}
55+
conversation.InappChatHistory = append(conversation.InappChatHistory, bsonMessages...)
56+
conversation.OpenaiChatHistory = openaiChatHistory
57+
if err := s.chatService.UpdateConversation(conversation); err != nil {
58+
return s.sendStreamError(stream, err)
59+
}
60+
61+
if conversation.Title == services.DefaultConversationTitle {
62+
go func() {
63+
protoMessages := make([]*chatv1.Message, len(conversation.InappChatHistory))
64+
for i, bsonMsg := range conversation.InappChatHistory {
65+
protoMessages[i] = mapper.BSONToChatMessage(bsonMsg)
66+
}
67+
title, err := s.aiClient.GetConversationTitle(ctx, protoMessages)
68+
if err != nil {
69+
s.logger.Error("Failed to get conversation title", "error", err, "conversationID", conversation.ID.Hex())
70+
return
71+
}
72+
conversation.Title = title
73+
if err := s.chatService.UpdateConversation(conversation); err != nil {
74+
s.logger.Error("Failed to update conversation with new title", "error", err, "conversationID", conversation.ID.Hex())
75+
return
76+
}
77+
}()
78+
}
79+
80+
// The final conversation object is NOT returned
81+
return nil
2382
}

0 commit comments

Comments
 (0)