| 254 | } |
| 255 | |
| 256 | function ensureSystemMessage(history: AgentMessage[], systemPrompt: string): AgentMessage[] { |
| 257 | if (!systemPrompt.trim()) { |
| 258 | return history; |
| 259 | } |
| 260 | |
| 261 | const [firstMessage, ...rest] = history; |
| 262 | const systemMessage: AgentMessage = { role: 'system', content: systemPrompt.trim() }; |
| 263 | |
| 264 | if (!firstMessage) { |
| 265 | return [systemMessage]; |
| 266 | } |
| 267 | |
| 268 | if (firstMessage.role !== 'system') { |
| 269 | return [systemMessage, firstMessage, ...rest]; |
| 270 | } |
| 271 | |
| 272 | if (firstMessage.content !== systemPrompt.trim()) { |
| 273 | return [{ role: 'system', content: systemPrompt.trim() }, ...rest]; |
| 274 | } |
| 275 | |
| 276 | return history; |
| 277 | } |
| 278 | |
| 279 | function trimConversation(history: AgentMessage[], memorySize: number): AgentMessage[] { |
| 280 | if (history.length <= memorySize) { |