File size: 1,086 Bytes
6d86412
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from __future__ import annotations

import pytest

from backend.app.services import campaign_vectorizer
from backend.app.services.campaign_vectorizer import FEATURE_KEYS, extract_campaign_features


def test_extract_campaign_features_explicitly_falls_back_when_llm_errors(
    monkeypatch: pytest.MonkeyPatch,
) -> None:
    monkeypatch.setattr(campaign_vectorizer.settings, "ollama_api_key", "present-for-test")
    monkeypatch.setattr(campaign_vectorizer, "embed_text", lambda _text: [0.0] * 384)

    def _raise_llm_error(*_args, **_kwargs):
        raise ConnectionError("simulated provider outage")

    monkeypatch.setattr(campaign_vectorizer, "llm_create", _raise_llm_error)

    result = extract_campaign_features(
        "Oncology campaign for senior KOLs focused on phase 3 evidence, safety, and guideline alignment."
    )

    assert result["model"] == "fallback-llm-error"
    assert list(result["features"]) == FEATURE_KEYS
    assert list(result["normalized_features"]) == FEATURE_KEYS
    assert all(0.0 <= float(value) <= 1.0 for value in result["features"].values())