| from __future__ import annotations |
|
|
| import pickle |
| from pathlib import Path |
|
|
| from app.models.graph.infer import infer_graph_risk |
|
|
|
|
| class BrokenProbabilityModel: |
| def predict_proba(self, _encoded): |
| raise AttributeError("multi_class") |
|
|
|
|
| class FakeLabelBinarizer: |
| classes_ = ["dizziness"] |
|
|
|
|
| def test_graph_inference_uses_deterministic_fallback_for_stale_model(tmp_path: Path) -> None: |
| model_path = tmp_path / "graph_model.pkl" |
| with model_path.open("wb") as handle: |
| pickle.dump( |
| { |
| "severe_model": BrokenProbabilityModel(), |
| "side_model": BrokenProbabilityModel(), |
| "mlb": FakeLabelBinarizer(), |
| }, |
| handle, |
| ) |
|
|
| risk = infer_graph_risk(["warfarin", "aspirin"], model_path=model_path) |
|
|
| assert 0.0 <= risk["severe_alert_probability"] <= 1.0 |
| assert isinstance(risk["side_effect_probs"], dict) |
| assert "warfarin__aspirin" in risk["pairwise_ddi_severity"] |
|
|