clear-eval 2.0.2__tar.gz → 2.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {clear_eval-2.0.2 → clear_eval-2.0.3}/PKG-INFO +1 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/pyproject.toml +1 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/agentic_workflow_dashboard.py +35 -8
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/argument_definitions.py +9 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/base_clear_runner.py +6 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/run_trajectory_evaluation_pipeline.py +30 -2
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/base_evaluator.py +7 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/full_trajectory_evaluator.py +130 -215
- clear_eval-2.0.3/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/full_trajectory_prompts.py +229 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/process_langfuse_traces.py +81 -6
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/run_clear_agentic_eval.py +8 -2
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/default_agentic_config.yaml +13 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/utils.py +5 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/PKG-INFO +1 -1
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/SOURCES.txt +1 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/LICENSE +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/README.md +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/setup.cfg +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/generate_static_dashboard.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/launch_dashboard.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/path_analysis.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/build_json_results.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/create_ui_input.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/issues_clear_runner.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/root_cause_clear_runner.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/run_clear_analysis.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/rubric_evaluator.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/rubric_generator.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/task_success_evaluator.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/compact_trace_formatter.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/preprocess_traces.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/process_mlflow_traces.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/trace_utils.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/run_clear_step_analysis.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/config_example.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/config_example.yaml +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/rh_config_example.yaml +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/test_tools_config_example.yaml +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/analysis_runner.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/args.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/cli.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/dashboard/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/dashboard/show_analysis_dashboard.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/load_ui.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/logging_config.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/caching_utils.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/config_loader.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/constants.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/eval_utils.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/evaluation_criteria.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/external_judge.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/full_pipeline.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/endpoint_backends.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/langchain_chat_models.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/llm_client.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/propmts.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/setup/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/setup/default_config.yaml +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/threading_utils.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/eval_use_case.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/external_judge_use_case.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/tool_call_use_case.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/use_case_utils.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/pipeline_summary.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-006eee07eed4484592661b1bdba32a75.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-0e0148ed21eeebc046f03f63e4418723.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-0e1ef041647642c958a8aaa1892fdb88.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-4ae9a4305b7a0319ec516ef4eef4ae17.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-4eead8c00e900cc84f217a9a10724ecf.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-50adf266e9c1522dae57a6290a61596f.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-554015d661e4f69cfc629b6d46898421.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-55a6003784e34390f47c5c929d8f4db0.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-5818239708258c81fff3a4bb0b144802.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-5e63ae3886b225ae89a07b7fa4aafe0d.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-640f5750b635929a88547548f0cbb4da.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-6b2d02f30d4f0d3f4ca7d8f1469913ae.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-6c852575331f2e0a02a331d1ddaae59f.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-8e68becd37326e6fec6a7d3d3b47dbbb.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-b35ed52266fd023dd808950c6848f062.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-bccc245d6d47cdf730fd5db3028b52a3.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-d6010cdc5e36a50046fc10f33f0bc427.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-edadad8b3a67a24a43d145ae07c0c12a.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-f082801e1021022e0756e7d089f1558c.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-f34a9851b31fafffe527c5b2d6262de8.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/unified_ui_results.zip +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/434f3f96ac470e805428c4be45b4f2a3.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/4c354cfb5b17f61af073df6796f2b236.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/4deb34a4521fcedf92083d0a93fe11d4.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/c685b7eb7826a87149bd2c42a50e47c5.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/ebf1d6897941adb63bcc62aa7c50e8f8.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-006eee07eed4484592661b1bdba32a75.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-0e0148ed21eeebc046f03f63e4418723.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-0e1ef041647642c958a8aaa1892fdb88.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-4ae9a4305b7a0319ec516ef4eef4ae17.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-4eead8c00e900cc84f217a9a10724ecf.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-50adf266e9c1522dae57a6290a61596f.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-554015d661e4f69cfc629b6d46898421.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-55a6003784e34390f47c5c929d8f4db0.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-5818239708258c81fff3a4bb0b144802.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-5e63ae3886b225ae89a07b7fa4aafe0d.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-640f5750b635929a88547548f0cbb4da.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-6b2d02f30d4f0d3f4ca7d8f1469913ae.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-6c852575331f2e0a02a331d1ddaae59f.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-8e68becd37326e6fec6a7d3d3b47dbbb.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-b35ed52266fd023dd808950c6848f062.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-bccc245d6d47cdf730fd5db3028b52a3.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-d6010cdc5e36a50046fc10f33f0bc427.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-edadad8b3a67a24a43d145ae07c0c12a.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-f082801e1021022e0756e7d089f1558c.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-f34a9851b31fafffe527c5b2d6262de8.json +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/__init__.py +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/analysis_results_gsm8k_default.zip +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/gsm8k_default_predictions.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/sample_data/tool_calls/tool_calls_sample_data.csv +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/dependency_links.txt +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/entry_points.txt +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/requires.txt +0 -0
- {clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "clear_eval"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.3"
|
|
8
8
|
description = "A python API sdk facilitating Error Analysis via LLM-as-a-Judge"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Lilach Eden", email = "lilache@il.ibm.com"},
|
{clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/agentic_workflow_dashboard.py
RENAMED
|
@@ -2174,7 +2174,8 @@ def main_page():
|
|
|
2174
2174
|
# Try to get dimensions from parsed_evaluation first (preferred structure)
|
|
2175
2175
|
step_quality = parsed_eval.get("step_quality_dimensions", {})
|
|
2176
2176
|
trajectory_dims = parsed_eval.get("trajectory_dimensions", {})
|
|
2177
|
-
|
|
2177
|
+
custom_dims = parsed_eval.get("dimensions", {})
|
|
2178
|
+
|
|
2178
2179
|
# Collect step quality dimension scores
|
|
2179
2180
|
for criterion, details in step_quality.items():
|
|
2180
2181
|
score = details.get("score")
|
|
@@ -2183,7 +2184,7 @@ def main_page():
|
|
|
2183
2184
|
all_dimension_scores[f"Step Quality: {criterion}"].append(float(score))
|
|
2184
2185
|
except (ValueError, TypeError):
|
|
2185
2186
|
print(f"⚠️ Warning: Could not convert score to float for {criterion}: {score}")
|
|
2186
|
-
|
|
2187
|
+
|
|
2187
2188
|
# Collect trace dimension scores
|
|
2188
2189
|
for criterion, details in trajectory_dims.items():
|
|
2189
2190
|
score = details.get("score")
|
|
@@ -2192,9 +2193,19 @@ def main_page():
|
|
|
2192
2193
|
all_dimension_scores[f"Trace: {criterion}"].append(float(score))
|
|
2193
2194
|
except (ValueError, TypeError):
|
|
2194
2195
|
print(f"⚠️ Warning: Could not convert score to float for {criterion}: {score}")
|
|
2195
|
-
|
|
2196
|
+
|
|
2197
|
+
# Collect custom flat dimension scores
|
|
2198
|
+
if custom_dims and not step_quality and not trajectory_dims:
|
|
2199
|
+
for criterion, details in custom_dims.items():
|
|
2200
|
+
score = details.get("score")
|
|
2201
|
+
if score is not None:
|
|
2202
|
+
try:
|
|
2203
|
+
all_dimension_scores[criterion].append(float(score))
|
|
2204
|
+
except (ValueError, TypeError):
|
|
2205
|
+
print(f"⚠️ Warning: Could not convert score to float for {criterion}: {score}")
|
|
2206
|
+
|
|
2196
2207
|
# Fallback: if no dimensions found in parsed_evaluation, try dimension_scores directly
|
|
2197
|
-
if not step_quality and not trajectory_dims and dimension_scores:
|
|
2208
|
+
if not step_quality and not trajectory_dims and not custom_dims and dimension_scores:
|
|
2198
2209
|
for criterion, score in dimension_scores.items():
|
|
2199
2210
|
if score is not None:
|
|
2200
2211
|
try:
|
|
@@ -3083,7 +3094,8 @@ def main_page():
|
|
|
3083
3094
|
# Separate step quality and trace dimensions
|
|
3084
3095
|
step_quality = parsed_eval.get("step_quality_dimensions", {})
|
|
3085
3096
|
trajectory_dims = parsed_eval.get("trajectory_dimensions", {})
|
|
3086
|
-
|
|
3097
|
+
custom_dims = parsed_eval.get("dimensions", {})
|
|
3098
|
+
|
|
3087
3099
|
if step_quality:
|
|
3088
3100
|
ui.html('<div style="font-weight: 600; color: #1E293B; margin: 12px 0 8px 0; font-size: 15px;">Step Quality Dimensions</div>')
|
|
3089
3101
|
for criterion, details in step_quality.items():
|
|
@@ -3091,7 +3103,7 @@ def main_page():
|
|
|
3091
3103
|
justification = details.get("justification", "No justification provided")
|
|
3092
3104
|
score_color = score_to_hex(score)
|
|
3093
3105
|
definition = get_dimension_definition(criterion)
|
|
3094
|
-
|
|
3106
|
+
|
|
3095
3107
|
with ui.row().classes("w-full items-center gap-2 mb-2"):
|
|
3096
3108
|
with ui.expansion(f"{criterion}: {score:.2f}", icon="check_circle").classes("flex-1").style(f"border-left: 4px solid {score_color};"):
|
|
3097
3109
|
ui.html(f"""
|
|
@@ -3101,7 +3113,7 @@ def main_page():
|
|
|
3101
3113
|
""")
|
|
3102
3114
|
with ui.button(icon="info", on_click=lambda: None).props("flat dense round size=sm").classes("text-blue-500"):
|
|
3103
3115
|
ui.tooltip(definition).classes("bg-slate-800 text-white text-sm max-w-md")
|
|
3104
|
-
|
|
3116
|
+
|
|
3105
3117
|
if trajectory_dims:
|
|
3106
3118
|
ui.html('<div style="font-weight: 600; color: #1E293B; margin: 20px 0 8px 0; font-size: 15px;">Trace-Level Dimensions</div>')
|
|
3107
3119
|
for criterion, details in trajectory_dims.items():
|
|
@@ -3109,7 +3121,7 @@ def main_page():
|
|
|
3109
3121
|
justification = details.get("justification", "No justification provided")
|
|
3110
3122
|
score_color = score_to_hex(score)
|
|
3111
3123
|
definition = get_dimension_definition(criterion)
|
|
3112
|
-
|
|
3124
|
+
|
|
3113
3125
|
with ui.row().classes("w-full items-center gap-2 mb-2"):
|
|
3114
3126
|
with ui.expansion(f"{criterion}: {score:.2f}", icon="check_circle").classes("flex-1").style(f"border-left: 4px solid {score_color};"):
|
|
3115
3127
|
ui.html(f"""
|
|
@@ -3120,6 +3132,21 @@ def main_page():
|
|
|
3120
3132
|
with ui.button(icon="info", on_click=lambda: None).props("flat dense round size=sm").classes("text-blue-500"):
|
|
3121
3133
|
ui.tooltip(definition).classes("bg-slate-800 text-white text-sm max-w-md")
|
|
3122
3134
|
|
|
3135
|
+
if custom_dims and not step_quality and not trajectory_dims:
|
|
3136
|
+
ui.html('<div style="font-weight: 600; color: #1E293B; margin: 12px 0 8px 0; font-size: 15px;">Evaluation Dimensions</div>')
|
|
3137
|
+
for criterion, details in custom_dims.items():
|
|
3138
|
+
score = float(details.get("score", 0))
|
|
3139
|
+
justification = details.get("justification", "No justification provided")
|
|
3140
|
+
score_color = score_to_hex(score)
|
|
3141
|
+
|
|
3142
|
+
with ui.row().classes("w-full items-center gap-2 mb-2"):
|
|
3143
|
+
with ui.expansion(f"{criterion}: {score:.2f}", icon="check_circle").classes("flex-1").style(f"border-left: 4px solid {score_color};"):
|
|
3144
|
+
ui.html(f"""
|
|
3145
|
+
<div style="padding: 8px; background: #FAFAFA; border-radius: 6px; color: #475569; font-size: 13px; line-height: 1.5;">
|
|
3146
|
+
{justification}
|
|
3147
|
+
</div>
|
|
3148
|
+
""")
|
|
3149
|
+
|
|
3123
3150
|
def render_rubric_evaluation(rubric_eval):
|
|
3124
3151
|
"""Render the rubric-based trace evaluation."""
|
|
3125
3152
|
# Overall score card
|
{clear_eval-2.0.2 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/argument_definitions.py
RENAMED
|
@@ -10,7 +10,7 @@ reusable argument groups that can be composed based on each script's needs.
|
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
import argparse
|
|
13
|
-
from clear_eval.args import str2bool
|
|
13
|
+
from clear_eval.args import str2bool, parse_dict
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def add_agentic_pipeline_args(parser: argparse.ArgumentParser) -> None:
|
|
@@ -132,6 +132,14 @@ def add_full_trajectory_args(parser: argparse.ArgumentParser) -> None:
|
|
|
132
132
|
type=int,
|
|
133
133
|
help="Model context window size (for full trajectory)"
|
|
134
134
|
)
|
|
135
|
+
group.add_argument(
|
|
136
|
+
"--full-trace-evaluation-criteria",
|
|
137
|
+
type=parse_dict,
|
|
138
|
+
default=None,
|
|
139
|
+
help="JSON dict of evaluation criteria for full trace evaluation. "
|
|
140
|
+
"Replaces all default dimensions when set. "
|
|
141
|
+
"Example: '{\"Correctness\": \"Accurate results\", \"Efficiency\": \"No redundant steps\"}'"
|
|
142
|
+
)
|
|
135
143
|
# Note: --max-files is defined in add_agentic_pipeline_args() (shared across pipelines)
|
|
136
144
|
# Do not add it here to avoid conflicts
|
|
137
145
|
|
|
@@ -44,6 +44,7 @@ class BaseClearRunner(ABC):
|
|
|
44
44
|
output_dir: Path,
|
|
45
45
|
inference_config: InferenceConfig,
|
|
46
46
|
overwrite: bool = False,
|
|
47
|
+
predefined_issues: list = None,
|
|
47
48
|
):
|
|
48
49
|
"""
|
|
49
50
|
Initialize CLEAR runner.
|
|
@@ -53,11 +54,13 @@ class BaseClearRunner(ABC):
|
|
|
53
54
|
output_dir: Base directory for CLEAR analysis outputs
|
|
54
55
|
inference_config: LLM inference configuration
|
|
55
56
|
overwrite: Whether to overwrite existing CLEAR results
|
|
57
|
+
predefined_issues: Predefined issues list to skip issue discovery
|
|
56
58
|
"""
|
|
57
59
|
self.eval_results_dir = Path(eval_results_dir)
|
|
58
60
|
self.output_dir = Path(output_dir)
|
|
59
61
|
self.inference_config = inference_config
|
|
60
62
|
self.overwrite = overwrite
|
|
63
|
+
self.predefined_issues = predefined_issues
|
|
61
64
|
|
|
62
65
|
@abstractmethod
|
|
63
66
|
def get_source_name(self) -> str:
|
|
@@ -219,6 +222,9 @@ class BaseClearRunner(ABC):
|
|
|
219
222
|
"endpoint_url": self.inference_config.endpoint_url,
|
|
220
223
|
}
|
|
221
224
|
|
|
225
|
+
if self.predefined_issues:
|
|
226
|
+
analysis_kwargs["predefined_issues"] = self.predefined_issues
|
|
227
|
+
|
|
222
228
|
run_clear_eval_aggregation(**analysis_kwargs)
|
|
223
229
|
logger.info(f"Completed: {group_key}")
|
|
224
230
|
return True
|
|
@@ -99,6 +99,9 @@ Arguments:
|
|
|
99
99
|
--overwrite: Re-run even if results exist
|
|
100
100
|
--max-workers: Number of parallel workers (default: 7)
|
|
101
101
|
--max-files: Limit files to process (for testing)
|
|
102
|
+
--full-trace-evaluation-criteria: JSON dict of custom evaluation criteria
|
|
103
|
+
Replaces all default dimensions when set
|
|
104
|
+
--predefined-issues: Predefined issues list for CLEAR analysis
|
|
102
105
|
|
|
103
106
|
Output Structure:
|
|
104
107
|
output_dir/
|
|
@@ -273,6 +276,7 @@ def run_full_trajectory_evaluation(
|
|
|
273
276
|
overwrite: bool,
|
|
274
277
|
max_workers: int,
|
|
275
278
|
max_files: Optional[int],
|
|
279
|
+
full_trace_evaluation_criteria: Optional[dict] = None,
|
|
276
280
|
) -> bool:
|
|
277
281
|
"""Run full trajectory evaluation."""
|
|
278
282
|
logger.info("=" * 80)
|
|
@@ -288,6 +292,7 @@ def run_full_trajectory_evaluation(
|
|
|
288
292
|
overwrite=overwrite,
|
|
289
293
|
max_workers=max_workers,
|
|
290
294
|
max_files=max_files,
|
|
295
|
+
full_trace_evaluation_criteria=full_trace_evaluation_criteria,
|
|
291
296
|
)
|
|
292
297
|
evaluator.run_pipeline()
|
|
293
298
|
logger.info("Full trajectory evaluation completed successfully")
|
|
@@ -378,8 +383,19 @@ def run_clear_analysis(
|
|
|
378
383
|
clear_types: List[str],
|
|
379
384
|
inference_config: InferenceConfig,
|
|
380
385
|
overwrite: bool,
|
|
386
|
+
predefined_issues: Optional[list] = None,
|
|
381
387
|
) -> bool:
|
|
382
|
-
"""
|
|
388
|
+
"""
|
|
389
|
+
Run CLEAR analysis on evaluation results.
|
|
390
|
+
|
|
391
|
+
Args:
|
|
392
|
+
eval_results_dir: Directory containing evaluation result files
|
|
393
|
+
clear_output_dir: Output directory for CLEAR analysis
|
|
394
|
+
clear_types: List of CLEAR analysis types to run
|
|
395
|
+
inference_config: LLM inference configuration
|
|
396
|
+
overwrite: Whether to overwrite existing results
|
|
397
|
+
predefined_issues: If set, skip issue discovery and use these issues directly
|
|
398
|
+
"""
|
|
383
399
|
if not clear_types:
|
|
384
400
|
logger.info("Skipping CLEAR analysis (none requested)")
|
|
385
401
|
return True
|
|
@@ -400,6 +416,7 @@ def run_clear_analysis(
|
|
|
400
416
|
output_dir=clear_output_dir,
|
|
401
417
|
inference_config=inference_config,
|
|
402
418
|
overwrite=overwrite,
|
|
419
|
+
predefined_issues=predefined_issues,
|
|
403
420
|
)
|
|
404
421
|
runner.run_analysis()
|
|
405
422
|
logger.info("Root cause CLEAR analysis completed successfully")
|
|
@@ -416,6 +433,7 @@ def run_clear_analysis(
|
|
|
416
433
|
output_dir=clear_output_dir,
|
|
417
434
|
inference_config=inference_config,
|
|
418
435
|
overwrite=overwrite,
|
|
436
|
+
predefined_issues=predefined_issues,
|
|
419
437
|
)
|
|
420
438
|
runner.run_analysis()
|
|
421
439
|
logger.info("Issues CLEAR analysis completed successfully")
|
|
@@ -517,6 +535,8 @@ def run_trajectory_evaluation_pipeline(
|
|
|
517
535
|
overwrite: bool = False,
|
|
518
536
|
max_workers: int = 10,
|
|
519
537
|
max_files: Optional[int] = None,
|
|
538
|
+
predefined_issues: Optional[list] = None,
|
|
539
|
+
full_trace_evaluation_criteria: Optional[dict] = None,
|
|
520
540
|
) -> tuple[List[str], List[str]]:
|
|
521
541
|
"""
|
|
522
542
|
Run trajectory evaluation pipeline on CSV trajectory data.
|
|
@@ -536,6 +556,8 @@ def run_trajectory_evaluation_pipeline(
|
|
|
536
556
|
overwrite: Re-run even if results exist
|
|
537
557
|
max_workers: Number of parallel workers
|
|
538
558
|
max_files: Limit files to process
|
|
559
|
+
predefined_issues: Predefined issues list to skip issue discovery in CLEAR analysis
|
|
560
|
+
full_trace_evaluation_criteria: Custom flat evaluation criteria dict for full trajectory eval
|
|
539
561
|
|
|
540
562
|
Returns:
|
|
541
563
|
Tuple of (completed_evals, failed_evals)
|
|
@@ -634,7 +656,10 @@ def run_trajectory_evaluation_pipeline(
|
|
|
634
656
|
failed_evals.append(EVAL_TYPE_TASK_SUCCESS)
|
|
635
657
|
|
|
636
658
|
if EVAL_TYPE_FULL_TRAJECTORY in eval_types:
|
|
637
|
-
if run_full_trajectory_evaluation(
|
|
659
|
+
if run_full_trajectory_evaluation(
|
|
660
|
+
**eval_kwargs,
|
|
661
|
+
full_trace_evaluation_criteria=full_trace_evaluation_criteria,
|
|
662
|
+
):
|
|
638
663
|
completed_evals.append(EVAL_TYPE_FULL_TRAJECTORY)
|
|
639
664
|
else:
|
|
640
665
|
failed_evals.append(EVAL_TYPE_FULL_TRAJECTORY)
|
|
@@ -662,6 +687,7 @@ def run_trajectory_evaluation_pipeline(
|
|
|
662
687
|
clear_types=clear_types,
|
|
663
688
|
inference_config=inference_config,
|
|
664
689
|
overwrite=overwrite,
|
|
690
|
+
predefined_issues=predefined_issues,
|
|
665
691
|
)
|
|
666
692
|
|
|
667
693
|
# Print summary
|
|
@@ -744,6 +770,8 @@ def main():
|
|
|
744
770
|
overwrite=config.get('overwrite'),
|
|
745
771
|
max_workers=config.get('max_workers'),
|
|
746
772
|
max_files=config.get('max_files'),
|
|
773
|
+
predefined_issues=config.get('predefined_issues'),
|
|
774
|
+
full_trace_evaluation_criteria=config.get('full_trace_evaluation_criteria'),
|
|
747
775
|
)
|
|
748
776
|
|
|
749
777
|
if failed_evals:
|
|
@@ -73,6 +73,9 @@ class TrajectoryEvaluator(ABC):
|
|
|
73
73
|
- Parallel execution
|
|
74
74
|
- Error handling and logging
|
|
75
75
|
|
|
76
|
+
Supports optional full_trace_evaluation_criteria for custom evaluation
|
|
77
|
+
dimensions (used by FullTrajectoryEvaluator).
|
|
78
|
+
|
|
76
79
|
Subclasses implement evaluation-specific logic via abstract methods:
|
|
77
80
|
- prepare_evaluation_data: Load/prepare evaluation-specific data
|
|
78
81
|
- prepare_context: Build context dict for prompt
|
|
@@ -92,6 +95,7 @@ class TrajectoryEvaluator(ABC):
|
|
|
92
95
|
overwrite: bool = False,
|
|
93
96
|
max_workers: int = 7,
|
|
94
97
|
max_files: int | None = None,
|
|
98
|
+
full_trace_evaluation_criteria: dict | None = None,
|
|
95
99
|
):
|
|
96
100
|
"""
|
|
97
101
|
Initialize evaluator with common configuration.
|
|
@@ -104,6 +108,8 @@ class TrajectoryEvaluator(ABC):
|
|
|
104
108
|
overwrite: Whether to overwrite existing evaluation results
|
|
105
109
|
max_workers: Number of parallel workers
|
|
106
110
|
max_files: Maximum number of files to process (for testing)
|
|
111
|
+
full_trace_evaluation_criteria: Custom flat evaluation criteria dict
|
|
112
|
+
that replaces all default dimensions when set
|
|
107
113
|
"""
|
|
108
114
|
self.inference_config = inference_config
|
|
109
115
|
self.traj_input_dir = Path(traj_input_dir)
|
|
@@ -112,6 +118,7 @@ class TrajectoryEvaluator(ABC):
|
|
|
112
118
|
self.overwrite = overwrite
|
|
113
119
|
self.max_workers = max_workers
|
|
114
120
|
self.max_files = max_files
|
|
121
|
+
self.full_trace_evaluation_criteria = full_trace_evaluation_criteria
|
|
115
122
|
|
|
116
123
|
# Create results directory: output_dir/evaluation_type[/model_subdir]
|
|
117
124
|
eval_type = self.get_evaluation_type().replace(" ", "_").replace("/", "_")
|