82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
import pytest
|
|
from datasets import Dataset
|
|
|
|
from haiku.rag.client import HaikuRAG
|
|
from haiku.rag.config import Config
|
|
from haiku.rag.qa.agent import QuestionAnswerAgent
|
|
|
|
from .llm_judge import LLMJudge
|
|
|
|
OPENAI_AVAILABLE = bool(Config.OPENAI_API_KEY)
|
|
ANTHROPIC_AVAILABLE = bool(Config.ANTHROPIC_API_KEY)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_qa_ollama(qa_corpus: Dataset, temp_db_path):
|
|
"""Test Ollama QA with LLM judge."""
|
|
client = HaikuRAG(temp_db_path)
|
|
qa = QuestionAnswerAgent(client, "ollama", "qwen3")
|
|
llm_judge = LLMJudge()
|
|
|
|
doc = qa_corpus[1]
|
|
await client.create_document(
|
|
content=doc["document_extracted"], uri=doc["document_id"]
|
|
)
|
|
|
|
question = doc["question"]
|
|
expected_answer = doc["answer"]
|
|
|
|
answer = await qa.answer(question)
|
|
is_equivalent = await llm_judge.judge_answers(question, answer, expected_answer)
|
|
|
|
assert is_equivalent, (
|
|
f"Generated answer not equivalent to expected answer.\nQuestion: {question}\nGenerated: {answer}\nExpected: {expected_answer}"
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skipif(not OPENAI_AVAILABLE, reason="OpenAI not available")
|
|
async def test_qa_openai(qa_corpus: Dataset, temp_db_path):
|
|
"""Test OpenAI QA with LLM judge."""
|
|
client = HaikuRAG(temp_db_path)
|
|
qa = QuestionAnswerAgent(client, "openai", "gpt-4o-mini")
|
|
llm_judge = LLMJudge()
|
|
|
|
doc = qa_corpus[1]
|
|
await client.create_document(
|
|
content=doc["document_extracted"], uri=doc["document_id"]
|
|
)
|
|
|
|
question = doc["question"]
|
|
expected_answer = doc["answer"]
|
|
|
|
answer = await qa.answer(question)
|
|
is_equivalent = await llm_judge.judge_answers(question, answer, expected_answer)
|
|
|
|
assert is_equivalent, (
|
|
f"Generated answer not equivalent to expected answer.\nQuestion: {question}\nGenerated: {answer}\nExpected: {expected_answer}"
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skipif(not ANTHROPIC_AVAILABLE, reason="Anthropic not available")
|
|
async def test_qa_anthropic(qa_corpus: Dataset, temp_db_path):
|
|
"""Test Anthropic QA with LLM judge."""
|
|
client = HaikuRAG(temp_db_path)
|
|
qa = QuestionAnswerAgent(client, "anthropic", "claude-3-5-haiku-20241022")
|
|
llm_judge = LLMJudge()
|
|
|
|
doc = qa_corpus[1]
|
|
await client.create_document(
|
|
content=doc["document_extracted"], uri=doc["document_id"]
|
|
)
|
|
|
|
question = doc["question"]
|
|
expected_answer = doc["answer"]
|
|
|
|
answer = await qa.answer(question)
|
|
is_equivalent = await llm_judge.judge_answers(question, answer, expected_answer)
|
|
|
|
assert is_equivalent, (
|
|
f"Generated answer not equivalent to expected answer.\nQuestion: {question}\nGenerated: {answer}\nExpected: {expected_answer}"
|
|
)
|