Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| """Shared pytest fixtures for evaluation-framework tests.""" | |
| from __future__ import annotations | |
| import json | |
| from pathlib import Path | |
| import pytest | |
| from src.llm.client import LLMClient | |
| class FakeLLMClient(LLMClient): | |
| """LLM client that returns a canned response per call. | |
| Tests pass `responses` as a list; each call pops the first item. | |
| """ | |
| def __init__(self, responses: list[str]): | |
| self.responses = list(responses) | |
| self.calls: list[dict] = [] | |
| def call(self, prompt_template: str, variables: dict, expert_knowledge: str = "") -> str: | |
| self.calls.append({ | |
| "template": prompt_template, | |
| "variables": variables, | |
| "knowledge": expert_knowledge, | |
| }) | |
| if not self.responses: | |
| raise RuntimeError("FakeLLMClient: no more responses queued") | |
| return self.responses.pop(0) | |
| def fake_llm(): | |
| """Factory fixture: call `fake_llm([response1, response2, ...])` to create one.""" | |
| return lambda responses: FakeLLMClient(responses) | |
| def articles_dir(tmp_path): | |
| """Empty tmp articles directory. Tests populate it with `write_article`.""" | |
| d = tmp_path / "articles" | |
| d.mkdir() | |
| return d | |
| def write_article(articles_dir): | |
| """Write an article JSON file matching the scraper's output format. | |
| Usage in test: | |
| write_article(event_id="2025-0042-ITA", url="https://news/x", | |
| title="Flood hits Milan", date="2025-06-01", text="...") | |
| """ | |
| def _write(event_id, url, title, date, text, hash_suffix="aaaa1111"): | |
| filename = f"{event_id}_{hash_suffix}.json" | |
| (articles_dir / filename).write_text( | |
| json.dumps({"url": url, "title": title, "date": date, "text": text}), | |
| encoding="utf-8", | |
| ) | |
| return articles_dir / filename | |
| return _write | |