fix: recalculate regime after LLM refresh
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|||||||
Reference in New Issue
Block a user