123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import csv
- from django.shortcuts import render
- from django.http import HttpResponse
- from .models import EvalSession, EvalAnswer, EvalConfig, QA
- def eval_download_results(request, session_id):
- session = EvalSession.objects.get(id=session_id)
- eval_answers = EvalAnswer.objects.filter(eval_session=session).order_by('question__id')
- response = HttpResponse(content_type='text/csv')
- writer = csv.writer(response)
- writer.writerow(['Question ID', 'Question', 'Correct Answer', 'Correct Answer Index', 'Instruction', 'Assistant answer', 'Is Correct'])
- for eval_answer in eval_answers:
- writer.writerow([
- eval_answer.question.id,
- eval_answer.question.question,
- eval_answer.question.correct_answer,
- eval_answer.question.correct_answer_idx,
- eval_answer.instruction,
- eval_answer.assistant_answer,
- eval_answer.is_correct])
- response['Content-Disposition'] = f'attachment; filename="{session.name}.csv"'
- return response
- def config_download_results(request, config_id):
- response = HttpResponse(content_type='text/csv')
- config = EvalConfig.objects.get(id=config_id)
- sessions = EvalSession.objects.filter(config=config).filter(is_active=True)
-
- extra_info_fields = []
- questions = dict()
- for qa in QA.objects.filter(dataset=config.dataset):
- questions[qa.id] = qa
- if not extra_info_fields and qa.extra_info:
- extra_info_fields = qa.extra_info.keys()
-
- models_data = {}
- for session in sessions:
- eval_answers = EvalAnswer.objects.filter(eval_session=session).order_by('question__id')
- data = {}
- for eval_answer in eval_answers:
- data[eval_answer.question.id] = 1 if eval_answer.is_correct else 0
- models_data[f"{session.llm_model.name} [{session.name}]"] = data
- writer = csv.writer(response)
- writer.writerow(['Question ID'] + ['Question Text'] +
- [x for x in extra_info_fields] +
- [model_name for model_name in models_data.keys()])
-
- for question_id in models_data[list(models_data.keys())[0]].keys():
- if questions[question_id].xid:
- qid = questions[question_id].xid
- else:
- qid = question_id
- row = [qid] + [questions[question_id].question] +\
- [questions[question_id].extra_info.get(field, '') for field in extra_info_fields] +\
- [data.get(question_id, '') for data in models_data.values()]
- writer.writerow(row)
- row = ['Accuracy'] + [''] + ['' for _ in extra_info_fields] + [f"{sum(data.values()) / len(data) * 100:.2f}%" for data in models_data.values()]
- writer.writerow(row)
- response['Content-Disposition'] = f'attachment; filename="{config.name}.csv"'
- return response
|