vibe/tests/agent_loop/e2e/test_e2e_compaction.py
Laure Hugo e607ccbb00
v2.18.0 (#843)
Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai>
Co-authored-by: Cyprien <courtot.c@gmail.com>
Co-authored-by: Guillaume LE GOFF <guillaume.lgf@gmail.com>
Co-authored-by: Jean Burellier <sheplu@users.noreply.github.com>
Co-authored-by: Kim-Adeline Miguel <51720070+kimadeline@users.noreply.github.com>
Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai>
Co-authored-by: Nelson PROIA <144663685+Nelson-PROIA@users.noreply.github.com>
Co-authored-by: Paul VEZIA <166131032+le-codeur-rapide@users.noreply.github.com>
Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai>
Co-authored-by: Quentin <quentin.torroba@mistral.ai>
Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com>
Co-authored-by: josephine-delas <57808586+josephine-delas@users.noreply.github.com>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
2026-06-25 16:08:45 +02:00

82 lines
2.8 KiB
Python

from __future__ import annotations
import pytest
from tests.agent_loop.e2e.conftest import MistralAPI, build_e2e_agent_loop
from tests.backend.data.mistral import mistral_completion
from tests.conftest import build_test_vibe_config, make_test_models
from vibe.core.types import CompactStartEvent
COMPACTION_MODELS = make_test_models(auto_compact_threshold=1)
@pytest.mark.asyncio
async def test_auto_compaction_preserves_user_message_and_embeds_summary(
mistral_api: MistralAPI,
) -> None:
mistral_api.reply(
# First: the compaction summary
mistral_completion("A summary of what happened so far"),
# Then: the final answer to user message
mistral_completion("final answer"),
)
agent = build_e2e_agent_loop(
config=build_test_vibe_config(models=COMPACTION_MODELS)
)
agent.stats.context_tokens = 5 # Trigger the auto-compaction immediately
events = [event async for event in agent.act("Investigate the bug")]
assert any(isinstance(e, CompactStartEvent) for e in events)
sent_after_compaction = mistral_api.model_facing_text(1)
assert "Investigate the bug" in sent_after_compaction
assert "A summary of what happened so far" in sent_after_compaction
@pytest.mark.asyncio
async def test_repeated_auto_compaction_preserves_earlier_user_messages(
mistral_api: MistralAPI,
) -> None:
mistral_api.reply(
mistral_completion("summary one"),
mistral_completion("reply one"),
mistral_completion("summary two"),
mistral_completion("reply two"),
)
agent = build_e2e_agent_loop(
config=build_test_vibe_config(models=COMPACTION_MODELS)
)
agent.stats.context_tokens = 5
[_ async for _ in agent.act("first ask")]
agent.stats.context_tokens = 5
[_ async for _ in agent.act("second ask")]
sent_after_second_compaction = mistral_api.model_facing_text(3)
assert "first ask" in sent_after_second_compaction
assert "second ask" in sent_after_second_compaction
@pytest.mark.asyncio
async def test_oversized_user_message_is_middle_truncated_in_compaction(
mistral_api: MistralAPI,
) -> None:
huge_message = "alpha " * 20_000
mistral_api.reply(
mistral_completion("summary intro"),
mistral_completion("reply intro"),
mistral_completion("summary huge"),
mistral_completion("reply huge"),
)
agent = build_e2e_agent_loop(
config=build_test_vibe_config(models=COMPACTION_MODELS)
)
agent.stats.context_tokens = 5
[_ async for _ in agent.act("intro")]
agent.stats.context_tokens = 5
[_ async for _ in agent.act(huge_message)]
sent_after_second_compaction = mistral_api.model_facing_text(3)
assert "[... truncated ...]" in sent_after_second_compaction
assert "intro" not in sent_after_second_compaction