34a7f00cb3
- Add tests/test_discussion_compression.py to verify AI sub-agent compression logic across Gemini, Anthropic, DeepSeek, and Gemini CLI providers. - Add tests/test_discussion_metrics.py to verify AppController correctly extracts and accumulates token usage (input/output/cache) and logs token history.
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
import pytest
|
|
from src.app_controller import AppController
|
|
|
|
@pytest.fixture
|
|
def controller():
|
|
c = AppController()
|
|
c.init_state()
|
|
return c
|
|
|
|
def test_on_comms_entry_updates_metrics(controller: AppController):
|
|
# Initial state
|
|
assert controller.session_usage["input_tokens"] == 0
|
|
assert controller.session_usage["output_tokens"] == 0
|
|
assert len(controller._token_history) == 0
|
|
|
|
# Simulate an AI response with usage
|
|
payload = {
|
|
"text": "Hello world",
|
|
"usage": {
|
|
"input_tokens": 100,
|
|
"output_tokens": 50,
|
|
"cache_read_input_tokens": 10,
|
|
"cache_creation_input_tokens": 5,
|
|
"total_tokens": 165
|
|
},
|
|
"model": "test-model"
|
|
}
|
|
entry = {
|
|
"kind": "response",
|
|
"payload": payload,
|
|
"ts": "2024-01-01T00:00:00"
|
|
}
|
|
|
|
controller._on_comms_entry(entry)
|
|
|
|
# Verify metrics updated
|
|
assert controller.session_usage["input_tokens"] == 100
|
|
assert controller.session_usage["output_tokens"] == 50
|
|
assert controller.session_usage["cache_read_input_tokens"] == 10
|
|
assert controller.session_usage["cache_creation_input_tokens"] == 5
|
|
assert controller.session_usage["total_tokens"] == 165
|
|
|
|
# Verify token history recorded
|
|
assert len(controller._token_history) == 1
|
|
assert controller._token_history[0]["input"] == 100
|
|
assert controller._token_history[0]["output"] == 50
|
|
assert controller._token_history[0]["model"] == "test-model"
|
|
|
|
def test_on_comms_entry_accumulates_metrics(controller: AppController):
|
|
# First response
|
|
controller._on_comms_entry({
|
|
"kind": "response",
|
|
"payload": {"usage": {"input_tokens": 100, "output_tokens": 50}}
|
|
})
|
|
# Second response
|
|
controller._on_comms_entry({
|
|
"kind": "response",
|
|
"payload": {"usage": {"input_tokens": 200, "output_tokens": 20}}
|
|
})
|
|
|
|
assert controller.session_usage["input_tokens"] == 300
|
|
assert controller.session_usage["output_tokens"] == 70
|
|
assert len(controller._token_history) == 2
|