ragify / eval /ragas.py
lloydakresi's picture
working on ui
9892dcf
Raw
History Blame Contribute Delete
1.96 kB
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall
from ragas.llms import LangchainLLMWrapper
from ragas.run_config import RunConfig
from langchain_openai import ChatOpenAI
from ragas.embeddings import HuggingfaceEmbeddings
from datasets import Dataset
from app.pipeline import ingest, pipeline
import json
import os
# load eval dataset
with open("eval/eval_dataset.json") as f:
eval_data = json.load(f)
# filter out of scope questions
in_scope = [q for q in eval_data if q["type"] != "out_of_scope"]
# ingest d2l
session = ingest("corpus/d2l-en.pdf")
# run pipeline on each question
questions = []
answers = []
contexts = []
ground_truths = []
for item in in_scope:
query = item["question"]
response, _ = pipeline(session, query)
# get contexts directly from retrieval
from app.retrieval import retrieval_and_reranking
top_k_chunks, _ = retrieval_and_reranking(session, query)
chunk_texts = top_k_chunks["documents"]
questions.append(query)
answers.append(response)
contexts.append(chunk_texts)
ground_truths.append(item["ideal_answer"])
# build dataset
dataset = Dataset.from_dict({
"question": questions,
"answer": answers,
"contexts": contexts,
"ground_truth": ground_truths
})
# configure groq as the eval llm
llm = LangchainLLMWrapper(
ChatOpenAI(
model="llama-3.1-8b-instant",
openai_api_key=os.getenv("GROQ_INFERENCE_KEY"),
openai_api_base="https://api.groq.com/openai/v1",
n=1
)
)
embeddings = HuggingfaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
# run evaluation
results = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision, context_recall],
llm=llm,
embeddings=embeddings,
run_config=RunConfig(max_workers=2, timeout=120)
)
print(results)
results.to_pandas().to_csv("eval_results.csv", index=False)