diff --git a/.env.example b/.env.example index 40e28b9..2d50a2a 100644 --- a/.env.example +++ b/.env.example @@ -41,7 +41,7 @@ # ── Context compression ──────────────────────────────────────────────────────── CONTEXT_COMPRESSION_ENABLED=true CONTEXT_COMPRESSION_THRESHOLD=0.70 -CONTEXT_KEEP_RECENT=8 +CONTEXT_KEEP_RECENT=4 CONTEXT_SUMMARY_TEMPERATURE=0.3 CONTEXT_SUMMARY_MAX_TOKENS=3000 diff --git a/.env.navi_code.example b/.env.navi_code.example index 5f4676a..f994898 100644 --- a/.env.navi_code.example +++ b/.env.navi_code.example @@ -41,7 +41,7 @@ # ── Context compression ──────────────────────────────────────────────────────── CONTEXT_COMPRESSION_ENABLED=true CONTEXT_COMPRESSION_THRESHOLD=0.70 -CONTEXT_KEEP_RECENT=8 +CONTEXT_KEEP_RECENT=4 CONTEXT_SUMMARY_TEMPERATURE=0.3 CONTEXT_SUMMARY_MAX_TOKENS=3000 diff --git a/docs/api.md b/docs/api.md index 8dff38e..7ea0277 100644 --- a/docs/api.md +++ b/docs/api.md @@ -503,7 +503,7 @@ "compression": { "enabled": true, "threshold": 0.9, - "keep_recent": 8, + "keep_recent": 4, "summary_max_tokens": 6000 }, "llm": { diff --git a/docs/config.md b/docs/config.md index 18ac2c5..26dcf2b 100644 --- a/docs/config.md +++ b/docs/config.md @@ -247,7 +247,7 @@ |---|---|---|---| | `CONTEXT_COMPRESSION_ENABLED` | bool | `true` | Enable/disable automatic context compression | | `CONTEXT_COMPRESSION_THRESHOLD` | float | `0.90` | Trigger compression at this fraction of `OLLAMA_NUM_CTX` | -| `CONTEXT_KEEP_RECENT` | int | `8` | Number of recent conversation turns to keep verbatim | +| `CONTEXT_KEEP_RECENT` | int | `4` | Number of recent conversation turns to keep verbatim | | `CONTEXT_SUMMARY_TEMPERATURE` | float | `0.3` | Temperature for the summarization LLM call | | `CONTEXT_SUMMARY_MAX_TOKENS` | int | `6000` | Max output tokens for the summary LLM call | | `OUTPUT_RESERVE_TOKENS` | int | `2048` | Headroom reserved for model response in context size checks | @@ -371,7 +371,7 @@ # Context compression CONTEXT_COMPRESSION_ENABLED=true CONTEXT_COMPRESSION_THRESHOLD=0.90 -CONTEXT_KEEP_RECENT=8 +CONTEXT_KEEP_RECENT=4 # Persona NAVI_PERSONA_FILE=persona.txt diff --git a/docs/sessions.md b/docs/sessions.md index d6ecc73..3d4500a 100644 --- a/docs/sessions.md +++ b/docs/sessions.md @@ -122,7 +122,7 @@ - `context_compression_enabled: bool = True` - `context_compression_threshold: float = 0.90` — trigger at 90% of the active window (real tokens) - `context_compression_target: float = 0.65` — hysteresis target: after compression the kept region should fit ~65% of the active window, so the trigger doesn't re-fire a few messages later -- `context_keep_recent: int = 8` — keep last N conversational turns verbatim +- `context_keep_recent: int = 4` — keep last N conversational turns verbatim - `context_summary_temperature: float = 0.3` - `context_summary_max_tokens: int = 6000` — max output tokens for the summary LLM call - `output_reserve_tokens: int = 2048` — headroom reserved for the response in `check_context_size` diff --git a/navi/config.py b/navi/config.py index ca8744a..9442840 100644 --- a/navi/config.py +++ b/navi/config.py @@ -223,7 +223,7 @@ context_compression_enabled: bool = True context_compression_threshold: float = 0.90 # trigger at 90% of ollama_num_ctx context_compression_target: float = 0.65 # hysteresis target — after compression the kept region should fit ~65% of the window (trigger 90% → target 65% leaves real headroom instead of skimming just below the trigger and re-firing a few messages later) - context_keep_recent: int = 8 # conversational turns to keep verbatim + context_keep_recent: int = 4 # conversational turns to keep verbatim context_summary_temperature: float = 0.3 context_summary_max_tokens: int = 6000 # max output tokens for the summary LLM call output_reserve_tokens: int = 2048 # headroom reserved for model response in context checks diff --git a/tests/unit/api/test_session_info.py b/tests/unit/api/test_session_info.py index 935089d..acba3d9 100644 --- a/tests/unit/api/test_session_info.py +++ b/tests/unit/api/test_session_info.py @@ -197,7 +197,7 @@ assert info["context_token_count"] == 51013 assert info["archive_threshold"] == 2050 assert info["compression"]["enabled"] is True - assert info["compression"]["keep_recent"] == 8 + assert info["compression"]["keep_recent"] == 4 async def test_a_profile_override_replaces_the_compression_default(self): info = await _call(profile=_profile(compression_keep_recent=3, diff --git a/tests/unit/core/test_agent.py b/tests/unit/core/test_agent.py index 8e89079..4f56c3c 100644 --- a/tests/unit/core/test_agent.py +++ b/tests/unit/core/test_agent.py @@ -646,7 +646,7 @@ @pytest_asyncio.fixture async def session_with_history(self, agent, session): """A session with enough turns that there is something to summarize.""" - # context_keep_recent defaults to 8 turns; add 10 so the oldest turns + # context_keep_recent defaults to 4 turns; add 10 so the oldest turns # fall into to_summarize (>= 2 messages) and compress_context does work. for i in range(10): session.context.append(Message(role="user", content=f"user {i}"))