context

package
v1.1.57 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 4, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CalculateContextTokens

func CalculateContextTokens(usage *provider.Usage) int

CalculateContextTokens calculates total context tokens from usage. Uses the totalTokens field when available, falls back to computing from components.

func EstimateContextTokens

func EstimateContextTokens(messages []provider.Message) (tokens int, lastUsageIndex int)

EstimateContextTokens estimates context tokens from messages. Uses the last assistant's usage when available, then estimates trailing messages.

func EstimateContextTokensWithEstimator

func EstimateContextTokensWithEstimator(messages []provider.Message, estimator TokenEstimator) (tokens int, lastUsageIndex int)

EstimateContextTokensWithEstimator estimates context tokens using provider usage when available, then the supplied estimator for trailing messages.

func EstimateTokens

func EstimateTokens(msg provider.Message) int

EstimateTokens estimates token count for a message using the default estimator.

func FindTurnStartIndex

func FindTurnStartIndex(messages []provider.Message, entryIndex, startIndex int) int

FindTurnStartIndex finds the user message that starts the turn containing the given index.

func FindValidCutPoints

func FindValidCutPoints(messages []provider.Message, startIndex, endIndex int) []int

FindValidCutPoints finds valid cut points in messages. Valid cut points are user, assistant messages (never tool results).

func GenerateSummary

func GenerateSummary(
	ctx context.Context,
	messages []provider.Message,
	p provider.Provider,
	model *provider.Model,
	reserveTokens int,
	previousSummary string,
) (string, error)

GenerateSummary is the legacy interface that delegates to Insert-then-Compress. Kept for backward compatibility but now uses the same system prompt. Deprecated: use GenerateSummaryInsertThenCompress directly.

func GenerateSummaryInsertThenCompress

func GenerateSummaryInsertThenCompress(
	ctx context.Context,
	messages []provider.Message,
	p provider.Provider,
	model *provider.Model,
	systemPrompt string,
	tools []provider.ToolDefinition,
	previousSummary string,
	maxTokens int,
) (string, error)

GenerateSummaryInsertThenCompress generates a summary using Insert-then-Compress pattern. This implements Rule R4.1-R4.2: use the SAME system prompt and tools, not a separate call. The compression instruction is injected as a system_injected user message at the end of the conversation.

func GenerateSummaryInsertThenCompressWithTemplate

func GenerateSummaryInsertThenCompressWithTemplate(
	ctx context.Context,
	messages []provider.Message,
	p provider.Provider,
	model *provider.Model,
	systemPrompt string,
	tools []provider.ToolDefinition,
	previousSummary string,
	maxTokens int,
	template CompressionTemplate,
) (string, error)

GenerateSummaryInsertThenCompressWithTemplate generates a summary using the supplied compression template.

func HasCompactableMessages

func HasCompactableMessages(messages []provider.Message, model *provider.Model, settings CompactionSettings, previousSummary string) bool

HasCompactableMessages reports whether compaction would have older messages to summarize after preserving the configured recent context.

func SerializeConversation

func SerializeConversation(messages []provider.Message) string

SerializeConversation serializes messages to text for summarization.

func ShouldCompact

func ShouldCompact(contextTokens int, contextWindow int, reserveTokens int) bool

ShouldCompact checks if compaction should trigger based on context usage.

Types

type CompactionResult

type CompactionResult struct {
	Summary        string
	FirstKeptIndex int
	TokensBefore   int
}

CompactionResult holds the result of a compaction operation.

func Compact

func Compact(
	ctx context.Context,
	messages []provider.Message,
	p provider.Provider,
	model *provider.Model,
	systemPrompt string,
	tools []provider.ToolDefinition,
	settings CompactionSettings,
	previousSummary string,
) (*CompactionResult, error)

Compact performs context compaction on the messages using Insert-then-Compress pattern. This implements Rule R4.1-R4.4.

func CompactWithLegacyInterface

func CompactWithLegacyInterface(
	ctx context.Context,
	messages []provider.Message,
	p provider.Provider,
	model *provider.Model,
	settings CompactionSettings,
	previousSummary string,
) (*CompactionResult, error)

CompactWithLegacyInterface is a compatibility wrapper that calls the old Compact signature. Deprecated: use the new Compact with systemPrompt and tools parameters.

type CompactionSettings

type CompactionSettings struct {
	Enabled          bool   `json:"enabled"`
	ReserveTokens    int    `json:"reserveTokens"`
	KeepRecentTokens int    `json:"keepRecentTokens"`
	Tokenizer        string `json:"tokenizer,omitempty"`
	TokenizerModel   string `json:"tokenizerModel,omitempty"`
	Template         string `json:"template,omitempty"`

	// Idle compression settings (R5.1-R5.5)
	// When enabled, triggers compression during idle periods to maintain cache warmth.
	IdleCompressionEnabled   bool `json:"idleCompressionEnabled,omitempty"`   // R5.1: default off
	IdleTimeoutSeconds       int  `json:"idleTimeoutSeconds,omitempty"`       // seconds of inactivity before triggering (default: 90)
	IdleMinTokensForCompress int  `json:"idleMinTokensForCompress,omitempty"` // minimum tokens to trigger idle compression (default: 150000)
}

CompactionSettings holds compaction configuration.

func DefaultCompactionSettings

func DefaultCompactionSettings() CompactionSettings

DefaultCompactionSettings returns default compaction settings.

func NormalizeCompactionSettings

func NormalizeCompactionSettings(settings CompactionSettings) CompactionSettings

NormalizeCompactionSettings applies runtime defaults for zero-valued limits.

type CompressionTemplate

type CompressionTemplate struct {
	Name              string
	Instruction       string
	UpdateInstruction string
}

CompressionTemplate contains instructions for initial and update compaction.

func ResolveCompressionTemplate

func ResolveCompressionTemplate(name string) CompressionTemplate

ResolveCompressionTemplate returns a built-in compression template.

type ContextUsage

type ContextUsage struct {
	Tokens        int      // Current estimated context tokens
	ContextWindow int      // Maximum context window size
	Percent       *float64 // Usage percentage, nil if unknown
}

ContextUsage holds the current context usage information.

type CutPointResult

type CutPointResult struct {
	FirstKeptIndex int
	TurnStartIndex int
	IsSplitTurn    bool
}

CutPointResult holds information about where to cut the conversation.

func FindCutPoint

func FindCutPoint(messages []provider.Message, startIndex, endIndex, keepRecentTokens int) CutPointResult

FindCutPoint finds the cut point that keeps approximately keepRecentTokens.

func FindCutPointWithEstimator

func FindCutPointWithEstimator(messages []provider.Message, startIndex, endIndex, keepRecentTokens int, estimator TokenEstimator) CutPointResult

FindCutPointWithEstimator finds the cut point using the supplied token estimator.

type GenericTokenEstimator

type GenericTokenEstimator struct{}

GenericTokenEstimator preserves the existing chars/4 heuristic.

func (GenericTokenEstimator) EstimateMessagesTokens

func (e GenericTokenEstimator) EstimateMessagesTokens(messages []provider.Message) int

EstimateMessagesTokens estimates the total token count for messages.

func (GenericTokenEstimator) EstimateTokens

func (GenericTokenEstimator) EstimateTokens(msg provider.Message) int

EstimateTokens estimates token count for a message using a chars/4 heuristic.

type ModelAwareTokenEstimator

type ModelAwareTokenEstimator struct {
	Model *provider.Model
}

ModelAwareTokenEstimator preserves the chars/4 text heuristic while using model-family image token formulas when image dimensions are available.

func (ModelAwareTokenEstimator) EstimateMessagesTokens

func (e ModelAwareTokenEstimator) EstimateMessagesTokens(messages []provider.Message) int

func (ModelAwareTokenEstimator) EstimateTokens

func (e ModelAwareTokenEstimator) EstimateTokens(msg provider.Message) int

type TokenEstimator

type TokenEstimator interface {
	EstimateTokens(msg provider.Message) int
	EstimateMessagesTokens(messages []provider.Message) int
}

TokenEstimator estimates the context footprint of provider messages.

func ResolveTokenEstimator

func ResolveTokenEstimator(settings CompactionSettings, model *provider.Model) TokenEstimator

ResolveTokenEstimator returns the configured estimator. Unsupported tokenizer names intentionally fall back to generic so existing configuration remains tolerant while model-specific estimators are added.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL