Import tests: tests/test_synthesizer
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,80 @@
|
|||||||
|
import pytest
|
||||||
|
from unittest.mock import AsyncMock
|
||||||
|
from axon.models import SearchResult
|
||||||
|
|
||||||
|
|
||||||
|
def make_results(n=3):
|
||||||
|
return [
|
||||||
|
SearchResult(title=f"T{i}", url=f"https://ex{i}.com", content=f"Content {i}", score=0.9)
|
||||||
|
for i in range(n)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_synthesize_answer_returns_string(monkeypatch):
|
||||||
|
fake_response = {
|
||||||
|
"choices": [{"message": {"content": "The answer is 42."}}]
|
||||||
|
}
|
||||||
|
|
||||||
|
class FakeResponse:
|
||||||
|
def raise_for_status(self): pass
|
||||||
|
def json(self): return fake_response
|
||||||
|
|
||||||
|
class FakeClient:
|
||||||
|
async def __aenter__(self): return self
|
||||||
|
async def __aexit__(self, *_): pass
|
||||||
|
async def post(self, *args, **kwargs): return FakeResponse()
|
||||||
|
|
||||||
|
monkeypatch.setattr("axon.services.synthesizer.httpx.AsyncClient", FakeClient)
|
||||||
|
|
||||||
|
from axon.services.synthesizer import synthesize_answer
|
||||||
|
answer = await synthesize_answer("What is the answer?", make_results())
|
||||||
|
assert answer == "The answer is 42."
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_synthesize_answer_empty_results():
|
||||||
|
from axon.services.synthesizer import synthesize_answer
|
||||||
|
answer = await synthesize_answer("query", [])
|
||||||
|
assert "No search results" in answer
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_generate_sub_queries_parses_lines(monkeypatch):
|
||||||
|
fake_response = {
|
||||||
|
"choices": [{"message": {"content": "Query one\nQuery two\nQuery three"}}]
|
||||||
|
}
|
||||||
|
|
||||||
|
class FakeResponse:
|
||||||
|
def raise_for_status(self): pass
|
||||||
|
def json(self): return fake_response
|
||||||
|
|
||||||
|
class FakeClient:
|
||||||
|
async def __aenter__(self): return self
|
||||||
|
async def __aexit__(self, *_): pass
|
||||||
|
async def post(self, *args, **kwargs): return FakeResponse()
|
||||||
|
|
||||||
|
monkeypatch.setattr("axon.services.synthesizer.httpx.AsyncClient", FakeClient)
|
||||||
|
|
||||||
|
from axon.services.synthesizer import generate_sub_queries
|
||||||
|
queries = await generate_sub_queries("main topic", count=3)
|
||||||
|
assert len(queries) == 3
|
||||||
|
assert queries[0] == "Query one"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_generate_sub_queries_fallback_on_error(monkeypatch):
|
||||||
|
import httpx
|
||||||
|
|
||||||
|
class FakeClient:
|
||||||
|
async def __aenter__(self): return self
|
||||||
|
async def __aexit__(self, *_): pass
|
||||||
|
async def post(self, *args, **kwargs):
|
||||||
|
raise httpx.ConnectError("LLM down")
|
||||||
|
|
||||||
|
monkeypatch.setattr("axon.services.synthesizer.httpx.AsyncClient", FakeClient)
|
||||||
|
|
||||||
|
from axon.services.synthesizer import generate_sub_queries
|
||||||
|
queries = await generate_sub_queries("main topic", count=3)
|
||||||
|
assert len(queries) == 3
|
||||||
|
assert "main topic" in queries[0]
|
||||||
Reference in New Issue
Block a user