forked from recursiveai/flow_benchmark_tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmark_case.py
34 lines (25 loc) · 1.01 KB
/
benchmark_case.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Copyright 2024 Recursive AI
from typing import Any
from pydantic import BaseModel, model_validator
from .exit_code import ExitCode
class BenchmarkCase(BaseModel):
"""
Data class used to define semantic benchmarks
"""
query: str
reference_answer: str | None = None
reference_answer_file: str | None = None
labels: list[str] | None = None
extras: dict[str, Any] | None = None
@model_validator(mode="after")
def answer_validator(self):
if self.reference_answer is None and self.reference_answer_file is None:
raise ValueError("Both reference_answer and reference_answer_file are None")
if self.reference_answer is None and self.reference_answer_file is not None:
with open(self.reference_answer_file, "r") as file:
self.reference_answer = file.read()
return self
class BenchmarkCaseResponse(BaseModel):
response: str | None = None
extras: dict[str, Any] | None = None
exit_code: ExitCode = ExitCode.SUCCESS