Skip to content

Commit 19ee42b

Browse files
committed
Update ad messages to send
1 parent aa6ab49 commit 19ee42b

File tree

2 files changed

+50
-32
lines changed

2 files changed

+50
-32
lines changed

cli/src/hooks/use-gravity-ad.ts

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -146,31 +146,6 @@ export const useGravityAd = (): GravityAdState => {
146146
}
147147
}
148148

149-
// Get the last assistant message and last user message
150-
const lastAssistantMessage = [...adMessages]
151-
.reverse()
152-
.find((message) => message.role === 'assistant')
153-
const lastUserMessage = [...adMessages]
154-
.reverse()
155-
.find((message) => message.role === 'user')
156-
157-
const messagesToSend: { role: string; content: string }[] = []
158-
if (lastAssistantMessage) {
159-
messagesToSend.push({
160-
role: lastAssistantMessage.role,
161-
content: lastAssistantMessage.content,
162-
})
163-
}
164-
if (lastUserMessage) {
165-
messagesToSend.push({
166-
role: lastUserMessage.role,
167-
content: lastUserMessage.content.replace(
168-
/<user_message>(.*?)<\/user_message>/,
169-
'$1',
170-
),
171-
})
172-
}
173-
174149
try {
175150
const response = await fetch(`${WEBSITE_URL}/api/v1/ads`, {
176151
method: 'POST',
@@ -179,7 +154,7 @@ export const useGravityAd = (): GravityAdState => {
179154
Authorization: `Bearer ${authToken}`,
180155
},
181156
body: JSON.stringify({
182-
messages: messagesToSend,
157+
messages: adMessages,
183158
sessionId: loggerContext.clientSessionId,
184159
}),
185160
})
@@ -196,7 +171,7 @@ export const useGravityAd = (): GravityAdState => {
196171
const ad = data.ad as AdResponse | null
197172

198173
logger.info(
199-
{ ad, request: { messages: messagesToSend } },
174+
{ ad, request: { messages: adMessages } },
200175
'[gravity] Received ad response',
201176
)
202177
return ad

web/src/app/api/v1/ads/_post.ts

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type {
1414
} from '@codebuff/common/types/contracts/logger'
1515
import type { NextRequest } from 'next/server'
1616
import { getErrorObject } from '@codebuff/common/util/error'
17+
import { buildArray } from '@codebuff/common/util/array'
1718

1819
const 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 = /<user_message>([\s\S]*?)<\/user_message>/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

Comments
 (0)