clear-eval 2.0.1__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.
Files changed (127) hide show
  1. clear_eval-2.0.3/PKG-INFO +248 -0
  2. clear_eval-2.0.3/README.md +207 -0
  3. {clear_eval-2.0.1 → clear_eval-2.0.3}/pyproject.toml +1 -1
  4. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/agentic_workflow_dashboard.py +35 -8
  5. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/launch_dashboard.py +18 -0
  6. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/argument_definitions.py +9 -1
  7. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/base_clear_runner.py +6 -0
  8. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/run_trajectory_evaluation_pipeline.py +34 -11
  9. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/base_evaluator.py +7 -0
  10. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/full_trajectory_evaluator.py +130 -215
  11. clear_eval-2.0.3/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/full_trajectory_prompts.py +229 -0
  12. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/process_langfuse_traces.py +81 -6
  13. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/run_clear_agentic_eval.py +26 -15
  14. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/run_clear_step_analysis.py +4 -8
  15. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/default_agentic_config.yaml +14 -2
  16. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/utils.py +5 -1
  17. clear_eval-2.0.3/src/clear_eval.egg-info/PKG-INFO +248 -0
  18. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval.egg-info/SOURCES.txt +1 -0
  19. clear_eval-2.0.1/PKG-INFO +0 -276
  20. clear_eval-2.0.1/README.md +0 -235
  21. clear_eval-2.0.1/src/clear_eval.egg-info/PKG-INFO +0 -276
  22. {clear_eval-2.0.1 → clear_eval-2.0.3}/LICENSE +0 -0
  23. {clear_eval-2.0.1 → clear_eval-2.0.3}/setup.cfg +0 -0
  24. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/__init__.py +0 -0
  25. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/generate_static_dashboard.py +0 -0
  26. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/dashboard/path_analysis.py +0 -0
  27. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/build_json_results.py +0 -0
  28. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/create_ui_input.py +0 -0
  29. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/issues_clear_runner.py +0 -0
  30. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/root_cause_clear_runner.py +0 -0
  31. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/clear_analysis/run_clear_analysis.py +0 -0
  32. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/rubric_evaluator.py +0 -0
  33. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/rubric_generator.py +0 -0
  34. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/full_traces_evaluation/trace_evaluation/task_success_evaluator.py +0 -0
  35. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/compact_trace_formatter.py +0 -0
  36. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/preprocess_traces.py +0 -0
  37. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/process_mlflow_traces.py +0 -0
  38. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/preprocess_traces/trace_utils.py +0 -0
  39. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/__init__.py +0 -0
  40. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/config_example.json +0 -0
  41. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/config_example.yaml +0 -0
  42. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/rh_config_example.yaml +0 -0
  43. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/agentic/pipeline/setup/test_tools_config_example.yaml +0 -0
  44. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/analysis_runner.py +0 -0
  45. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/args.py +0 -0
  46. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/cli.py +0 -0
  47. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/dashboard/__init__.py +0 -0
  48. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/dashboard/show_analysis_dashboard.py +0 -0
  49. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/load_ui.py +0 -0
  50. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/logging_config.py +0 -0
  51. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/__init__.py +0 -0
  52. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/caching_utils.py +0 -0
  53. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/config_loader.py +0 -0
  54. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/constants.py +0 -0
  55. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/eval_utils.py +0 -0
  56. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/evaluation_criteria.py +0 -0
  57. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/external_judge.py +0 -0
  58. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/full_pipeline.py +0 -0
  59. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/__init__.py +0 -0
  60. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/endpoint_backends.py +0 -0
  61. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/langchain_chat_models.py +0 -0
  62. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/inference_utils/llm_client.py +0 -0
  63. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/propmts.py +0 -0
  64. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/setup/__init__.py +0 -0
  65. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/setup/default_config.yaml +0 -0
  66. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/threading_utils.py +0 -0
  67. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/__init__.py +0 -0
  68. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/eval_use_case.py +0 -0
  69. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/external_judge_use_case.py +0 -0
  70. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/tool_call_use_case.py +0 -0
  71. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/pipeline/use_cases/use_case_utils.py +0 -0
  72. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/__init__.py +0 -0
  73. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/pipeline_summary.json +0 -0
  74. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-006eee07eed4484592661b1bdba32a75.csv +0 -0
  75. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-0e0148ed21eeebc046f03f63e4418723.csv +0 -0
  76. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-0e1ef041647642c958a8aaa1892fdb88.csv +0 -0
  77. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-4ae9a4305b7a0319ec516ef4eef4ae17.csv +0 -0
  78. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-4eead8c00e900cc84f217a9a10724ecf.csv +0 -0
  79. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-50adf266e9c1522dae57a6290a61596f.csv +0 -0
  80. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-554015d661e4f69cfc629b6d46898421.csv +0 -0
  81. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-55a6003784e34390f47c5c929d8f4db0.csv +0 -0
  82. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-5818239708258c81fff3a4bb0b144802.csv +0 -0
  83. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-5e63ae3886b225ae89a07b7fa4aafe0d.csv +0 -0
  84. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-640f5750b635929a88547548f0cbb4da.csv +0 -0
  85. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-6b2d02f30d4f0d3f4ca7d8f1469913ae.csv +0 -0
  86. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-6c852575331f2e0a02a331d1ddaae59f.csv +0 -0
  87. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-8e68becd37326e6fec6a7d3d3b47dbbb.csv +0 -0
  88. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-b35ed52266fd023dd808950c6848f062.csv +0 -0
  89. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-bccc245d6d47cdf730fd5db3028b52a3.csv +0 -0
  90. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-d6010cdc5e36a50046fc10f33f0bc427.csv +0 -0
  91. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-edadad8b3a67a24a43d145ae07c0c12a.csv +0 -0
  92. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-f082801e1021022e0756e7d089f1558c.csv +0 -0
  93. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/traces_data/tr-f34a9851b31fafffe527c5b2d6262de8.csv +0 -0
  94. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/unified_ui_results.zip +0 -0
  95. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/434f3f96ac470e805428c4be45b4f2a3.json +0 -0
  96. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/4c354cfb5b17f61af073df6796f2b236.json +0 -0
  97. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/4deb34a4521fcedf92083d0a93fe11d4.json +0 -0
  98. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/c685b7eb7826a87149bd2c42a50e47c5.json +0 -0
  99. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/langfuse/ebf1d6897941adb63bcc62aa7c50e8f8.json +0 -0
  100. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-006eee07eed4484592661b1bdba32a75.json +0 -0
  101. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-0e0148ed21eeebc046f03f63e4418723.json +0 -0
  102. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-0e1ef041647642c958a8aaa1892fdb88.json +0 -0
  103. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-4ae9a4305b7a0319ec516ef4eef4ae17.json +0 -0
  104. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-4eead8c00e900cc84f217a9a10724ecf.json +0 -0
  105. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-50adf266e9c1522dae57a6290a61596f.json +0 -0
  106. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-554015d661e4f69cfc629b6d46898421.json +0 -0
  107. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-55a6003784e34390f47c5c929d8f4db0.json +0 -0
  108. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-5818239708258c81fff3a4bb0b144802.json +0 -0
  109. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-5e63ae3886b225ae89a07b7fa4aafe0d.json +0 -0
  110. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-640f5750b635929a88547548f0cbb4da.json +0 -0
  111. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-6b2d02f30d4f0d3f4ca7d8f1469913ae.json +0 -0
  112. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-6c852575331f2e0a02a331d1ddaae59f.json +0 -0
  113. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-8e68becd37326e6fec6a7d3d3b47dbbb.json +0 -0
  114. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-b35ed52266fd023dd808950c6848f062.json +0 -0
  115. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-bccc245d6d47cdf730fd5db3028b52a3.json +0 -0
  116. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-d6010cdc5e36a50046fc10f33f0bc427.json +0 -0
  117. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-edadad8b3a67a24a43d145ae07c0c12a.json +0 -0
  118. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-f082801e1021022e0756e7d089f1558c.json +0 -0
  119. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/agentic/research_agent_traces/mlflow/tr-f34a9851b31fafffe527c5b2d6262de8.json +0 -0
  120. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/__init__.py +0 -0
  121. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/analysis_results_gsm8k_default.zip +0 -0
  122. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/gsm8k/gsm8k_default_predictions.csv +0 -0
  123. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval/sample_data/tool_calls/tool_calls_sample_data.csv +0 -0
  124. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval.egg-info/dependency_links.txt +0 -0
  125. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval.egg-info/entry_points.txt +0 -0
  126. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval.egg-info/requires.txt +0 -0
  127. {clear_eval-2.0.1 → clear_eval-2.0.3}/src/clear_eval.egg-info/top_level.txt +0 -0
@@ -0,0 +1,248 @@
1
+ Metadata-Version: 2.4
2
+ Name: clear_eval
3
+ Version: 2.0.3
4
+ Summary: A python API sdk facilitating Error Analysis via LLM-as-a-Judge
5
+ Author-email: Lilach Eden <lilache@il.ibm.com>, Asaf Yehudai <asaf.yehudai@ibm.com>
6
+ License: Apache-2.0
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.10
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: python-dotenv
13
+ Requires-Dist: langchain
14
+ Requires-Dist: langgraph
15
+ Requires-Dist: langchain_openai
16
+ Requires-Dist: langchain_ibm
17
+ Requires-Dist: ibm_watsonx_ai>=1.3.42
18
+ Requires-Dist: openai
19
+ Requires-Dist: pyyaml
20
+ Requires-Dist: pandas
21
+ Requires-Dist: tqdm
22
+ Requires-Dist: pyyaml
23
+ Requires-Dist: streamlit
24
+ Requires-Dist: matplotlib
25
+ Requires-Dist: seaborn
26
+ Requires-Dist: langchain_community
27
+ Requires-Dist: numpy
28
+ Requires-Dist: pyarrow>=22.0.0
29
+ Requires-Dist: nest-asyncio
30
+ Requires-Dist: nicegui>=3.7.1
31
+ Requires-Dist: plotly
32
+ Requires-Dist: networkx
33
+ Requires-Dist: litellm>=1.83.0
34
+ Requires-Dist: nest-asyncio
35
+ Requires-Dist: scipy
36
+ Requires-Dist: scikit-learn
37
+ Requires-Dist: botocore
38
+ Provides-Extra: tool-calls
39
+ Requires-Dist: agent-lifecycle-toolkit; extra == "tool-calls"
40
+ Dynamic: license-file
41
+
42
+ # CLEAR: Comprehensive LLM Error Analysis and Reporting
43
+
44
+ **CLEAR** is an open-source toolkit for **LLM error analysis** using an LLM-as-a-Judge approach.
45
+
46
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
47
+ [![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
48
+ [![PyPI](https://img.shields.io/pypi/v/clear-eval.svg)](https://pypi.org/project/clear-eval/)
49
+
50
+ ---
51
+
52
+ ## What is CLEAR?
53
+
54
+ CLEAR provides systematic error analysis for LLM-based systems. It combines automated LLM-as-a-judge evaluation with interactive dashboards to help you:
55
+ - Identify recurring error patterns across your dataset
56
+ - Quantify issue frequencies and severity
57
+ - Drill down into specific failure cases
58
+ - Prioritize improvements based on data-driven insights
59
+
60
+ CLEAR operates in two phases:
61
+
62
+ 1. **Analysis** — Generates per-instance textual feedback, identifies system-level error categories, and quantifies their frequencies.
63
+ 2. **Interactive Dashboard** — Explore aggregate visualizations, apply dynamic filters, and drill down into individual failure examples.
64
+
65
+ ---
66
+
67
+ ## Two Analysis Modes
68
+
69
+ ### LLM Analysis
70
+
71
+ Evaluate standard LLM outputs — generation quality, correctness, and recurring error patterns. Provide a CSV with prompts and responses, and CLEAR will score each instance, generate textual critiques, and surface system-level issues.
72
+
73
+ - **Input:** CSV with model inputs and responses
74
+ - **Output:** Per-record scores, evaluation text, aggregated issue categories
75
+ - **Dashboard:** Streamlit-based interactive explorer
76
+
77
+ > **[LLM Analysis Guide →](docs/llm-analysis.md)**
78
+
79
+ ### Agentic Analysis
80
+
81
+ Evaluate multi-agent system trajectories — step-by-step agent interactions and full trajectory analysis.
82
+ Supports traces from LangGraph, CrewAI, and other frameworks via MLflow or Langfuse.
83
+
84
+ - **Input:** Raw JSON traces or preprocessed trajectory CSVs (each trace captures one complete agent task execution)
85
+ - **Output:** Per-step CLEAR analysis, trajectory-level scores, rubric evaluations
86
+ - **Dashboard:** NiceGUI-based workflow visualization with path and temporal analysis
87
+
88
+ > **[Agentic Workflows Guide →](src/clear_eval/agentic/README.md)**
89
+
90
+ ---
91
+
92
+ ## Installation
93
+
94
+ **Requires Python 3.10+**
95
+
96
+ #### Option 1: pip
97
+
98
+ ```bash
99
+ pip install clear-eval
100
+ ```
101
+
102
+ #### Option 2: From source (for development)
103
+
104
+ ```bash
105
+ git clone https://github.com/IBM/CLEAR.git
106
+ cd CLEAR
107
+ python3 -m venv .venv
108
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
109
+ pip install -e .
110
+ ```
111
+
112
+ Verify the installation:
113
+
114
+ ```bash
115
+ run-clear-eval-analysis --help
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Quick Start
121
+
122
+ ### 1. Set your provider credentials
123
+
124
+ CLEAR requires a supported LLM provider. Set the appropriate environment variables for your provider (e.g., `OPENAI_API_KEY` for OpenAI). Adjust `--provider` and `--eval-model-name` in the commands below to match your setup. See [Provider Configuration](#provider-configuration) for details.
125
+
126
+ ### 2. LLM Analysis
127
+
128
+ This evaluates GSM8K math problem responses and surfaces recurring quality issues:
129
+
130
+ ```bash
131
+ run-clear-eval-analysis --provider openai --eval-model-name gpt-4o
132
+ ```
133
+
134
+ Results are saved to `results/gsm8k/sample_output/`. View them:
135
+
136
+ ```bash
137
+ run-clear-eval-dashboard
138
+ ```
139
+
140
+ > **[Full LLM Analysis Guide →](docs/llm-analysis.md)** — input formats, CLI arguments, configuration, Python API, and external judges.
141
+
142
+ ### 3. Agentic Analysis
143
+
144
+ These two modes are independent — this section does not require step 2.
145
+
146
+ Run CLEAR on sample agent traces (3 traces, each capturing one complete agent task execution, ~2 minutes):
147
+
148
+ ```bash
149
+ run-clear-agentic-eval \
150
+ --data-dir src/clear_eval/sample_data/agentic/research_agent_traces/mlflow \
151
+ --results-dir my_smoke_test_results \
152
+ --from-raw-traces true \
153
+ --agent-framework langgraph \
154
+ --observability-framework mlflow \
155
+ --run-name smoke_test \
156
+ --max-files 3 \
157
+ --eval-model-name gpt-4o \
158
+ --provider openai
159
+ ```
160
+
161
+ View pre-computed results (all 20 traces) without re-running:
162
+
163
+ ```bash
164
+ run-clear-agentic-dashboard
165
+ # Upload: src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/unified_ui_results.zip
166
+ ```
167
+
168
+ > **[Full Agentic Guide →](src/clear_eval/agentic/README.md)** — trace generation, configuration, output structure, and dashboard features.
169
+
170
+ ---
171
+
172
+ ## Provider Configuration
173
+
174
+ CLEAR uses [LiteLLM](https://docs.litellm.ai/docs/providers) as its inference backend, supporting 100+ LLM providers (OpenAI, Anthropic, WatsonX, AWS Bedrock, Google Vertex AI, and more).
175
+
176
+ **Parameters:**
177
+
178
+ | Parameter | CLI Flag | Description |
179
+ |-----------|----------|-------------|
180
+ | `provider` | `--provider` | LiteLLM provider name (e.g., `openai`, `anthropic`, `bedrock`, `vertex_ai`) |
181
+ | `eval_model_name` | `--eval-model-name` | Model identifier (e.g., `gpt-4o`, `claude-3-5-sonnet-20241022`) |
182
+ | `eval_model_params` | `--eval-model-params` | Additional model parameters as JSON (e.g., `{"temperature": 0}`) |
183
+ | `endpoint_url` | `--endpoint-url` | Custom endpoint URL for local/self-hosted models |
184
+
185
+ **Cloud provider example:**
186
+
187
+ ```bash
188
+ export OPENAI_API_KEY="..."
189
+ run-clear-eval-analysis --provider openai --eval-model-name gpt-4o
190
+ ```
191
+
192
+ **Local model example (vLLM, llama.cpp, Ollama, etc.):**
193
+
194
+ ```bash
195
+ run-clear-eval-analysis \
196
+ --provider openai \
197
+ --eval-model-name my-local-model \
198
+ --endpoint-url http://localhost:8000/v1
199
+ ```
200
+
201
+ No credentials are needed when using `--endpoint-url` with a local server.
202
+
203
+ Set the required environment variables for your provider according to [LiteLLM's documentation](https://docs.litellm.ai/docs/providers).
204
+
205
+ ---
206
+
207
+ ## Documentation
208
+
209
+ | Guide | Description |
210
+ |-------|-------------|
211
+ | [**Agentic Workflows Guide**](src/clear_eval/agentic/README.md) | Multi-agent evaluation — trace preprocessing, step-by-step and trajectory analysis, configuration reference |
212
+ | [**Agentic Dashboard Guide**](docs/agentic/dashboard.md) | Dashboard features — workflow view, node analysis, trajectory explorer, path and temporal analysis |
213
+ | [**LLM Analysis Guide**](docs/llm-analysis.md) | Full pipeline reference — input formats, CLI arguments, configuration, and external judges |
214
+
215
+ ---
216
+
217
+ ## Citation
218
+
219
+ If you use CLEAR in your research, please cite the relevant paper(s):
220
+
221
+ **LLM Analysis** ([AAAI 2026](https://ojs.aaai.org/index.php/AAAI/article/view/42398)):
222
+ ```bibtex
223
+ @inproceedings{yehudai2026clear,
224
+ title={CLEAR: Error analysis via llm-as-a-judge made easy},
225
+ author={Yehudai, Asaf and Eden, Lilach and Perlitz, Yotam and Bar-Haim, Roy and Shmueli-Scheuer, Michal},
226
+ booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
227
+ volume={40},
228
+ number={48},
229
+ pages={41736--41738},
230
+ year={2026}
231
+ }
232
+ ```
233
+
234
+ **Agentic Analysis** (ACL 2026, to appear — [preprint](https://arxiv.org/abs/2605.22608)):
235
+ ```bibtex
236
+ @article{yehudai2026agentic,
237
+ title={Agentic CLEAR: Automating Multi-Level Evaluation of LLM Agents},
238
+ author={Yehudai, Asaf and Eden, Lilach and Shmueli-Scheuer, Michal},
239
+ journal={arXiv preprint arXiv:2605.22608},
240
+ year={2026}
241
+ }
242
+ ```
243
+
244
+ ---
245
+
246
+ ## License
247
+
248
+ Apache 2.0 — see [LICENSE](LICENSE) for details.
@@ -0,0 +1,207 @@
1
+ # CLEAR: Comprehensive LLM Error Analysis and Reporting
2
+
3
+ **CLEAR** is an open-source toolkit for **LLM error analysis** using an LLM-as-a-Judge approach.
4
+
5
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
6
+ [![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
7
+ [![PyPI](https://img.shields.io/pypi/v/clear-eval.svg)](https://pypi.org/project/clear-eval/)
8
+
9
+ ---
10
+
11
+ ## What is CLEAR?
12
+
13
+ CLEAR provides systematic error analysis for LLM-based systems. It combines automated LLM-as-a-judge evaluation with interactive dashboards to help you:
14
+ - Identify recurring error patterns across your dataset
15
+ - Quantify issue frequencies and severity
16
+ - Drill down into specific failure cases
17
+ - Prioritize improvements based on data-driven insights
18
+
19
+ CLEAR operates in two phases:
20
+
21
+ 1. **Analysis** — Generates per-instance textual feedback, identifies system-level error categories, and quantifies their frequencies.
22
+ 2. **Interactive Dashboard** — Explore aggregate visualizations, apply dynamic filters, and drill down into individual failure examples.
23
+
24
+ ---
25
+
26
+ ## Two Analysis Modes
27
+
28
+ ### LLM Analysis
29
+
30
+ Evaluate standard LLM outputs — generation quality, correctness, and recurring error patterns. Provide a CSV with prompts and responses, and CLEAR will score each instance, generate textual critiques, and surface system-level issues.
31
+
32
+ - **Input:** CSV with model inputs and responses
33
+ - **Output:** Per-record scores, evaluation text, aggregated issue categories
34
+ - **Dashboard:** Streamlit-based interactive explorer
35
+
36
+ > **[LLM Analysis Guide →](docs/llm-analysis.md)**
37
+
38
+ ### Agentic Analysis
39
+
40
+ Evaluate multi-agent system trajectories — step-by-step agent interactions and full trajectory analysis.
41
+ Supports traces from LangGraph, CrewAI, and other frameworks via MLflow or Langfuse.
42
+
43
+ - **Input:** Raw JSON traces or preprocessed trajectory CSVs (each trace captures one complete agent task execution)
44
+ - **Output:** Per-step CLEAR analysis, trajectory-level scores, rubric evaluations
45
+ - **Dashboard:** NiceGUI-based workflow visualization with path and temporal analysis
46
+
47
+ > **[Agentic Workflows Guide →](src/clear_eval/agentic/README.md)**
48
+
49
+ ---
50
+
51
+ ## Installation
52
+
53
+ **Requires Python 3.10+**
54
+
55
+ #### Option 1: pip
56
+
57
+ ```bash
58
+ pip install clear-eval
59
+ ```
60
+
61
+ #### Option 2: From source (for development)
62
+
63
+ ```bash
64
+ git clone https://github.com/IBM/CLEAR.git
65
+ cd CLEAR
66
+ python3 -m venv .venv
67
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
68
+ pip install -e .
69
+ ```
70
+
71
+ Verify the installation:
72
+
73
+ ```bash
74
+ run-clear-eval-analysis --help
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Quick Start
80
+
81
+ ### 1. Set your provider credentials
82
+
83
+ CLEAR requires a supported LLM provider. Set the appropriate environment variables for your provider (e.g., `OPENAI_API_KEY` for OpenAI). Adjust `--provider` and `--eval-model-name` in the commands below to match your setup. See [Provider Configuration](#provider-configuration) for details.
84
+
85
+ ### 2. LLM Analysis
86
+
87
+ This evaluates GSM8K math problem responses and surfaces recurring quality issues:
88
+
89
+ ```bash
90
+ run-clear-eval-analysis --provider openai --eval-model-name gpt-4o
91
+ ```
92
+
93
+ Results are saved to `results/gsm8k/sample_output/`. View them:
94
+
95
+ ```bash
96
+ run-clear-eval-dashboard
97
+ ```
98
+
99
+ > **[Full LLM Analysis Guide →](docs/llm-analysis.md)** — input formats, CLI arguments, configuration, Python API, and external judges.
100
+
101
+ ### 3. Agentic Analysis
102
+
103
+ These two modes are independent — this section does not require step 2.
104
+
105
+ Run CLEAR on sample agent traces (3 traces, each capturing one complete agent task execution, ~2 minutes):
106
+
107
+ ```bash
108
+ run-clear-agentic-eval \
109
+ --data-dir src/clear_eval/sample_data/agentic/research_agent_traces/mlflow \
110
+ --results-dir my_smoke_test_results \
111
+ --from-raw-traces true \
112
+ --agent-framework langgraph \
113
+ --observability-framework mlflow \
114
+ --run-name smoke_test \
115
+ --max-files 3 \
116
+ --eval-model-name gpt-4o \
117
+ --provider openai
118
+ ```
119
+
120
+ View pre-computed results (all 20 traces) without re-running:
121
+
122
+ ```bash
123
+ run-clear-agentic-dashboard
124
+ # Upload: src/clear_eval/sample_data/agentic/research_agent_results/mlflow/my_experiment/unified_ui_results.zip
125
+ ```
126
+
127
+ > **[Full Agentic Guide →](src/clear_eval/agentic/README.md)** — trace generation, configuration, output structure, and dashboard features.
128
+
129
+ ---
130
+
131
+ ## Provider Configuration
132
+
133
+ CLEAR uses [LiteLLM](https://docs.litellm.ai/docs/providers) as its inference backend, supporting 100+ LLM providers (OpenAI, Anthropic, WatsonX, AWS Bedrock, Google Vertex AI, and more).
134
+
135
+ **Parameters:**
136
+
137
+ | Parameter | CLI Flag | Description |
138
+ |-----------|----------|-------------|
139
+ | `provider` | `--provider` | LiteLLM provider name (e.g., `openai`, `anthropic`, `bedrock`, `vertex_ai`) |
140
+ | `eval_model_name` | `--eval-model-name` | Model identifier (e.g., `gpt-4o`, `claude-3-5-sonnet-20241022`) |
141
+ | `eval_model_params` | `--eval-model-params` | Additional model parameters as JSON (e.g., `{"temperature": 0}`) |
142
+ | `endpoint_url` | `--endpoint-url` | Custom endpoint URL for local/self-hosted models |
143
+
144
+ **Cloud provider example:**
145
+
146
+ ```bash
147
+ export OPENAI_API_KEY="..."
148
+ run-clear-eval-analysis --provider openai --eval-model-name gpt-4o
149
+ ```
150
+
151
+ **Local model example (vLLM, llama.cpp, Ollama, etc.):**
152
+
153
+ ```bash
154
+ run-clear-eval-analysis \
155
+ --provider openai \
156
+ --eval-model-name my-local-model \
157
+ --endpoint-url http://localhost:8000/v1
158
+ ```
159
+
160
+ No credentials are needed when using `--endpoint-url` with a local server.
161
+
162
+ Set the required environment variables for your provider according to [LiteLLM's documentation](https://docs.litellm.ai/docs/providers).
163
+
164
+ ---
165
+
166
+ ## Documentation
167
+
168
+ | Guide | Description |
169
+ |-------|-------------|
170
+ | [**Agentic Workflows Guide**](src/clear_eval/agentic/README.md) | Multi-agent evaluation — trace preprocessing, step-by-step and trajectory analysis, configuration reference |
171
+ | [**Agentic Dashboard Guide**](docs/agentic/dashboard.md) | Dashboard features — workflow view, node analysis, trajectory explorer, path and temporal analysis |
172
+ | [**LLM Analysis Guide**](docs/llm-analysis.md) | Full pipeline reference — input formats, CLI arguments, configuration, and external judges |
173
+
174
+ ---
175
+
176
+ ## Citation
177
+
178
+ If you use CLEAR in your research, please cite the relevant paper(s):
179
+
180
+ **LLM Analysis** ([AAAI 2026](https://ojs.aaai.org/index.php/AAAI/article/view/42398)):
181
+ ```bibtex
182
+ @inproceedings{yehudai2026clear,
183
+ title={CLEAR: Error analysis via llm-as-a-judge made easy},
184
+ author={Yehudai, Asaf and Eden, Lilach and Perlitz, Yotam and Bar-Haim, Roy and Shmueli-Scheuer, Michal},
185
+ booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
186
+ volume={40},
187
+ number={48},
188
+ pages={41736--41738},
189
+ year={2026}
190
+ }
191
+ ```
192
+
193
+ **Agentic Analysis** (ACL 2026, to appear — [preprint](https://arxiv.org/abs/2605.22608)):
194
+ ```bibtex
195
+ @article{yehudai2026agentic,
196
+ title={Agentic CLEAR: Automating Multi-Level Evaluation of LLM Agents},
197
+ author={Yehudai, Asaf and Eden, Lilach and Shmueli-Scheuer, Michal},
198
+ journal={arXiv preprint arXiv:2605.22608},
199
+ year={2026}
200
+ }
201
+ ```
202
+
203
+ ---
204
+
205
+ ## License
206
+
207
+ Apache 2.0 — see [LICENSE](LICENSE) for details.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "clear_eval"
7
- version = "2.0.1"
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"},
@@ -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
@@ -9,6 +9,18 @@ import sys
9
9
  from pathlib import Path
10
10
 
11
11
 
12
+ def _is_port_available(host: str, port: int) -> bool:
13
+ """Check if a port is available for binding."""
14
+ import socket
15
+ try:
16
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
17
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
18
+ s.bind((host, port))
19
+ return True
20
+ except OSError:
21
+ return False
22
+
23
+
12
24
  def main():
13
25
  parser = argparse.ArgumentParser(description="Launch the Agentic Workflow Dashboard")
14
26
  parser.add_argument("--port", type=int, default=8080, help="Port to run the dashboard on (default: 8080)")
@@ -16,6 +28,12 @@ def main():
16
28
  parser.add_argument("--no-open", action="store_true", help="Don't auto-open browser")
17
29
  args = parser.parse_args()
18
30
 
31
+ if not _is_port_available(args.host, args.port):
32
+ print(f"Error: Port {args.port} is already in use.")
33
+ print(f"Either stop the process using port {args.port}, or use a different port:")
34
+ print(f" run-clear-agentic-dashboard --port {args.port + 1}")
35
+ sys.exit(1)
36
+
19
37
  # Ensure the server shuts down cleanly on termination signals,
20
38
  # so the port is released immediately instead of staying in TIME_WAIT.
21
39
  def _handle_signal(signum, frame):
@@ -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