judgeval 0.0.54__tar.gz → 0.1.0__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.
- judgeval-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/release.yaml +35 -3
- judgeval-0.1.0/PKG-INFO +202 -0
- judgeval-0.1.0/README.md +171 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/pyproject.toml +4 -2
- judgeval-0.1.0/src/judgeval/common/api/__init__.py +3 -0
- judgeval-0.1.0/src/judgeval/common/api/api.py +352 -0
- judgeval-0.1.0/src/judgeval/common/api/constants.py +165 -0
- judgeval-0.1.0/src/judgeval/common/storage/__init__.py +6 -0
- judgeval-0.1.0/src/judgeval/common/tracer/__init__.py +31 -0
- judgeval-0.1.0/src/judgeval/common/tracer/constants.py +22 -0
- judgeval-0.1.0/src/judgeval/common/tracer/core.py +1916 -0
- judgeval-0.1.0/src/judgeval/common/tracer/otel_exporter.py +108 -0
- judgeval-0.1.0/src/judgeval/common/tracer/otel_span_processor.py +234 -0
- judgeval-0.1.0/src/judgeval/common/tracer/span_processor.py +37 -0
- judgeval-0.1.0/src/judgeval/common/tracer/span_transformer.py +211 -0
- judgeval-0.1.0/src/judgeval/common/tracer/trace_manager.py +92 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/common/utils.py +2 -2
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/constants.py +3 -30
- judgeval-0.1.0/src/judgeval/data/datasets/eval_dataset_client.py +214 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/judgment_types.py +4 -12
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/result.py +1 -1
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/scorer_data.py +2 -2
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/scripts/openapi_transform.py +1 -1
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/trace.py +66 -1
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/trace_run.py +0 -3
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/evaluation_run.py +0 -2
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/integrations/langgraph.py +43 -164
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judgment_client.py +17 -211
- judgeval-0.1.0/src/judgeval/run_evaluation.py +684 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/__init__.py +2 -6
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/base_scorer.py +4 -23
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/__init__.py +3 -3
- judgeval-0.1.0/src/judgeval/scorers/judgeval_scorers/api_scorers/prompt_scorer.py +215 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/score.py +2 -1
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/utils.py +1 -13
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/utils/requests.py +21 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/uv.lock +523 -434
- judgeval-0.0.54/PKG-INFO +0 -1384
- judgeval-0.0.54/README.md +0 -1354
- judgeval-0.0.54/src/judgeval/common/tracer.py +0 -3215
- judgeval-0.0.54/src/judgeval/data/datasets/eval_dataset_client.py +0 -341
- judgeval-0.0.54/src/judgeval/run_evaluation.py +0 -1086
- judgeval-0.0.54/src/judgeval/scorers/judgeval_scorers/api_scorers/classifier_scorer.py +0 -73
- judgeval-0.0.54/src/judgeval/scorers/judgeval_scorers/classifiers/__init__.py +0 -3
- judgeval-0.0.54/src/judgeval/scorers/judgeval_scorers/classifiers/text2sql/__init__.py +0 -3
- judgeval-0.0.54/src/judgeval/scorers/judgeval_scorers/classifiers/text2sql/text2sql_scorer.py +0 -53
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/pull_request_template.md +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/blocked-pr.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/ci.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/lint.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/merge-branch-check.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.github/workflows/validate-branch.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.gitignore +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/.pre-commit-config.yaml +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/LICENSE.md +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/Screenshot 2025-05-17 at 8.14.27/342/200/257PM.png" +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/agent.gif +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/data.gif +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/dataset_clustering_screenshot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/dataset_clustering_screenshot_dm.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/datasets_preview_screenshot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/document.gif +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/error_analysis_dashboard.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/experiments_dashboard_screenshot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/experiments_page.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/experiments_pagev2.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/logo-dark.svg +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/logo-light.svg +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/monitoring_screenshot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/new_darkmode.svg +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/new_lightmode.svg +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/product_shot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/trace.gif +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/trace_demo.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/trace_screenshot.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/assets/trace_screenshot_old.png +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/pytest.ini +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/.coveragerc +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/clients.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/common/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/common/exceptions.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/common/logger.py +0 -0
- {judgeval-0.0.54/src/judgeval/common → judgeval-0.1.0/src/judgeval/common/storage}/s3_storage.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/datasets/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/datasets/dataset.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/example.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/scripts/fix_default_factory.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/data/tool.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/base_judge.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/litellm_judge.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/mixture_of_judges.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/together_judge.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/judges/utils.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/rules.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/agent_scorer.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/api_scorer.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/example_scorer.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/exceptions.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_correctness.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_relevancy.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/derailment_scorer.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/execution_order.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/faithfulness.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/hallucination.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/instruction_adherence.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/tool_dependency.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/scorers/judgeval_scorers/api_scorers/tool_order.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/tracer/__init__.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/utils/alerts.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/utils/file_utils.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/judgeval/version_check.py +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/src/update_types.sh +0 -0
- {judgeval-0.0.54 → judgeval-0.1.0}/update_version.py +0 -0
@@ -28,6 +28,18 @@ jobs:
|
|
28
28
|
version=$(curl -s https://pypi.org/pypi/judgeval/json | jq -r .info.version)
|
29
29
|
echo "latest_version=$version" >> $GITHUB_OUTPUT
|
30
30
|
|
31
|
+
- name: Determine bump type (minor if commit message starts with [Bump Minor Version], else patch)
|
32
|
+
id: bump_type
|
33
|
+
run: |
|
34
|
+
# Get the latest commit message
|
35
|
+
commit_message=$(git log -1 --pretty=%B)
|
36
|
+
# Default bump type
|
37
|
+
bump_type=patch
|
38
|
+
if [[ "$commit_message" == "[Bump Minor Version]"* ]]; then
|
39
|
+
bump_type=minor
|
40
|
+
fi
|
41
|
+
echo "bump_type=$bump_type" >> $GITHUB_OUTPUT
|
42
|
+
|
31
43
|
- name: Bump version and create new tag
|
32
44
|
id: bump_tag
|
33
45
|
run: |
|
@@ -37,9 +49,29 @@ jobs:
|
|
37
49
|
# Extract version numbers
|
38
50
|
IFS='.' read -r major minor patch <<< "$latest_version"
|
39
51
|
|
40
|
-
#
|
41
|
-
|
42
|
-
|
52
|
+
# Set major version (manually modify this if you want to change the major version)
|
53
|
+
new_major_version=0
|
54
|
+
|
55
|
+
# Validate that new major version is greater than current major version
|
56
|
+
if [ "$new_major_version" -lt "$major" ]; then
|
57
|
+
echo "Error: New major version ($new_major_version) must be greater than or equal to current major version ($major)"
|
58
|
+
exit 1
|
59
|
+
fi
|
60
|
+
|
61
|
+
if [ "$new_major_version" -ne "$major" ]; then # If major version changed, set minor and patch to 0
|
62
|
+
echo "Major version bumped, setting minor and patch to 0"
|
63
|
+
minor=0
|
64
|
+
patch=0
|
65
|
+
elif [ "${{ steps.bump_type.outputs.bump_type }}" = "minor" ]; then
|
66
|
+
echo "Minor version bumped, setting patch to 0"
|
67
|
+
minor=$((minor + 1))
|
68
|
+
patch=0
|
69
|
+
else
|
70
|
+
echo "Patch version bumped"
|
71
|
+
patch=$((patch + 1))
|
72
|
+
fi
|
73
|
+
|
74
|
+
new_version="$new_major_version.$minor.$patch"
|
43
75
|
|
44
76
|
echo "New version: $new_version"
|
45
77
|
echo "new_version=$new_version" >> $GITHUB_OUTPUT
|
judgeval-0.1.0/PKG-INFO
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: judgeval
|
3
|
+
Version: 0.1.0
|
4
|
+
Summary: Judgeval Package
|
5
|
+
Project-URL: Homepage, https://github.com/JudgmentLabs/judgeval
|
6
|
+
Project-URL: Issues, https://github.com/JudgmentLabs/judgeval/issues
|
7
|
+
Author-email: Andrew Li <andrew@judgmentlabs.ai>, Alex Shan <alex@judgmentlabs.ai>, Joseph Camyre <joseph@judgmentlabs.ai>
|
8
|
+
License-Expression: Apache-2.0
|
9
|
+
License-File: LICENSE.md
|
10
|
+
Classifier: Operating System :: OS Independent
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
12
|
+
Requires-Python: >=3.11
|
13
|
+
Requires-Dist: anthropic
|
14
|
+
Requires-Dist: boto3
|
15
|
+
Requires-Dist: datamodel-code-generator>=0.31.1
|
16
|
+
Requires-Dist: google-genai
|
17
|
+
Requires-Dist: langchain-anthropic
|
18
|
+
Requires-Dist: langchain-core
|
19
|
+
Requires-Dist: langchain-huggingface
|
20
|
+
Requires-Dist: langchain-openai
|
21
|
+
Requires-Dist: litellm>=1.61.15
|
22
|
+
Requires-Dist: matplotlib>=3.10.3
|
23
|
+
Requires-Dist: nest-asyncio
|
24
|
+
Requires-Dist: openai
|
25
|
+
Requires-Dist: pandas
|
26
|
+
Requires-Dist: python-dotenv==1.0.1
|
27
|
+
Requires-Dist: python-slugify>=8.0.4
|
28
|
+
Requires-Dist: requests
|
29
|
+
Requires-Dist: together
|
30
|
+
Description-Content-Type: text/markdown
|
31
|
+
|
32
|
+
<div align="center">
|
33
|
+
|
34
|
+
<img src="assets/new_lightmode.svg#gh-light-mode-only" alt="Judgment Logo" width="400" />
|
35
|
+
<img src="assets/new_darkmode.svg#gh-dark-mode-only" alt="Judgment Logo" width="400" />
|
36
|
+
|
37
|
+
<br>
|
38
|
+
<div style="font-size: 1.5em;">
|
39
|
+
Enable self-learning agents with traces, evals, and environment data.
|
40
|
+
</div>
|
41
|
+
|
42
|
+
## [Docs](https://docs.judgmentlabs.ai/) • [Judgment Cloud](https://app.judgmentlabs.ai/register) • [Self-Host](https://docs.judgmentlabs.ai/documentation/self-hosting/get-started)
|
43
|
+
|
44
|
+
[Demo](https://www.youtube.com/watch?v=1S4LixpVbcc) • [Bug Reports](https://github.com/JudgmentLabs/judgeval/issues) • [Changelog](https://docs.judgmentlabs.ai/changelog/2025-04-21)
|
45
|
+
|
46
|
+
We're hiring! Join us in our mission to enable self-learning agents by providing the data and signals needed for monitoring and post-training.
|
47
|
+
|
48
|
+
[](https://x.com/JudgmentLabs)
|
49
|
+
[](https://www.linkedin.com/company/judgmentlabs)
|
50
|
+
[](https://discord.gg/tGVFf8UBUY)
|
51
|
+
|
52
|
+
<img src="assets/product_shot.png" alt="Judgment Platform" width="800" />
|
53
|
+
|
54
|
+
</div>
|
55
|
+
|
56
|
+
Judgeval offers **open-source tooling** for tracing and evaluating autonomous, stateful agents. It **provides runtime data from agent-environment interactions** for continuous learning and self-improvement.
|
57
|
+
|
58
|
+
## 🎬 See Judgeval in Action
|
59
|
+
|
60
|
+
**[Multi-Agent System](https://github.com/JudgmentLabs/judgment-cookbook/tree/main/cookbooks/agents/multi-agent) with complete observability:** (1) A multi-agent system spawns agents to research topics on the internet. (2) With just **3 lines of code**, Judgeval traces every input/output + environment response across all agent tool calls for debugging. (3) After completion, (4) export all interaction data to enable further environment-specific learning and optimization.
|
61
|
+
|
62
|
+
<table style="width: 100%; max-width: 800px; table-layout: fixed;">
|
63
|
+
<tr>
|
64
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
65
|
+
<img src="assets/agent.gif" alt="Agent Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
66
|
+
<br><strong>🤖 Agents Running</strong>
|
67
|
+
</td>
|
68
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
69
|
+
<img src="assets/trace.gif" alt="Trace Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
70
|
+
<br><strong>📊 Real-time Tracing</strong>
|
71
|
+
</td>
|
72
|
+
</tr>
|
73
|
+
<tr>
|
74
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
75
|
+
<img src="assets/document.gif" alt="Agent Completed Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
76
|
+
<br><strong>✅ Agents Completed Running</strong>
|
77
|
+
</td>
|
78
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
79
|
+
<img src="assets/data.gif" alt="Data Export Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
80
|
+
<br><strong>📤 Exporting Agent Environment Data</strong>
|
81
|
+
</td>
|
82
|
+
</tr>
|
83
|
+
|
84
|
+
</table>
|
85
|
+
|
86
|
+
## 📋 Table of Contents
|
87
|
+
- [🛠️ Installation](#️-installation)
|
88
|
+
- [🏁 Quickstarts](#-quickstarts)
|
89
|
+
- [✨ Features](#-features)
|
90
|
+
- [🏢 Self-Hosting](#-self-hosting)
|
91
|
+
- [📚 Cookbooks](#-cookbooks)
|
92
|
+
- [💻 Development with Cursor](#-development-with-cursor)
|
93
|
+
|
94
|
+
## 🛠️ Installation
|
95
|
+
|
96
|
+
Get started with Judgeval by installing our SDK using pip:
|
97
|
+
|
98
|
+
```bash
|
99
|
+
pip install judgeval
|
100
|
+
```
|
101
|
+
|
102
|
+
Ensure you have your `JUDGMENT_API_KEY` and `JUDGMENT_ORG_ID` environment variables set to connect to the [Judgment Platform](https://app.judgmentlabs.ai/).
|
103
|
+
|
104
|
+
```bash
|
105
|
+
export JUDGMENT_API_KEY=...
|
106
|
+
export JUDGMENT_ORG_ID=...
|
107
|
+
```
|
108
|
+
|
109
|
+
**If you don't have keys, [create an account](https://app.judgmentlabs.ai/register) on the platform!**
|
110
|
+
|
111
|
+
## 🏁 Quickstarts
|
112
|
+
|
113
|
+
### 🛰️ Tracing
|
114
|
+
|
115
|
+
Create a file named `agent.py` with the following code:
|
116
|
+
|
117
|
+
```python
|
118
|
+
from judgeval.tracer import Tracer, wrap
|
119
|
+
from openai import OpenAI
|
120
|
+
|
121
|
+
client = wrap(OpenAI()) # tracks all LLM calls
|
122
|
+
judgment = Tracer(project_name="my_project")
|
123
|
+
|
124
|
+
@judgment.observe(span_type="tool")
|
125
|
+
def format_question(question: str) -> str:
|
126
|
+
# dummy tool
|
127
|
+
return f"Question : {question}"
|
128
|
+
|
129
|
+
@judgment.observe(span_type="function")
|
130
|
+
def run_agent(prompt: str) -> str:
|
131
|
+
task = format_question(prompt)
|
132
|
+
response = client.chat.completions.create(
|
133
|
+
model="gpt-4.1",
|
134
|
+
messages=[{"role": "user", "content": task}]
|
135
|
+
)
|
136
|
+
return response.choices[0].message.content
|
137
|
+
|
138
|
+
run_agent("What is the capital of the United States?")
|
139
|
+
```
|
140
|
+
You'll see your trace exported to the Judgment Platform:
|
141
|
+
|
142
|
+
<p align="center"><img src="assets/trace_demo.png" alt="Judgment Platform Trace Example" width="800" /></p>
|
143
|
+
|
144
|
+
|
145
|
+
[Click here](https://docs.judgmentlabs.ai/documentation/tracing/introduction) for a more detailed explanation.
|
146
|
+
|
147
|
+
|
148
|
+
<!-- Created by https://github.com/ekalinin/github-markdown-toc -->
|
149
|
+
|
150
|
+
|
151
|
+
## ✨ Features
|
152
|
+
|
153
|
+
| | |
|
154
|
+
|:---|:---:|
|
155
|
+
| <h3>🔍 Tracing</h3>Automatic agent tracing integrated with common frameworks (LangGraph, OpenAI, Anthropic). **Tracks inputs/outputs, agent tool calls, latency, cost, and custom metadata** at every step.<br><br>**Useful for:**<br>• 🐛 Debugging agent runs <br>• 📋 Collecting agent environment data <br>• 🔬 Pinpointing performance bottlenecks| <p align="center"><img src="assets/trace_screenshot.png" alt="Tracing visualization" width="1200"/></p> |
|
156
|
+
| <h3>🧪 Evals</h3>Build custom evaluators on top of your agents. Judgeval supports LLM-as-a-judge, manual labeling, and code-based evaluators that connect with our metric-tracking infrastructure. <br><br>**Useful for:**<br>• ⚠️ Unit-testing <br>• 🔬 A/B testing <br>• 🛡️ Online guardrails | <p align="center"><img src="assets/experiments_page.png" alt="Evaluation metrics" width="800"/></p> |
|
157
|
+
| <h3>📡 Monitoring</h3>Get Slack alerts for agent failures in production. Add custom hooks to address production regressions.<br><br> **Useful for:** <br>• 📉 Identifying degradation early <br>• 📈 Visualizing performance trends across agent versions and time | <p align="center"><img src="assets/error_analysis_dashboard.png" alt="Monitoring Dashboard" width="1200"/></p> |
|
158
|
+
| <h3>📊 Datasets</h3>Export traces and test cases to datasets for scaled analysis and optimization. Move datasets to/from Parquet, S3, etc. <br><br>Run evals on datasets as unit tests or to A/B test different agent configurations, enabling continuous learning from production interactions. <br><br> **Useful for:**<br>• 🗃️ Agent environment interaction data for optimization<br>• 🔄 Scaled analysis for A/B tests | <p align="center"><img src="assets/datasets_preview_screenshot.png" alt="Dataset management" width="1200"/></p> |
|
159
|
+
|
160
|
+
## 🏢 Self-Hosting
|
161
|
+
|
162
|
+
Run Judgment on your own infrastructure: we provide comprehensive self-hosting capabilities that give you full control over the backend and data plane that Judgeval interfaces with.
|
163
|
+
|
164
|
+
### Key Features
|
165
|
+
* Deploy Judgment on your own AWS account
|
166
|
+
* Store data in your own Supabase instance
|
167
|
+
* Access Judgment through your own custom domain
|
168
|
+
|
169
|
+
### Getting Started
|
170
|
+
1. Check out our [self-hosting documentation](https://docs.judgmentlabs.ai/documentation/self-hosting/get-started) for detailed setup instructions, along with how your self-hosted instance can be accessed
|
171
|
+
2. Use the [Judgment CLI](https://docs.judgmentlabs.ai/documentation/developer-tools/judgment-cli/installation) to deploy your self-hosted environment
|
172
|
+
3. After your self-hosted instance is setup, make sure the `JUDGMENT_API_URL` environmental variable is set to your self-hosted backend endpoint
|
173
|
+
|
174
|
+
## 📚 Cookbooks
|
175
|
+
|
176
|
+
Have your own? We're happy to feature it if you create a PR or message us on [Discord](https://discord.gg/tGVFf8UBUY).
|
177
|
+
|
178
|
+
You can access our repo of cookbooks [here](https://github.com/JudgmentLabs/judgment-cookbook).
|
179
|
+
|
180
|
+
## 💻 Development with Cursor
|
181
|
+
Building agents and LLM workflows in Cursor works best when your coding assistant has the proper context about Judgment integration. The Cursor rules file contains the key information needed for your assistant to implement Judgment features effectively.
|
182
|
+
|
183
|
+
Refer to the official [documentation](https://docs.judgmentlabs.ai/documentation/developer-tools/cursor/cursor-rules) for access to the rules file and more information on integrating this rules file with your codebase.
|
184
|
+
|
185
|
+
## ⭐ Star Us on GitHub
|
186
|
+
|
187
|
+
If you find Judgeval useful, please consider giving us a star on GitHub! Your support helps us grow our community and continue improving the repository.
|
188
|
+
|
189
|
+
## ❤️ Contributors
|
190
|
+
|
191
|
+
There are many ways to contribute to Judgeval:
|
192
|
+
|
193
|
+
- Submit [bug reports](https://github.com/JudgmentLabs/judgeval/issues) and [feature requests](https://github.com/JudgmentLabs/judgeval/issues)
|
194
|
+
- Review the documentation and submit [Pull Requests](https://github.com/JudgmentLabs/judgeval/pulls) to improve it
|
195
|
+
- Speaking or writing about Judgment and letting us know!
|
196
|
+
|
197
|
+
<!-- Contributors collage -->
|
198
|
+
[](https://github.com/JudgmentLabs/judgeval/graphs/contributors)
|
199
|
+
|
200
|
+
---
|
201
|
+
|
202
|
+
Judgeval is created and maintained by [Judgment Labs](https://judgmentlabs.ai/).
|
judgeval-0.1.0/README.md
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
<div align="center">
|
2
|
+
|
3
|
+
<img src="assets/new_lightmode.svg#gh-light-mode-only" alt="Judgment Logo" width="400" />
|
4
|
+
<img src="assets/new_darkmode.svg#gh-dark-mode-only" alt="Judgment Logo" width="400" />
|
5
|
+
|
6
|
+
<br>
|
7
|
+
<div style="font-size: 1.5em;">
|
8
|
+
Enable self-learning agents with traces, evals, and environment data.
|
9
|
+
</div>
|
10
|
+
|
11
|
+
## [Docs](https://docs.judgmentlabs.ai/) • [Judgment Cloud](https://app.judgmentlabs.ai/register) • [Self-Host](https://docs.judgmentlabs.ai/documentation/self-hosting/get-started)
|
12
|
+
|
13
|
+
[Demo](https://www.youtube.com/watch?v=1S4LixpVbcc) • [Bug Reports](https://github.com/JudgmentLabs/judgeval/issues) • [Changelog](https://docs.judgmentlabs.ai/changelog/2025-04-21)
|
14
|
+
|
15
|
+
We're hiring! Join us in our mission to enable self-learning agents by providing the data and signals needed for monitoring and post-training.
|
16
|
+
|
17
|
+
[](https://x.com/JudgmentLabs)
|
18
|
+
[](https://www.linkedin.com/company/judgmentlabs)
|
19
|
+
[](https://discord.gg/tGVFf8UBUY)
|
20
|
+
|
21
|
+
<img src="assets/product_shot.png" alt="Judgment Platform" width="800" />
|
22
|
+
|
23
|
+
</div>
|
24
|
+
|
25
|
+
Judgeval offers **open-source tooling** for tracing and evaluating autonomous, stateful agents. It **provides runtime data from agent-environment interactions** for continuous learning and self-improvement.
|
26
|
+
|
27
|
+
## 🎬 See Judgeval in Action
|
28
|
+
|
29
|
+
**[Multi-Agent System](https://github.com/JudgmentLabs/judgment-cookbook/tree/main/cookbooks/agents/multi-agent) with complete observability:** (1) A multi-agent system spawns agents to research topics on the internet. (2) With just **3 lines of code**, Judgeval traces every input/output + environment response across all agent tool calls for debugging. (3) After completion, (4) export all interaction data to enable further environment-specific learning and optimization.
|
30
|
+
|
31
|
+
<table style="width: 100%; max-width: 800px; table-layout: fixed;">
|
32
|
+
<tr>
|
33
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
34
|
+
<img src="assets/agent.gif" alt="Agent Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
35
|
+
<br><strong>🤖 Agents Running</strong>
|
36
|
+
</td>
|
37
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
38
|
+
<img src="assets/trace.gif" alt="Trace Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
39
|
+
<br><strong>📊 Real-time Tracing</strong>
|
40
|
+
</td>
|
41
|
+
</tr>
|
42
|
+
<tr>
|
43
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
44
|
+
<img src="assets/document.gif" alt="Agent Completed Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
45
|
+
<br><strong>✅ Agents Completed Running</strong>
|
46
|
+
</td>
|
47
|
+
<td align="center" style="padding: 8px; width: 50%;">
|
48
|
+
<img src="assets/data.gif" alt="Data Export Demo" style="width: 100%; max-width: 350px; height: auto;" />
|
49
|
+
<br><strong>📤 Exporting Agent Environment Data</strong>
|
50
|
+
</td>
|
51
|
+
</tr>
|
52
|
+
|
53
|
+
</table>
|
54
|
+
|
55
|
+
## 📋 Table of Contents
|
56
|
+
- [🛠️ Installation](#️-installation)
|
57
|
+
- [🏁 Quickstarts](#-quickstarts)
|
58
|
+
- [✨ Features](#-features)
|
59
|
+
- [🏢 Self-Hosting](#-self-hosting)
|
60
|
+
- [📚 Cookbooks](#-cookbooks)
|
61
|
+
- [💻 Development with Cursor](#-development-with-cursor)
|
62
|
+
|
63
|
+
## 🛠️ Installation
|
64
|
+
|
65
|
+
Get started with Judgeval by installing our SDK using pip:
|
66
|
+
|
67
|
+
```bash
|
68
|
+
pip install judgeval
|
69
|
+
```
|
70
|
+
|
71
|
+
Ensure you have your `JUDGMENT_API_KEY` and `JUDGMENT_ORG_ID` environment variables set to connect to the [Judgment Platform](https://app.judgmentlabs.ai/).
|
72
|
+
|
73
|
+
```bash
|
74
|
+
export JUDGMENT_API_KEY=...
|
75
|
+
export JUDGMENT_ORG_ID=...
|
76
|
+
```
|
77
|
+
|
78
|
+
**If you don't have keys, [create an account](https://app.judgmentlabs.ai/register) on the platform!**
|
79
|
+
|
80
|
+
## 🏁 Quickstarts
|
81
|
+
|
82
|
+
### 🛰️ Tracing
|
83
|
+
|
84
|
+
Create a file named `agent.py` with the following code:
|
85
|
+
|
86
|
+
```python
|
87
|
+
from judgeval.tracer import Tracer, wrap
|
88
|
+
from openai import OpenAI
|
89
|
+
|
90
|
+
client = wrap(OpenAI()) # tracks all LLM calls
|
91
|
+
judgment = Tracer(project_name="my_project")
|
92
|
+
|
93
|
+
@judgment.observe(span_type="tool")
|
94
|
+
def format_question(question: str) -> str:
|
95
|
+
# dummy tool
|
96
|
+
return f"Question : {question}"
|
97
|
+
|
98
|
+
@judgment.observe(span_type="function")
|
99
|
+
def run_agent(prompt: str) -> str:
|
100
|
+
task = format_question(prompt)
|
101
|
+
response = client.chat.completions.create(
|
102
|
+
model="gpt-4.1",
|
103
|
+
messages=[{"role": "user", "content": task}]
|
104
|
+
)
|
105
|
+
return response.choices[0].message.content
|
106
|
+
|
107
|
+
run_agent("What is the capital of the United States?")
|
108
|
+
```
|
109
|
+
You'll see your trace exported to the Judgment Platform:
|
110
|
+
|
111
|
+
<p align="center"><img src="assets/trace_demo.png" alt="Judgment Platform Trace Example" width="800" /></p>
|
112
|
+
|
113
|
+
|
114
|
+
[Click here](https://docs.judgmentlabs.ai/documentation/tracing/introduction) for a more detailed explanation.
|
115
|
+
|
116
|
+
|
117
|
+
<!-- Created by https://github.com/ekalinin/github-markdown-toc -->
|
118
|
+
|
119
|
+
|
120
|
+
## ✨ Features
|
121
|
+
|
122
|
+
| | |
|
123
|
+
|:---|:---:|
|
124
|
+
| <h3>🔍 Tracing</h3>Automatic agent tracing integrated with common frameworks (LangGraph, OpenAI, Anthropic). **Tracks inputs/outputs, agent tool calls, latency, cost, and custom metadata** at every step.<br><br>**Useful for:**<br>• 🐛 Debugging agent runs <br>• 📋 Collecting agent environment data <br>• 🔬 Pinpointing performance bottlenecks| <p align="center"><img src="assets/trace_screenshot.png" alt="Tracing visualization" width="1200"/></p> |
|
125
|
+
| <h3>🧪 Evals</h3>Build custom evaluators on top of your agents. Judgeval supports LLM-as-a-judge, manual labeling, and code-based evaluators that connect with our metric-tracking infrastructure. <br><br>**Useful for:**<br>• ⚠️ Unit-testing <br>• 🔬 A/B testing <br>• 🛡️ Online guardrails | <p align="center"><img src="assets/experiments_page.png" alt="Evaluation metrics" width="800"/></p> |
|
126
|
+
| <h3>📡 Monitoring</h3>Get Slack alerts for agent failures in production. Add custom hooks to address production regressions.<br><br> **Useful for:** <br>• 📉 Identifying degradation early <br>• 📈 Visualizing performance trends across agent versions and time | <p align="center"><img src="assets/error_analysis_dashboard.png" alt="Monitoring Dashboard" width="1200"/></p> |
|
127
|
+
| <h3>📊 Datasets</h3>Export traces and test cases to datasets for scaled analysis and optimization. Move datasets to/from Parquet, S3, etc. <br><br>Run evals on datasets as unit tests or to A/B test different agent configurations, enabling continuous learning from production interactions. <br><br> **Useful for:**<br>• 🗃️ Agent environment interaction data for optimization<br>• 🔄 Scaled analysis for A/B tests | <p align="center"><img src="assets/datasets_preview_screenshot.png" alt="Dataset management" width="1200"/></p> |
|
128
|
+
|
129
|
+
## 🏢 Self-Hosting
|
130
|
+
|
131
|
+
Run Judgment on your own infrastructure: we provide comprehensive self-hosting capabilities that give you full control over the backend and data plane that Judgeval interfaces with.
|
132
|
+
|
133
|
+
### Key Features
|
134
|
+
* Deploy Judgment on your own AWS account
|
135
|
+
* Store data in your own Supabase instance
|
136
|
+
* Access Judgment through your own custom domain
|
137
|
+
|
138
|
+
### Getting Started
|
139
|
+
1. Check out our [self-hosting documentation](https://docs.judgmentlabs.ai/documentation/self-hosting/get-started) for detailed setup instructions, along with how your self-hosted instance can be accessed
|
140
|
+
2. Use the [Judgment CLI](https://docs.judgmentlabs.ai/documentation/developer-tools/judgment-cli/installation) to deploy your self-hosted environment
|
141
|
+
3. After your self-hosted instance is setup, make sure the `JUDGMENT_API_URL` environmental variable is set to your self-hosted backend endpoint
|
142
|
+
|
143
|
+
## 📚 Cookbooks
|
144
|
+
|
145
|
+
Have your own? We're happy to feature it if you create a PR or message us on [Discord](https://discord.gg/tGVFf8UBUY).
|
146
|
+
|
147
|
+
You can access our repo of cookbooks [here](https://github.com/JudgmentLabs/judgment-cookbook).
|
148
|
+
|
149
|
+
## 💻 Development with Cursor
|
150
|
+
Building agents and LLM workflows in Cursor works best when your coding assistant has the proper context about Judgment integration. The Cursor rules file contains the key information needed for your assistant to implement Judgment features effectively.
|
151
|
+
|
152
|
+
Refer to the official [documentation](https://docs.judgmentlabs.ai/documentation/developer-tools/cursor/cursor-rules) for access to the rules file and more information on integrating this rules file with your codebase.
|
153
|
+
|
154
|
+
## ⭐ Star Us on GitHub
|
155
|
+
|
156
|
+
If you find Judgeval useful, please consider giving us a star on GitHub! Your support helps us grow our community and continue improving the repository.
|
157
|
+
|
158
|
+
## ❤️ Contributors
|
159
|
+
|
160
|
+
There are many ways to contribute to Judgeval:
|
161
|
+
|
162
|
+
- Submit [bug reports](https://github.com/JudgmentLabs/judgeval/issues) and [feature requests](https://github.com/JudgmentLabs/judgeval/issues)
|
163
|
+
- Review the documentation and submit [Pull Requests](https://github.com/JudgmentLabs/judgeval/pulls) to improve it
|
164
|
+
- Speaking or writing about Judgment and letting us know!
|
165
|
+
|
166
|
+
<!-- Contributors collage -->
|
167
|
+
[](https://github.com/JudgmentLabs/judgeval/graphs/contributors)
|
168
|
+
|
169
|
+
---
|
170
|
+
|
171
|
+
Judgeval is created and maintained by [Judgment Labs](https://judgmentlabs.ai/).
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "judgeval"
|
3
|
-
version = "0.0
|
3
|
+
version = "0.1.0"
|
4
4
|
authors = [
|
5
5
|
{ name="Andrew Li", email="andrew@judgmentlabs.ai" },
|
6
6
|
{ name="Alex Shan", email="alex@judgmentlabs.ai" },
|
@@ -16,7 +16,7 @@ classifiers = [
|
|
16
16
|
license = "Apache-2.0"
|
17
17
|
license-files = ["LICENSE.md"]
|
18
18
|
dependencies = [
|
19
|
-
"litellm
|
19
|
+
"litellm>=1.61.15",
|
20
20
|
"python-dotenv==1.0.1",
|
21
21
|
"requests",
|
22
22
|
"pandas",
|
@@ -31,6 +31,7 @@ dependencies = [
|
|
31
31
|
"google-genai",
|
32
32
|
"boto3",
|
33
33
|
"matplotlib>=3.10.3",
|
34
|
+
"python-slugify>=8.0.4",
|
34
35
|
"datamodel-code-generator>=0.31.1",
|
35
36
|
]
|
36
37
|
|
@@ -60,6 +61,7 @@ dev = [
|
|
60
61
|
"tavily-python>=0.7.5",
|
61
62
|
"langgraph>=0.4.3",
|
62
63
|
"pre-commit>=4.2.0",
|
64
|
+
"types-requests>=2.32.4.20250611",
|
63
65
|
]
|
64
66
|
|
65
67
|
[tool.hatch.build]
|