* Gravity only wants the last user turn plus the last preceding assistant * turn for relevancy signals. We also strip empties and normalize user * messages through the tag.
(messages: AdMessage[])
| 67 | * messages through the <user_message> tag. |
| 68 | */ |
| 69 | function prepareGravityMessages(messages: AdMessage[]): AdMessage[] { |
| 70 | const cleaned = messages |
| 71 | .filter((m) => m.content) |
| 72 | .map((m) => |
| 73 | m.role === 'user' |
| 74 | ? { ...m, content: extractLastUserMessageContent(m.content) } |
| 75 | : m, |
| 76 | ) |
| 77 | const lastUserIndex = cleaned.findLastIndex((m) => m.role === 'user') |
| 78 | const lastUser = lastUserIndex >= 0 ? cleaned[lastUserIndex] : undefined |
| 79 | const lastAssistant = cleaned |
| 80 | .slice(0, lastUserIndex >= 0 ? lastUserIndex : cleaned.length) |
| 81 | .findLast((m) => m.role === 'assistant') |
| 82 | return buildArray(lastAssistant, lastUser) |
| 83 | } |
| 84 | |
| 85 | export function createGravityProvider(config: { apiKey: string }): AdProvider { |
| 86 | return { |
no test coverage detected