11package chat
22
33import (
4- "paperdebugger/internal/api/mapper"
5- "paperdebugger/internal/models"
6- "paperdebugger/internal/services"
4+ "errors"
75 chatv1 "paperdebugger/pkg/gen/api/chat/v1"
8-
9- "go.mongodb.org/mongo-driver/v2/bson"
106)
117
128func (s * ChatServer ) sendStreamError (stream chatv1.ChatService_CreateConversationMessageStreamServer , err error ) error {
@@ -23,60 +19,5 @@ func (s *ChatServer) CreateConversationMessageStream(
2319 req * chatv1.CreateConversationMessageStreamRequest ,
2420 stream chatv1.ChatService_CreateConversationMessageStreamServer ,
2521) error {
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
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." ))
8223}
0 commit comments