fix: recalculate regime after LLM refresh

This commit is contained in:
2026-07-15 09:44:48 +02:00
parent 81c6f5fe2f
commit ced066dc01
2 changed files with 36 additions and 1 deletions
+2 -1
View File
@@ -120,8 +120,9 @@ async def refresh_regime_fundamentals(
_admin: User = Depends(require_admin), _admin: User = Depends(require_admin),
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
) -> APIEnvelope: ) -> APIEnvelope:
"""Ask the configured LLM to re-estimate F1/F3 now (forces past a lock).""" """Refresh F1/F3 via LLM, then recompute the latest eligible snapshot."""
data = await regime_monitor_service.refresh_fundamental_overrides(db, force=True) data = await regime_monitor_service.refresh_fundamental_overrides(db, force=True)
await regime_monitor_service.update_regime_monitor(db)
return APIEnvelope(status="success", data=data) return APIEnvelope(status="success", data=data)
+34
View File
@@ -10,6 +10,7 @@ import pytest
from sqlalchemy import select from sqlalchemy import select
from app.models.regime_snapshot import RegimeSnapshot from app.models.regime_snapshot import RegimeSnapshot
from app.routers import market as market_router
from app.services import regime_monitor_service as rms from app.services import regime_monitor_service as rms
from app.services.regime_monitor_service import ( from app.services.regime_monitor_service import (
DEFAULT_CONFIG, DEFAULT_CONFIG,
@@ -222,6 +223,39 @@ async def test_routine_can_refresh_latest_trading_session_after_civil_day_rolls(
assert rewrites == [True] assert rewrites == [True]
@pytest.mark.asyncio
async def test_manual_llm_refresh_recomputes_latest_regime_snapshot(monkeypatch):
calls: list[str] = []
refreshed = {"f1_score": 0.0, "f3_score": 100.0}
async def fake_refresh(_db, force):
assert force is True
calls.append("refresh")
return refreshed
async def fake_recompute(_db):
calls.append("recompute")
return {"available": True}
monkeypatch.setattr(
market_router.regime_monitor_service,
"refresh_fundamental_overrides",
fake_refresh,
)
monkeypatch.setattr(
market_router.regime_monitor_service,
"update_regime_monitor",
fake_recompute,
)
response = await market_router.refresh_regime_fundamentals(
_admin=object(), db=object()
)
assert calls == ["refresh", "recompute"]
assert response.data == refreshed
def test_compute_index_uses_one_max_price_vote_and_has_no_combined_score(): def test_compute_index_uses_one_max_price_vote_and_has_no_combined_score():
end = date(2026, 6, 26) end = date(2026, 6, 26)
rising = [100.0 + index * 0.2 for index in range(700)] rising = [100.0 + index * 0.2 for index in range(700)]