| 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 |
|
|
| |
| with open("eval/eval_dataset.json") as f: |
| eval_data = json.load(f) |
|
|
| |
| in_scope = [q for q in eval_data if q["type"] != "out_of_scope"] |
|
|
| |
| session = ingest("corpus/d2l-en.pdf") |
|
|
| |
| questions = [] |
| answers = [] |
| contexts = [] |
| ground_truths = [] |
|
|
| for item in in_scope: |
| query = item["question"] |
| response, _ = pipeline(session, query) |
|
|
| |
| 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"]) |
|
|
| |
| dataset = Dataset.from_dict({ |
| "question": questions, |
| "answer": answers, |
| "contexts": contexts, |
| "ground_truth": ground_truths |
| }) |
|
|
| |
| 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" |
| ) |
| |
| 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) |
|
|