from __future__ import annotations from pathlib import Path import pytest from agentic_search.budget import BudgetManager from agentic_search.config import load_config from agentic_search.data.schemas import Document from agentic_search.retrieval import DenseRetriever, DocumentStore, Reranker, SparseRetriever from agentic_search.sdk.runtime import SearchRuntime from agentic_search.tracing.schemas import RunMetadata from agentic_search.tracing.writer import TraceWriter @pytest.fixture def documents() -> list[Document]: return [ Document( doc_id="ada", title="Ada Lovelace", text="Ada Lovelace wrote notes about Charles Babbage's Analytical Engine.", source="fixture", dataset="fixture", ), Document( doc_id="babbage", title="Charles Babbage", text="Charles Babbage designed the Analytical Engine in London.", source="fixture", dataset="fixture", ), Document( doc_id="other", title="Other", text="This unrelated passage discusses a different machine.", source="fixture", dataset="fixture", ), ] @pytest.fixture def runtime(tmp_path: Path, documents: list[Document]) -> SearchRuntime: config = load_config() metadata = RunMetadata( run_id="test-run", example_id="test-example", system="test", config_hash="config", corpus_hash="corpus", model_name="test-model", model_endpoints=[], seed=42, ) return SearchRuntime( store=DocumentStore(documents), sparse=SparseRetriever(documents), dense=DenseRetriever(documents, backend="hashing", dimensions=64), reranker=Reranker(backend="lexical", model_name="unused", device="cpu", batch_size=2, max_length=128), budget=BudgetManager(config.budget), trace=TraceWriter(tmp_path, metadata), )