@@ -21,6 +21,7 @@ import (
2121 "encoding/json"
2222 "errors"
2323 "io"
24+ "slices"
2425 "strconv"
2526
2627 "github.com/cloudwego/eino/schema"
@@ -102,15 +103,15 @@ func (a *OpenapiAgentRunApplication) checkConversation(ctx context.Context, ar *
102103 return nil , err
103104 }
104105 if conData == nil {
105- return nil , errors .New ("conversation data is nil" )
106+ return nil , errorx .New (errno . ErrConversationNotFound )
106107 }
107108 conversationData = conData
108109
109110 ar .ConversationID = ptr .Of (conversationData .ID )
110111 }
111112
112113 if conversationData .CreatorID != userID {
113- return nil , errors .New ("conversation data not match" )
114+ return nil , errorx .New (errno . ErrConversationPermissionCode , errorx . KV ( "msg" , "user not match") )
114115 }
115116
116117 return conversationData , nil
@@ -138,26 +139,31 @@ func (a *OpenapiAgentRunApplication) buildAgentRunRequest(ctx context.Context, a
138139 if err != nil {
139140 return nil , err
140141 }
141- multiContent , contentType , err := a .buildMultiContent (ctx , ar )
142+ multiAdditionalMessages , err := a .parseAdditionalMessages (ctx , ar )
143+ if err != nil {
144+ return nil , err
145+ }
146+ filterMultiAdditionalMessages , multiContent , contentType , err := a .parseQueryContent (ctx , multiAdditionalMessages )
142147 if err != nil {
143148 return nil , err
144149 }
145150 displayContent := a .buildDisplayContent (ctx , ar )
146151 arm := & entity.AgentRunMeta {
147- ConversationID : ptr .From (ar .ConversationID ),
148- AgentID : ar .BotID ,
149- Content : multiContent ,
150- DisplayContent : displayContent ,
151- SpaceID : spaceID ,
152- UserID : ar .User ,
153- SectionID : conversationData .SectionID ,
154- PreRetrieveTools : shortcutCMDData ,
155- IsDraft : false ,
156- ConnectorID : connectorID ,
157- ContentType : contentType ,
158- Ext : ar .ExtraParams ,
159- CustomVariables : ar .CustomVariables ,
160- CozeUID : conversationData .CreatorID ,
152+ ConversationID : ptr .From (ar .ConversationID ),
153+ AgentID : ar .BotID ,
154+ Content : multiContent ,
155+ DisplayContent : displayContent ,
156+ SpaceID : spaceID ,
157+ UserID : ar .User ,
158+ SectionID : conversationData .SectionID ,
159+ PreRetrieveTools : shortcutCMDData ,
160+ IsDraft : false ,
161+ ConnectorID : connectorID ,
162+ ContentType : contentType ,
163+ Ext : ar .ExtraParams ,
164+ CustomVariables : ar .CustomVariables ,
165+ CozeUID : conversationData .CreatorID ,
166+ AdditionalMessages : filterMultiAdditionalMessages ,
161167 }
162168 return arm , nil
163169}
@@ -200,29 +206,68 @@ func (a *OpenapiAgentRunApplication) buildDisplayContent(_ context.Context, ar *
200206 return ""
201207}
202208
203- func (a * OpenapiAgentRunApplication ) buildMultiContent (ctx context.Context , ar * run.ChatV3Request ) ([]* message.InputMetaData , message.ContentType , error ) {
204- var multiContents []* message.InputMetaData
205- contentType := message .ContentTypeText
209+ func (a * OpenapiAgentRunApplication ) parseQueryContent (ctx context.Context , multiAdditionalMessages []* entity.AdditionalMessage ) ([]* entity.AdditionalMessage , []* message.InputMetaData , message.ContentType , error ) {
210+
211+ var multiContent []* message.InputMetaData
212+ var contentType message.ContentType
213+ var filterMultiAdditionalMessages []* entity.AdditionalMessage
214+ filterMultiAdditionalMessages = multiAdditionalMessages
215+
216+ if len (multiAdditionalMessages ) > 0 {
217+ lastMessage := multiAdditionalMessages [len (multiAdditionalMessages )- 1 ]
218+ if lastMessage != nil && lastMessage .Role == schema .User {
219+ multiContent = lastMessage .Content
220+ contentType = lastMessage .ContentType
221+ filterMultiAdditionalMessages = multiAdditionalMessages [:len (multiAdditionalMessages )- 1 ]
222+ }
223+ }
224+
225+ return filterMultiAdditionalMessages , multiContent , contentType , nil
226+ }
227+
228+ func (a * OpenapiAgentRunApplication ) parseAdditionalMessages (ctx context.Context , ar * run.ChatV3Request ) ([]* entity.AdditionalMessage , error ) {
229+
230+ additionalMessages := make ([]* entity.AdditionalMessage , 0 , len (ar .AdditionalMessages ))
206231
207232 for _ , item := range ar .AdditionalMessages {
208233 if item == nil {
209234 continue
210235 }
211- if item .Role != string (schema .User ) {
212- return nil , contentType , errors .New ("role not match" )
236+ if item .Role != string (schema .User ) && item .Role != string (schema .Assistant ) {
237+ return nil , errors .New ("additional message role only support user and assistant" )
238+ }
239+ if item .Type != nil && ! slices .Contains ([]message.MessageType {message .MessageTypeQuestion , message .MessageTypeAnswer }, message .MessageType (* item .Type )) {
240+ return nil , errors .New ("additional message type only support question and answer now" )
213241 }
242+
243+ addOne := entity.AdditionalMessage {
244+ Role : schema .RoleType (item .Role ),
245+ }
246+ if item .Type != nil {
247+ addOne .Type = message .MessageType (* item .Type )
248+ } else {
249+ addOne .Type = message .MessageTypeQuestion
250+ }
251+
214252 if item .ContentType == run .ContentTypeText {
215253 if item .Content == "" {
216254 continue
217255 }
218- multiContents = append (multiContents , & message.InputMetaData {
256+
257+ addOne .ContentType = message .ContentTypeText
258+ addOne .Content = []* message.InputMetaData {{
219259 Type : message .InputTypeText ,
220260 Text : item .Content ,
221- })
261+ }}
222262 }
223263
224264 if item .ContentType == run .ContentTypeMixApi {
225- contentType = message .ContentTypeMix
265+
266+ if ptr .From (item .Type ) == string (message .MessageTypeAnswer ) {
267+ return nil , errors .New (" answer messages only support text content" )
268+ }
269+
270+ addOne .ContentType = message .ContentTypeMix
226271 var inputs []* run.AdditionalContent
227272 err := json .Unmarshal ([]byte (item .Content ), & inputs )
228273
@@ -236,7 +281,8 @@ func (a *OpenapiAgentRunApplication) buildMultiContent(ctx context.Context, ar *
236281 }
237282 switch message .InputType (one .Type ) {
238283 case message .InputTypeText :
239- multiContents = append (multiContents , & message.InputMetaData {
284+
285+ addOne .Content = append (addOne .Content , & message.InputMetaData {
240286 Type : message .InputTypeText ,
241287 Text : ptr .From (one .Text ),
242288 })
@@ -250,12 +296,12 @@ func (a *OpenapiAgentRunApplication) buildMultiContent(ctx context.Context, ar *
250296 ID : one .GetFileID (),
251297 })
252298 if err != nil {
253- return nil , contentType , err
299+ return nil , err
254300 }
255301 fileUrl = fileInfo .File .Url
256302 fileURI = fileInfo .File .TosURI
257303 }
258- multiContents = append (multiContents , & message.InputMetaData {
304+ addOne . Content = append (addOne . Content , & message.InputMetaData {
259305 Type : message .InputType (one .Type ),
260306 FileData : []* message.FileData {
261307 {
@@ -269,10 +315,10 @@ func (a *OpenapiAgentRunApplication) buildMultiContent(ctx context.Context, ar *
269315 }
270316 }
271317 }
272-
318+ additionalMessages = append ( additionalMessages , & addOne )
273319 }
274320
275- return multiContents , contentType , nil
321+ return additionalMessages , nil
276322}
277323
278324func (a * OpenapiAgentRunApplication ) pullStream (ctx context.Context , sseSender * sseImpl.SSenderImpl , streamer * schema.StreamReader [* entity.AgentRunResponse ]) {
0 commit comments