Files
TradeBot/tests/test_llm_advisor.py
Курнат Андрей de9de755f5 Initial TradeBot implementation
2026-06-20 19:22:59 +03:00

53 lines
1.7 KiB
Python

from __future__ import annotations
from crypto_spot_bot.llm_advisor import LlmAdvisor, _extract_json
from crypto_spot_bot.storage import Storage
def test_extract_json_from_fenced_response() -> None:
data = _extract_json(
"""
```json
{"market_regime":"range","risk_level":"low","confidence_adjustment":0.02}
```
"""
)
assert data["market_regime"] == "range"
assert data["confidence_adjustment"] == 0.02
def test_llm_advisor_parse_clamps_adjustment(make_settings, tmp_path) -> None:
settings = make_settings(tmp_path, llm_advisor_max_adjustment=0.05)
advisor = LlmAdvisor(settings, Storage(settings.database_path))
advice = advisor._parse(
"BTCUSDT",
'{"market_regime":"breakout","risk_level":"high","confidence_adjustment":0.5,'
'"block_entry":true,"grid_suitable":false,"reason_ru":"тест"}',
)
assert advice.model == "gemma4:e4b"
assert advice.market_regime == "breakout"
assert advice.risk_level == "high"
assert advice.confidence_adjustment == 0.05
assert advice.block_entry is True
def test_storage_records_llm_advice(make_settings, tmp_path) -> None:
settings = make_settings(tmp_path)
storage = Storage(settings.database_path)
storage.insert_llm_advice(
symbol="BTCUSDT",
model="gemma4:e4b",
prompt_json={"symbol": "BTCUSDT"},
response_text='{"confidence_adjustment":0}',
advice_json={"confidence_adjustment": 0.0, "reason_ru": "нейтрально"},
)
items = storage.recent_llm_advice(limit=1)
assert items[0]["model"] == "gemma4:e4b"
assert items[0]["prompt"]["symbol"] == "BTCUSDT"
assert items[0]["advice"]["reason_ru"] == "нейтрально"