241f1c26d3
* feat: context compressor Co-authored-by: kawayiYokami <289104862@qq.com> * Add comprehensive tests for ContextManager and ContextTruncator - Implemented a full test suite for ContextManager covering initialization, message processing, token-based compression, and error handling. - Added tests for ContextTruncator focusing on message fixing, truncation by turns, dropping oldest turns, and halving. - Ensured that both test suites validate edge cases and maintain expected behavior with various message types, including system and tool messages. * feat: add MockProvider for LLM compression tests * chore: remove lock * ruff fix * fix * perf * feat: enhance context compression with token tracking and logging * feat: update logging for context compression trigger * feat: implement context compression logic with dynamic threshold and token tracking * fix: reorder import statements for consistency * feat: add token_usage tracking to conversations and update related processing logic --------- Co-authored-by: kawayiYokami <289104862@qq.com>
36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING
|
|
|
|
from .compressor import ContextCompressor
|
|
from .token_counter import TokenCounter
|
|
|
|
if TYPE_CHECKING:
|
|
from astrbot.core.provider.provider import Provider
|
|
|
|
|
|
@dataclass
|
|
class ContextConfig:
|
|
"""Context configuration class."""
|
|
|
|
max_context_tokens: int = 0
|
|
"""Maximum number of context tokens. <= 0 means no limit."""
|
|
enforce_max_turns: int = -1 # -1 means no limit
|
|
"""Maximum number of conversation turns to keep. -1 means no limit. Executed before compression."""
|
|
truncate_turns: int = 1
|
|
"""Number of conversation turns to discard at once when truncation is triggered.
|
|
Two processes will use this value:
|
|
|
|
1. Enforce max turns truncation.
|
|
2. Truncation by turns compression strategy.
|
|
"""
|
|
llm_compress_instruction: str | None = None
|
|
"""Instruction prompt for LLM-based compression."""
|
|
llm_compress_keep_recent: int = 0
|
|
"""Number of recent messages to keep during LLM-based compression."""
|
|
llm_compress_provider: "Provider | None" = None
|
|
"""LLM provider used for compression tasks. If None, truncation strategy is used."""
|
|
custom_token_counter: TokenCounter | None = None
|
|
"""Custom token counting method. If None, the default method is used."""
|
|
custom_compressor: ContextCompressor | None = None
|
|
"""Custom context compression method. If None, the default method is used."""
|