MCPcopy Index your code
hub / github.com/docker/docker-agent / extractMessages

Function extractMessages

pkg/runtime/compactor/compactor.go:288–324  ·  view source on GitHub ↗

extractMessages returns the messages to send to the compaction model, plus the index (into sess.Messages) of the first message that is kept verbatim after compaction. The caller is responsible for actually preserving that tail; this function only computes the boundary. The returned messages always

(sess *session.Session, _ *agent.Agent, contextLimit int64, additionalPrompt string)

Source from the content-addressed store, hash-verified

286// (contextLimit − summary budget − prompt-overhead), older messages
287// are dropped from the front of the to-compact list to make room.
288func extractMessages(sess *session.Session, _ *agent.Agent, contextLimit int64, additionalPrompt string) ([]chat.Message, int) {
289 messages, sessIndices := gatherCompactionInput(sess)
290
291 splitIdx := compaction.SplitIndexForKeep(messages, keepTokenBudget(contextLimit))
292 firstKeptEntry := firstKeptSessionIndex(sess, sessIndices, splitIdx)
293 messages = messages[:splitIdx]
294
295 systemPromptMessage := chat.Message{
296 Role: chat.MessageRoleSystem,
297 Content: compaction.SystemPrompt,
298 CreatedAt: time.Now().Format(time.RFC3339),
299 }
300 userPrompt := compaction.UserPrompt
301 if additionalPrompt != "" {
302 userPrompt += "\n\n" + additionalPrompt
303 }
304 userPromptMessage := chat.Message{
305 Role: chat.MessageRoleUser,
306 Content: userPrompt,
307 CreatedAt: time.Now().Format(time.RFC3339),
308 }
309
310 contextAvailable := max(int64(0),
311 contextLimit-summaryTokenBudget(contextLimit)-
312 compaction.EstimateMessageTokens(&systemPromptMessage)-
313 compaction.EstimateMessageTokens(&userPromptMessage))
314 firstIndex := compaction.FirstIndexInBudget(messages, contextAvailable)
315 if firstIndex < len(messages) {
316 messages = messages[firstIndex:]
317 } else {
318 messages = nil
319 }
320
321 messages = append([]chat.Message{systemPromptMessage}, messages...)
322 messages = append(messages, userPromptMessage)
323 return messages, firstKeptEntry
324}
325
326// firstKeptSessionIndex translates a split index produced against the
327// chat-message list returned by [gatherCompactionInput] back to an

Callers 3

RunLLMFunction · 0.85
TestExtractMessagesFunction · 0.85

Calls 8

SplitIndexForKeepFunction · 0.92
EstimateMessageTokensFunction · 0.92
FirstIndexInBudgetFunction · 0.92
gatherCompactionInputFunction · 0.85
keepTokenBudgetFunction · 0.85
firstKeptSessionIndexFunction · 0.85
summaryTokenBudgetFunction · 0.85
NowMethod · 0.80

Tested by 2

TestExtractMessagesFunction · 0.68