Skip to content

Commit e82f8c0

Browse files
committed
fix: manage evalset and tracing file uniformly in one function
1 parent 15e3af5 commit e82f8c0

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

tests/test_evaluator.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def test_evaluator():
129129
with open(eval_set_file_path, "w") as f:
130130
json.dump(EVAL_SET_DATA, f)
131131

132-
base_evaluator.generate_eval_data(eval_set_file_path=eval_set_file_path)
132+
base_evaluator.generate_eval_data(file_path=eval_set_file_path)
133133

134134
assert len(base_evaluator.invocation_list) == 1
135135
assert len(base_evaluator.invocation_list[0].invocations) == 1
@@ -141,17 +141,15 @@ def test_evaluator():
141141
os.remove(eval_set_file_path)
142142

143143

144-
def test_evaluator_using_tracing():
144+
def test_tracing_file_to_evalset():
145145
base_evaluator = BaseEvaluator(agent=None, name="test_evaluator")
146146

147147
# save data to file
148-
tracing_set_file_path = "./tracing_set_for_test_evaluator.json"
149-
with open(tracing_set_file_path, "w") as f:
148+
tracing_file_path = "./tracing_for_test_evaluator.json"
149+
with open(tracing_file_path, "w") as f:
150150
json.dump(TRACE_SET_DATA, f)
151151

152-
base_evaluator.generate_eval_data_from_tracing(
153-
tracing_set_file_path=tracing_set_file_path
154-
)
152+
base_evaluator.generate_eval_data(file_path=tracing_file_path)
155153

156154
assert len(base_evaluator.invocation_list) == 1
157155
assert len(base_evaluator.invocation_list[0].invocations) == 1
@@ -160,4 +158,4 @@ def test_evaluator_using_tracing():
160158
== "e-ea6bb35b-c3f0-4c5c-b127-c71c7d6d6441"
161159
)
162160

163-
os.remove(tracing_set_file_path)
161+
os.remove(tracing_file_path)

veadk/evaluation/base_evaluator.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,14 @@ def load_eval_set(self, eval_set_file: str) -> EvalSet:
8787

8888
return load_eval_set_from_file(eval_set_file)
8989

90-
def generate_eval_data(self, eval_set_file_path: str):
91-
eval_case_data_list: list[EvalCaseData] = []
92-
eval_cases = self.load_eval_set(eval_set_file_path).eval_cases
93-
self.generate_invocation_data(eval_cases, eval_case_data_list)
94-
95-
def load_tracing_set(self, tracing_set_file_path: str) -> EvalSet:
96-
with open(tracing_set_file_path, "r") as f:
97-
tracing_data = json.load(f)
90+
def load_eval_set_from_tracing(self, tracing_file: str) -> EvalSet:
91+
try:
92+
with open(tracing_file, "r") as f:
93+
tracing_data = json.load(f)
94+
except json.JSONDecodeError as e:
95+
raise ValueError(f"Invalid JSON format in file {tracing_file}: {e}")
96+
except Exception as e:
97+
raise ValueError(f"Error reading file {tracing_file}: {e}")
9898

9999
# Group spans by trace_id
100100
trace_groups = {}
@@ -188,14 +188,33 @@ def load_tracing_set(self, tracing_set_file_path: str) -> EvalSet:
188188

189189
return evalset
190190

191-
def generate_eval_data_from_tracing(self, tracing_set_file_path: str):
191+
def generate_eval_data(self, file_path: str):
192+
"""Generate evaluation data from a given file and assign it to the class attribute `invocation_list`."""
192193
eval_case_data_list: list[EvalCaseData] = []
193-
eval_cases = self.load_tracing_set(tracing_set_file_path).eval_cases
194-
self.generate_invocation_data(eval_cases, eval_case_data_list)
195194

196-
def generate_invocation_data(
197-
self, eval_cases: list[EvalSet], eval_case_data_list: list[EvalCaseData]
198-
):
195+
try:
196+
with open(file_path, "r") as f:
197+
file_content = json.load(f)
198+
except json.JSONDecodeError as e:
199+
raise ValueError(f"Invalid JSON format in file {file_path}: {e}")
200+
except Exception as e:
201+
raise ValueError(f"Error reading file {file_path}: {e}")
202+
203+
if isinstance(file_content, dict) and "eval_cases" in file_content:
204+
eval_cases = self.load_eval_set(file_path).eval_cases
205+
elif (
206+
isinstance(file_content, list)
207+
and len(file_content) > 0
208+
and all(
209+
isinstance(span, dict) and "trace_id" in span for span in file_content
210+
)
211+
):
212+
eval_cases = self.load_eval_set_from_tracing(file_path).eval_cases
213+
else:
214+
raise ValueError(
215+
f"Unsupported file format in {file_path}. Please provide a valid file."
216+
)
217+
199218
for eval_case in eval_cases:
200219
eval_case_data = EvalCaseData(invocations=[])
201220
self.agent_information_list.append(

0 commit comments

Comments
 (0)