Compact compresses conversation history via seahorse summarization.
(ctx context.Context, req *CompactRequest)
| 125 | |
| 126 | // Compact compresses conversation history via seahorse summarization. |
| 127 | func (m *seahorseContextManager) Compact(ctx context.Context, req *CompactRequest) error { |
| 128 | if req == nil { |
| 129 | return nil |
| 130 | } |
| 131 | |
| 132 | // For retry (LLM overflow), use aggressive CompactUntilUnder to guarantee |
| 133 | // context shrinks below budget (spec lines ~1410). |
| 134 | if req.Reason == ContextCompressReasonRetry && req.Budget > 0 { |
| 135 | _, err := m.engine.CompactUntilUnder(ctx, req.SessionKey, req.Budget) |
| 136 | return err |
| 137 | } |
| 138 | |
| 139 | _, err := m.engine.Compact(ctx, req.SessionKey, seahorse.CompactInput{ |
| 140 | Force: req.Reason == ContextCompressReasonRetry, |
| 141 | Budget: &req.Budget, |
| 142 | }) |
| 143 | return err |
| 144 | } |
| 145 | |
| 146 | // Ingest records a message into seahorse SQLite. |
| 147 | // All existing sessions are bootstrapped at startup, so this only ingests new messages. |