@@ -14,6 +14,7 @@ import type {
1414} from '@codebuff/common/types/contracts/logger'
1515import type { NextRequest } from 'next/server'
1616import { getErrorObject } from '@codebuff/common/util/error'
17+ import { buildArray } from '@codebuff/common/util/array'
1718
1819const messageSchema = z . object ( {
1920 role : z . string ( ) ,
@@ -58,7 +59,7 @@ export async function postAds(params: {
5859 } )
5960 if ( ! authed . ok ) return authed . response
6061
61- const { userId, logger } = authed . data
62+ const { userId, userInfo , logger } = authed . data
6263
6364 // Check if Gravity API key is configured
6465 if ( ! serverEnv . GRAVITY_API_KEY ) {
@@ -80,8 +81,19 @@ export async function postAds(params: {
8081 )
8182 }
8283
83- // Filter out messages with no content
84- messages = parsed . data . messages . filter ( ( message ) => message . content )
84+ // Filter out messages with no content and extract user message content from tags
85+ messages = parsed . data . messages
86+ . filter ( ( message ) => message . content )
87+ . map ( ( message ) => {
88+ // For user messages, extract content from the last <user_message> tag if present
89+ if ( message . role === 'user' ) {
90+ return {
91+ ...message ,
92+ content : extractLastUserMessageContent ( message . content ) ,
93+ }
94+ }
95+ return message
96+ } )
8597 sessionId = parsed . data . sessionId
8698 } catch {
8799 logger . error (
@@ -94,10 +106,23 @@ export async function postAds(params: {
94106 )
95107 }
96108
109+ // Keep just the last user message and the last assistant message before it
110+ const lastUserMessageIndex = messages . findLastIndex (
111+ ( message ) => message . role === 'user' ,
112+ )
113+ const lastUserMessage = messages [ lastUserMessageIndex ]
114+ const lastAssistantMessage = messages
115+ . slice ( 0 , lastUserMessageIndex )
116+ . findLast ( ( message ) => message . role === 'assistant' )
117+ const filteredMessages = buildArray ( lastAssistantMessage , lastUserMessage )
97118 try {
98119 const requestBody = {
99- messages,
100- user : { uid : userId , ...( sessionId ? { sessionId } : { } ) } ,
120+ messages : filteredMessages ,
121+ userId,
122+ ...( sessionId ? { sessionId } : { } ) ,
123+ user : {
124+ email : userInfo . email ,
125+ } ,
101126 testAd : serverEnv . CB_ENVIRONMENT !== 'prod' ,
102127 }
103128 // Call Gravity API
@@ -198,3 +223,21 @@ export async function postAds(params: {
198223 )
199224 }
200225}
226+
227+ /**
228+ * Extract the content from the last <user_message> tag in a string.
229+ * If no tag is found, returns the original content.
230+ */
231+ function extractLastUserMessageContent ( content : string ) : string {
232+ // Find all <user_message>...</user_message> matches
233+ const regex = / < u s e r _ m e s s a g e > ( [ \s \S ] * ?) < \/ u s e r _ m e s s a g e > / gi
234+ const matches = [ ...content . matchAll ( regex ) ]
235+
236+ if ( matches . length > 0 ) {
237+ // Return the content from the last match
238+ const lastMatch = matches [ matches . length - 1 ]
239+ return lastMatch [ 1 ] . trim ( )
240+ }
241+
242+ return content
243+ }
0 commit comments