judgeval 0.19.0__tar.gz → 0.20.1__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.
Potentially problematic release.
This version of judgeval might be problematic. Click here for more details.
- {judgeval-0.19.0 → judgeval-0.20.1}/PKG-INFO +1 -1
- {judgeval-0.19.0 → judgeval-0.20.1}/pyproject.toml +1 -1
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/__init__.py +2 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/api/api_types.py +21 -15
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/judgment_types.py +21 -20
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/dataset/__init__.py +11 -2
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/env.py +2 -11
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/evaluation/__init__.py +4 -0
- judgeval-0.19.0/src/judgeval/prompts/prompt.py → judgeval-0.20.1/src/judgeval/prompt/__init__.py +30 -20
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/prompt_scorer.py +1 -1
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/__init__.py +38 -16
- judgeval-0.20.1/src/judgeval/tracer/constants.py +1 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/guards.py +9 -5
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/version.py +1 -1
- judgeval-0.19.0/src/judgeval/tracer/constants.py +0 -1
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/pull_request_template.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/blocked-pr.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/ci.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/claude-code-review.yml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/claude.yml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/lint.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/merge-branch-check.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/mypy.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/pre-commit-autoupdate.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/release.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.github/workflows/validate-branch.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.gitignore +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/.pre-commit-config.yaml +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/CONTRIBUTING.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/LICENSE.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/README.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/Screenshot 2025-05-17 at 8.14.27/342/200/257PM.png" +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/agent.gif +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/agent_trace_example.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/company.jpg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/company_banner.jpg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/darkmode.svg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/full_logo.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/icon.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/lightmode.svg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/brand/white_background.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/custom_scorer_online_abm.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/data.gif +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/dataset_clustering_screenshot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/dataset_clustering_screenshot_dm.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/datasets_preview_screenshot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/document.gif +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/error_analysis_dashboard.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/errors.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/experiments_dashboard_screenshot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/experiments_page.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/experiments_pagev2.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/logo_darkmode.svg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/logo_lightmode.svg +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/monitoring_screenshot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/online_eval.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/product_shot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/quickstart_trajectory_ss.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/test.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/tests.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/trace.gif +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/trace_demo.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/trace_screenshot.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/assets/trace_screenshot_old.png +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/pytest.ini +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/scripts/api_generator.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/scripts/openapi_transform.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/scripts/update_types.sh +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/api/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/cli.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/constants.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/evaluation_run.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/example.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/result.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/scorer_data.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/scripts/fix_default_factory.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/scripts/openapi_transform.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/data/trace.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/exceptions.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/integrations/langgraph/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/integrations/openlit/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/judges/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/judges/base_judge.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/judges/litellm_judge.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/judges/together_judge.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/judges/utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/logger.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/agent_scorer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/api_scorer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/base_scorer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/example_scorer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/exceptions.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_correctness.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/answer_relevancy.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/faithfulness.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/judgeval_scorers/api_scorers/instruction_adherence.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/score.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/scorers/utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/exporters/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/exporters/s3.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/exporters/store.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/exporters/utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/keys.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/constants.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_anthropic/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_anthropic/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_anthropic/messages.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_anthropic/messages_stream.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_anthropic/wrapper.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_google/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_google/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_google/generate_content.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_google/wrapper.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/beta_chat_completions.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/chat_completions.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/responses.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_openai/wrapper.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_together/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_together/chat_completions.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_together/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/llm_together/wrapper.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/llm/providers.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/managers.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/processors/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/tracer/utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/base_trainer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/config.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/console.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/fireworks_trainer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/trainable_model.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/trainer/trainer.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/async_utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/decorators/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/decorators/dont_throw.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/decorators/use_once.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/file_utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/meta.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/project.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/serialize.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/testing.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/url.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/version_check.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/README.md +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/__init__.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/immutable_wrap_async.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/immutable_wrap_async_iterator.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/immutable_wrap_sync.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/immutable_wrap_sync_iterator.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/mutable_wrap_async.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/mutable_wrap_sync.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/py.typed +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/utils/wrappers/utils.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/src/judgeval/warnings.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/update_version.py +0 -0
- {judgeval-0.19.0 → judgeval-0.20.1}/uv.lock +0 -0
|
@@ -146,6 +146,8 @@ class JudgmentClient(metaclass=SingletonMeta):
|
|
|
146
146
|
requirements_text = f.read()
|
|
147
147
|
|
|
148
148
|
try:
|
|
149
|
+
if not self.api_key or not self.organization_id:
|
|
150
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
149
151
|
client = JudgmentSyncClient(
|
|
150
152
|
api_key=self.api_key,
|
|
151
153
|
organization_id=self.organization_id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: .openapi.json
|
|
3
|
-
# timestamp: 2025-10-
|
|
3
|
+
# timestamp: 2025-10-25T22:30:20+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
from typing import Any, Dict, List, Literal, Optional, TypedDict, Union
|
|
@@ -24,15 +24,6 @@ class DatasetsFetch(TypedDict):
|
|
|
24
24
|
project_name: str
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
class DatasetsTableRow(TypedDict):
|
|
28
|
-
dataset_id: str
|
|
29
|
-
name: str
|
|
30
|
-
created_at: str
|
|
31
|
-
kind: Literal["trace", "example"]
|
|
32
|
-
entries: int
|
|
33
|
-
creator: str
|
|
34
|
-
|
|
35
|
-
|
|
36
27
|
class ProjectAdd(TypedDict):
|
|
37
28
|
project_name: str
|
|
38
29
|
|
|
@@ -67,13 +58,9 @@ class SavePromptScorerRequest(TypedDict):
|
|
|
67
58
|
description: NotRequired[Optional[str]]
|
|
68
59
|
|
|
69
60
|
|
|
70
|
-
class SavePromptScorerResponse(TypedDict):
|
|
71
|
-
message: str
|
|
72
|
-
name: str
|
|
73
|
-
|
|
74
|
-
|
|
75
61
|
class FetchPromptScorersRequest(TypedDict):
|
|
76
62
|
names: NotRequired[Optional[List[str]]]
|
|
63
|
+
is_trace: NotRequired[Optional[bool]]
|
|
77
64
|
|
|
78
65
|
|
|
79
66
|
class CustomScorerUploadPayload(TypedDict):
|
|
@@ -193,6 +180,9 @@ DatasetKind = Literal["trace", "example"]
|
|
|
193
180
|
|
|
194
181
|
|
|
195
182
|
class PromptScorer(TypedDict):
|
|
183
|
+
id: str
|
|
184
|
+
user_id: str
|
|
185
|
+
organization_id: str
|
|
196
186
|
name: str
|
|
197
187
|
prompt: str
|
|
198
188
|
threshold: float
|
|
@@ -202,6 +192,7 @@ class PromptScorer(TypedDict):
|
|
|
202
192
|
created_at: NotRequired[Optional[str]]
|
|
203
193
|
updated_at: NotRequired[Optional[str]]
|
|
204
194
|
is_trace: NotRequired[Optional[bool]]
|
|
195
|
+
is_bucket_rubric: NotRequired[Optional[bool]]
|
|
205
196
|
|
|
206
197
|
|
|
207
198
|
class PromptCommitInfo(TypedDict):
|
|
@@ -292,6 +283,7 @@ class TraceEvaluationRun(TypedDict):
|
|
|
292
283
|
created_at: NotRequired[str]
|
|
293
284
|
trace_and_span_ids: List[TraceAndSpanId]
|
|
294
285
|
is_offline: NotRequired[bool]
|
|
286
|
+
is_bucket_run: NotRequired[bool]
|
|
295
287
|
|
|
296
288
|
|
|
297
289
|
class DatasetInsertExamples(TypedDict):
|
|
@@ -300,6 +292,15 @@ class DatasetInsertExamples(TypedDict):
|
|
|
300
292
|
project_name: str
|
|
301
293
|
|
|
302
294
|
|
|
295
|
+
class DatasetInfo(TypedDict):
|
|
296
|
+
dataset_id: str
|
|
297
|
+
name: str
|
|
298
|
+
created_at: str
|
|
299
|
+
kind: DatasetKind
|
|
300
|
+
entries: int
|
|
301
|
+
creator: str
|
|
302
|
+
|
|
303
|
+
|
|
303
304
|
class DatasetCreate(TypedDict):
|
|
304
305
|
name: str
|
|
305
306
|
dataset_kind: DatasetKind
|
|
@@ -308,6 +309,10 @@ class DatasetCreate(TypedDict):
|
|
|
308
309
|
overwrite: bool
|
|
309
310
|
|
|
310
311
|
|
|
312
|
+
class SavePromptScorerResponse(TypedDict):
|
|
313
|
+
scorer_response: PromptScorer
|
|
314
|
+
|
|
315
|
+
|
|
311
316
|
class FetchPromptScorersResponse(TypedDict):
|
|
312
317
|
scorers: List[PromptScorer]
|
|
313
318
|
|
|
@@ -342,6 +347,7 @@ class OtelTraceListItem(TypedDict):
|
|
|
342
347
|
llm_cost: NotRequired[Optional[float]]
|
|
343
348
|
error: NotRequired[str]
|
|
344
349
|
scores: NotRequired[List[OtelSpanListItemScores]]
|
|
350
|
+
rules_invoked: NotRequired[List[str]]
|
|
345
351
|
customer_id: NotRequired[Optional[str]]
|
|
346
352
|
input: NotRequired[Optional[str]]
|
|
347
353
|
output: NotRequired[Optional[str]]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: .openapi.json
|
|
3
|
-
# timestamp: 2025-10-
|
|
3
|
+
# timestamp: 2025-10-25T22:30:19+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
from typing import Annotated, Any, Dict, List, Optional, Union
|
|
@@ -26,20 +26,6 @@ class DatasetsFetch(BaseModel):
|
|
|
26
26
|
project_name: Annotated[str, Field(title="Project Name")]
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class Kind(Enum):
|
|
30
|
-
trace = "trace"
|
|
31
|
-
example = "example"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class DatasetsTableRow(BaseModel):
|
|
35
|
-
dataset_id: Annotated[str, Field(title="Dataset Id")]
|
|
36
|
-
name: Annotated[str, Field(title="Name")]
|
|
37
|
-
created_at: Annotated[str, Field(title="Created At")]
|
|
38
|
-
kind: Annotated[Kind, Field(title="Kind")]
|
|
39
|
-
entries: Annotated[int, Field(title="Entries")]
|
|
40
|
-
creator: Annotated[str, Field(title="Creator")]
|
|
41
|
-
|
|
42
|
-
|
|
43
29
|
class ProjectAdd(BaseModel):
|
|
44
30
|
project_name: Annotated[str, Field(title="Project Name")]
|
|
45
31
|
|
|
@@ -74,13 +60,9 @@ class SavePromptScorerRequest(BaseModel):
|
|
|
74
60
|
description: Annotated[Optional[str], Field(title="Description")] = None
|
|
75
61
|
|
|
76
62
|
|
|
77
|
-
class SavePromptScorerResponse(BaseModel):
|
|
78
|
-
message: Annotated[str, Field(title="Message")]
|
|
79
|
-
name: Annotated[str, Field(title="Name")]
|
|
80
|
-
|
|
81
|
-
|
|
82
63
|
class FetchPromptScorersRequest(BaseModel):
|
|
83
64
|
names: Annotated[Optional[List[str]], Field(title="Names")] = None
|
|
65
|
+
is_trace: Annotated[Optional[bool], Field(title="Is Trace")] = None
|
|
84
66
|
|
|
85
67
|
|
|
86
68
|
class CustomScorerUploadPayload(BaseModel):
|
|
@@ -211,6 +193,9 @@ class DatasetKind(Enum):
|
|
|
211
193
|
|
|
212
194
|
|
|
213
195
|
class PromptScorer(BaseModel):
|
|
196
|
+
id: Annotated[str, Field(title="Id")]
|
|
197
|
+
user_id: Annotated[str, Field(title="User Id")]
|
|
198
|
+
organization_id: Annotated[str, Field(title="Organization Id")]
|
|
214
199
|
name: Annotated[str, Field(title="Name")]
|
|
215
200
|
prompt: Annotated[str, Field(title="Prompt")]
|
|
216
201
|
threshold: Annotated[float, Field(title="Threshold")]
|
|
@@ -220,6 +205,7 @@ class PromptScorer(BaseModel):
|
|
|
220
205
|
created_at: Annotated[Optional[AwareDatetime], Field(title="Created At")] = None
|
|
221
206
|
updated_at: Annotated[Optional[AwareDatetime], Field(title="Updated At")] = None
|
|
222
207
|
is_trace: Annotated[Optional[bool], Field(title="Is Trace")] = False
|
|
208
|
+
is_bucket_rubric: Annotated[Optional[bool], Field(title="Is Bucket Rubric")] = None
|
|
223
209
|
|
|
224
210
|
|
|
225
211
|
class PromptCommitInfo(BaseModel):
|
|
@@ -326,6 +312,7 @@ class TraceEvaluationRun(BaseModel):
|
|
|
326
312
|
List[TraceAndSpanId], Field(title="Trace And Span Ids")
|
|
327
313
|
]
|
|
328
314
|
is_offline: Annotated[Optional[bool], Field(title="Is Offline")] = False
|
|
315
|
+
is_bucket_run: Annotated[Optional[bool], Field(title="Is Bucket Run")] = False
|
|
329
316
|
|
|
330
317
|
|
|
331
318
|
class DatasetInsertExamples(BaseModel):
|
|
@@ -334,6 +321,15 @@ class DatasetInsertExamples(BaseModel):
|
|
|
334
321
|
project_name: Annotated[str, Field(title="Project Name")]
|
|
335
322
|
|
|
336
323
|
|
|
324
|
+
class DatasetInfo(BaseModel):
|
|
325
|
+
dataset_id: Annotated[str, Field(title="Dataset Id")]
|
|
326
|
+
name: Annotated[str, Field(title="Name")]
|
|
327
|
+
created_at: Annotated[str, Field(title="Created At")]
|
|
328
|
+
kind: DatasetKind
|
|
329
|
+
entries: Annotated[int, Field(title="Entries")]
|
|
330
|
+
creator: Annotated[str, Field(title="Creator")]
|
|
331
|
+
|
|
332
|
+
|
|
337
333
|
class DatasetCreate(BaseModel):
|
|
338
334
|
name: Annotated[str, Field(title="Name")]
|
|
339
335
|
dataset_kind: DatasetKind
|
|
@@ -342,6 +338,10 @@ class DatasetCreate(BaseModel):
|
|
|
342
338
|
overwrite: Annotated[bool, Field(title="Overwrite")]
|
|
343
339
|
|
|
344
340
|
|
|
341
|
+
class SavePromptScorerResponse(BaseModel):
|
|
342
|
+
scorer_response: PromptScorer
|
|
343
|
+
|
|
344
|
+
|
|
345
345
|
class FetchPromptScorersResponse(BaseModel):
|
|
346
346
|
scorers: Annotated[List[PromptScorer], Field(title="Scorers")]
|
|
347
347
|
|
|
@@ -380,6 +380,7 @@ class OtelTraceListItem(BaseModel):
|
|
|
380
380
|
scores: Annotated[
|
|
381
381
|
Optional[List[OtelSpanListItemScores]], Field(title="Scores")
|
|
382
382
|
] = []
|
|
383
|
+
rules_invoked: Annotated[Optional[List[str]], Field(title="Rules Invoked")] = []
|
|
383
384
|
customer_id: Annotated[Optional[str], Field(title="Customer Id")] = None
|
|
384
385
|
input: Annotated[Optional[str], Field(title="Input")] = None
|
|
385
386
|
output: Annotated[Optional[str], Field(title="Output")] = None
|
|
@@ -32,8 +32,8 @@ class Dataset:
|
|
|
32
32
|
dataset_kind: DatasetKind = DatasetKind.example
|
|
33
33
|
examples: Optional[List[Example]] = None
|
|
34
34
|
traces: Optional[List[Trace]] = None
|
|
35
|
-
judgment_api_key: str = JUDGMENT_API_KEY
|
|
36
|
-
organization_id: str = JUDGMENT_ORG_ID
|
|
35
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY
|
|
36
|
+
organization_id: str | None = JUDGMENT_ORG_ID
|
|
37
37
|
|
|
38
38
|
@classmethod
|
|
39
39
|
def get(
|
|
@@ -41,6 +41,8 @@ class Dataset:
|
|
|
41
41
|
name: str,
|
|
42
42
|
project_name: str,
|
|
43
43
|
):
|
|
44
|
+
if not cls.judgment_api_key or not cls.organization_id:
|
|
45
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
44
46
|
client = JudgmentSyncClient(cls.judgment_api_key, cls.organization_id)
|
|
45
47
|
dataset = client.datasets_pull_for_judgeval(
|
|
46
48
|
{
|
|
@@ -102,6 +104,8 @@ class Dataset:
|
|
|
102
104
|
examples: List[Example] = [],
|
|
103
105
|
overwrite: bool = False,
|
|
104
106
|
):
|
|
107
|
+
if not cls.judgment_api_key or not cls.organization_id:
|
|
108
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
105
109
|
if not examples:
|
|
106
110
|
examples = []
|
|
107
111
|
|
|
@@ -125,6 +129,8 @@ class Dataset:
|
|
|
125
129
|
|
|
126
130
|
@classmethod
|
|
127
131
|
def list(cls, project_name: str):
|
|
132
|
+
if not cls.judgment_api_key or not cls.organization_id:
|
|
133
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
128
134
|
client = JudgmentSyncClient(cls.judgment_api_key, cls.organization_id)
|
|
129
135
|
datasets = client.datasets_pull_all_for_judgeval({"project_name": project_name})
|
|
130
136
|
|
|
@@ -173,6 +179,9 @@ class Dataset:
|
|
|
173
179
|
if not isinstance(examples, list):
|
|
174
180
|
raise TypeError("examples must be a list")
|
|
175
181
|
|
|
182
|
+
if not self.judgment_api_key or not self.organization_id:
|
|
183
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
184
|
+
|
|
176
185
|
client = JudgmentSyncClient(self.judgment_api_key, self.organization_id)
|
|
177
186
|
client.datasets_insert_examples_for_judgeval(
|
|
178
187
|
{
|
|
@@ -19,17 +19,8 @@ def optional_env_var(var_name: str, default: str | None = None) -> str | None:
|
|
|
19
19
|
return os.getenv(var_name, default)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if value is None:
|
|
25
|
-
raise EnvironmentError(
|
|
26
|
-
f"Environment variable '{var_name}' is required but not set."
|
|
27
|
-
)
|
|
28
|
-
return value
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
JUDGMENT_API_KEY = required_env_var("JUDGMENT_API_KEY")
|
|
32
|
-
JUDGMENT_ORG_ID = required_env_var("JUDGMENT_ORG_ID")
|
|
22
|
+
JUDGMENT_API_KEY = optional_env_var("JUDGMENT_API_KEY")
|
|
23
|
+
JUDGMENT_ORG_ID = optional_env_var("JUDGMENT_ORG_ID")
|
|
33
24
|
JUDGMENT_API_URL = optional_env_var("JUDGMENT_API_URL", "https://api.judgmentlabs.ai")
|
|
34
25
|
|
|
35
26
|
JUDGMENT_DEFAULT_GPT_MODEL = optional_env_var("JUDGMENT_DEFAULT_GPT_MODEL", "gpt-5")
|
|
@@ -112,6 +112,8 @@ def _poll_evaluation_until_complete(
|
|
|
112
112
|
|
|
113
113
|
poll_count = 0
|
|
114
114
|
exception_count = 0
|
|
115
|
+
if not JUDGMENT_API_KEY or not JUDGMENT_ORG_ID:
|
|
116
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
115
117
|
api_client = JudgmentSyncClient(JUDGMENT_API_KEY, JUDGMENT_ORG_ID)
|
|
116
118
|
while poll_count < max_poll_count:
|
|
117
119
|
poll_count += 1
|
|
@@ -222,6 +224,8 @@ def run_eval(
|
|
|
222
224
|
)
|
|
223
225
|
t.start()
|
|
224
226
|
try:
|
|
227
|
+
if not JUDGMENT_API_KEY or not JUDGMENT_ORG_ID:
|
|
228
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
225
229
|
api_client = JudgmentSyncClient(JUDGMENT_API_KEY, JUDGMENT_ORG_ID)
|
|
226
230
|
response = api_client.add_to_run_eval_queue_examples(
|
|
227
231
|
evaluation_run.model_dump(warnings=False) # type: ignore
|
judgeval-0.19.0/src/judgeval/prompts/prompt.py → judgeval-0.20.1/src/judgeval/prompt/__init__.py
RENAMED
|
@@ -19,9 +19,11 @@ def push_prompt(
|
|
|
19
19
|
name: str,
|
|
20
20
|
prompt: str,
|
|
21
21
|
tags: List[str],
|
|
22
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
23
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
22
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
23
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
24
24
|
) -> tuple[str, Optional[str], str]:
|
|
25
|
+
if not judgment_api_key or not organization_id:
|
|
26
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
25
27
|
client = JudgmentSyncClient(judgment_api_key, organization_id)
|
|
26
28
|
try:
|
|
27
29
|
project_id = _resolve_project_id(
|
|
@@ -55,9 +57,11 @@ def fetch_prompt(
|
|
|
55
57
|
name: str,
|
|
56
58
|
commit_id: Optional[str] = None,
|
|
57
59
|
tag: Optional[str] = None,
|
|
58
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
59
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
60
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
61
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
60
62
|
) -> Optional[PromptCommitInfo]:
|
|
63
|
+
if not judgment_api_key or not organization_id:
|
|
64
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
61
65
|
client = JudgmentSyncClient(judgment_api_key, organization_id)
|
|
62
66
|
try:
|
|
63
67
|
project_id = _resolve_project_id(
|
|
@@ -89,9 +93,11 @@ def tag_prompt(
|
|
|
89
93
|
name: str,
|
|
90
94
|
commit_id: str,
|
|
91
95
|
tags: List[str],
|
|
92
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
93
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
96
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
97
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
94
98
|
) -> PromptTagResponse:
|
|
99
|
+
if not judgment_api_key or not organization_id:
|
|
100
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
95
101
|
client = JudgmentSyncClient(judgment_api_key, organization_id)
|
|
96
102
|
try:
|
|
97
103
|
project_id = _resolve_project_id(
|
|
@@ -124,9 +130,11 @@ def untag_prompt(
|
|
|
124
130
|
project_name: str,
|
|
125
131
|
name: str,
|
|
126
132
|
tags: List[str],
|
|
127
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
128
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
133
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
134
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
129
135
|
) -> PromptUntagResponse:
|
|
136
|
+
if not judgment_api_key or not organization_id:
|
|
137
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
130
138
|
client = JudgmentSyncClient(judgment_api_key, organization_id)
|
|
131
139
|
try:
|
|
132
140
|
project_id = _resolve_project_id(
|
|
@@ -153,9 +161,11 @@ def untag_prompt(
|
|
|
153
161
|
def list_prompt(
|
|
154
162
|
project_name: str,
|
|
155
163
|
name: str,
|
|
156
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
157
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
164
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
165
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
158
166
|
) -> PromptVersionsResponse:
|
|
167
|
+
if not judgment_api_key or not organization_id:
|
|
168
|
+
raise ValueError("Judgment API key and organization ID are required")
|
|
159
169
|
client = JudgmentSyncClient(judgment_api_key, organization_id)
|
|
160
170
|
try:
|
|
161
171
|
project_id = _resolve_project_id(
|
|
@@ -201,8 +211,8 @@ class Prompt:
|
|
|
201
211
|
name: str,
|
|
202
212
|
prompt: str,
|
|
203
213
|
tags: Optional[List[str]] = None,
|
|
204
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
205
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
214
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
215
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
206
216
|
):
|
|
207
217
|
if tags is None:
|
|
208
218
|
tags = []
|
|
@@ -225,8 +235,8 @@ class Prompt:
|
|
|
225
235
|
name: str,
|
|
226
236
|
commit_id: Optional[str] = None,
|
|
227
237
|
tag: Optional[str] = None,
|
|
228
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
229
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
238
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
239
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
230
240
|
):
|
|
231
241
|
if commit_id is not None and tag is not None:
|
|
232
242
|
raise ValueError(
|
|
@@ -262,8 +272,8 @@ class Prompt:
|
|
|
262
272
|
name: str,
|
|
263
273
|
commit_id: str,
|
|
264
274
|
tags: List[str],
|
|
265
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
266
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
275
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
276
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
267
277
|
):
|
|
268
278
|
prompt_config = tag_prompt(
|
|
269
279
|
project_name, name, commit_id, tags, judgment_api_key, organization_id
|
|
@@ -276,8 +286,8 @@ class Prompt:
|
|
|
276
286
|
project_name: str,
|
|
277
287
|
name: str,
|
|
278
288
|
tags: List[str],
|
|
279
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
280
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
289
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
290
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
281
291
|
):
|
|
282
292
|
prompt_config = untag_prompt(
|
|
283
293
|
project_name, name, tags, judgment_api_key, organization_id
|
|
@@ -289,8 +299,8 @@ class Prompt:
|
|
|
289
299
|
cls,
|
|
290
300
|
project_name: str,
|
|
291
301
|
name: str,
|
|
292
|
-
judgment_api_key: str = JUDGMENT_API_KEY,
|
|
293
|
-
organization_id: str = JUDGMENT_ORG_ID,
|
|
302
|
+
judgment_api_key: str | None = JUDGMENT_API_KEY,
|
|
303
|
+
organization_id: str | None = JUDGMENT_ORG_ID,
|
|
294
304
|
):
|
|
295
305
|
prompt_configs = list_prompt(
|
|
296
306
|
project_name, name, judgment_api_key, organization_id
|
|
@@ -106,8 +106,8 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
106
106
|
"_initialized",
|
|
107
107
|
)
|
|
108
108
|
|
|
109
|
-
api_key: str
|
|
110
|
-
organization_id: str
|
|
109
|
+
api_key: str | None
|
|
110
|
+
organization_id: str | None
|
|
111
111
|
project_name: str
|
|
112
112
|
enable_monitoring: bool
|
|
113
113
|
enable_evaluation: bool
|
|
@@ -124,8 +124,8 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
124
124
|
/,
|
|
125
125
|
*,
|
|
126
126
|
project_name: str,
|
|
127
|
-
api_key:
|
|
128
|
-
organization_id:
|
|
127
|
+
api_key: str | None = None,
|
|
128
|
+
organization_id: str | None = None,
|
|
129
129
|
enable_monitoring: bool = JUDGMENT_ENABLE_MONITORING.lower() == "true",
|
|
130
130
|
enable_evaluation: bool = JUDGMENT_ENABLE_EVALUATIONS.lower() == "true",
|
|
131
131
|
resource_attributes: Optional[Dict[str, Any]] = None,
|
|
@@ -145,10 +145,14 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
145
145
|
self.enable_evaluation = enable_evaluation
|
|
146
146
|
self.resource_attributes = resource_attributes
|
|
147
147
|
|
|
148
|
-
self.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
if self.api_key and self.organization_id:
|
|
149
|
+
self.api_client = JudgmentSyncClient(
|
|
150
|
+
api_key=self.api_key, organization_id=self.organization_id
|
|
151
|
+
)
|
|
152
|
+
else:
|
|
153
|
+
judgeval_logger.error(
|
|
154
|
+
"API Key or Organization ID is not set. You must set them in the environment variables to use the tracer."
|
|
155
|
+
)
|
|
152
156
|
|
|
153
157
|
if initialize:
|
|
154
158
|
self.initialize()
|
|
@@ -162,7 +166,7 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
162
166
|
project_id = _resolve_project_id(
|
|
163
167
|
self.project_name, self.api_key, self.organization_id
|
|
164
168
|
)
|
|
165
|
-
if project_id:
|
|
169
|
+
if self.api_key and self.organization_id and project_id:
|
|
166
170
|
self.judgment_processor = self.get_processor(
|
|
167
171
|
tracer=self,
|
|
168
172
|
project_name=self.project_name,
|
|
@@ -177,9 +181,10 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
177
181
|
provider.add_span_processor(self.judgment_processor)
|
|
178
182
|
set_tracer_provider(provider)
|
|
179
183
|
else:
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
184
|
+
if self.api_key and self.organization_id:
|
|
185
|
+
judgeval_logger.error(
|
|
186
|
+
f"Failed to resolve or autocreate project {self.project_name}, please create it first at https://app.judgmentlabs.ai/org/{self.organization_id}/projects. Skipping Judgment export."
|
|
187
|
+
)
|
|
183
188
|
|
|
184
189
|
self.tracer = get_tracer_provider().get_tracer(
|
|
185
190
|
JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME,
|
|
@@ -198,10 +203,19 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
198
203
|
):
|
|
199
204
|
from judgeval.tracer.exporters import JudgmentSpanExporter
|
|
200
205
|
|
|
206
|
+
api_key = api_key or JUDGMENT_API_KEY
|
|
207
|
+
organization_id = organization_id or JUDGMENT_ORG_ID
|
|
208
|
+
|
|
209
|
+
if not api_key or not organization_id:
|
|
210
|
+
judgeval_logger.error(
|
|
211
|
+
"API Key or Organization ID is not set. You must set them in the environment variables to use the tracer."
|
|
212
|
+
)
|
|
213
|
+
return None
|
|
214
|
+
|
|
201
215
|
return JudgmentSpanExporter(
|
|
202
216
|
endpoint=url_for("/otel/v1/traces"),
|
|
203
|
-
api_key=api_key
|
|
204
|
-
organization_id=organization_id
|
|
217
|
+
api_key=api_key,
|
|
218
|
+
organization_id=organization_id,
|
|
205
219
|
project_id=project_id,
|
|
206
220
|
)
|
|
207
221
|
|
|
@@ -217,12 +231,19 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
217
231
|
resource_attributes: Optional[Dict[str, Any]] = None,
|
|
218
232
|
) -> JudgmentSpanProcessor:
|
|
219
233
|
"""Create a JudgmentSpanProcessor using the correct constructor."""
|
|
234
|
+
api_key = api_key or JUDGMENT_API_KEY
|
|
235
|
+
organization_id = organization_id or JUDGMENT_ORG_ID
|
|
236
|
+
if not api_key or not organization_id:
|
|
237
|
+
judgeval_logger.error(
|
|
238
|
+
"API Key or Organization ID is not set. You must set them in the environment variables to use the tracer."
|
|
239
|
+
)
|
|
240
|
+
return NoOpJudgmentSpanProcessor()
|
|
220
241
|
return JudgmentSpanProcessor(
|
|
221
242
|
tracer,
|
|
222
243
|
project_name,
|
|
223
244
|
project_id,
|
|
224
|
-
api_key
|
|
225
|
-
organization_id
|
|
245
|
+
api_key,
|
|
246
|
+
organization_id,
|
|
226
247
|
max_queue_size=max_queue_size,
|
|
227
248
|
export_timeout_millis=export_timeout_millis,
|
|
228
249
|
resource_attributes=resource_attributes,
|
|
@@ -244,6 +265,7 @@ class Tracer(metaclass=SingletonMeta):
|
|
|
244
265
|
"""Get the internal span processor of this tracer instance."""
|
|
245
266
|
return self.judgment_processor
|
|
246
267
|
|
|
268
|
+
@dont_throw
|
|
247
269
|
def set_customer_id(self, customer_id: str) -> None:
|
|
248
270
|
if not customer_id:
|
|
249
271
|
judgeval_logger.warning("Customer ID is empty, skipping.")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME = "judgeval"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
|
+
from judgeval.logger import judgeval_logger
|
|
4
5
|
|
|
5
6
|
if TYPE_CHECKING:
|
|
6
7
|
from typing import TypeVar
|
|
@@ -8,24 +9,27 @@ if TYPE_CHECKING:
|
|
|
8
9
|
T = TypeVar("T")
|
|
9
10
|
|
|
10
11
|
|
|
11
|
-
def expect_exists(value: T | None, message: str) -> T:
|
|
12
|
-
if value
|
|
13
|
-
|
|
12
|
+
def expect_exists(value: T | None, message: str, default: T) -> T:
|
|
13
|
+
if not value:
|
|
14
|
+
judgeval_logger.error(message)
|
|
15
|
+
return default
|
|
14
16
|
|
|
15
17
|
return value
|
|
16
18
|
|
|
17
19
|
|
|
18
|
-
def expect_api_key(api_key: str | None) -> str:
|
|
20
|
+
def expect_api_key(api_key: str | None) -> str | None:
|
|
19
21
|
return expect_exists(
|
|
20
22
|
api_key,
|
|
21
23
|
"API Key is not set, please set JUDGMENT_API_KEY in the environment variables or pass it as `api_key`",
|
|
24
|
+
default=None,
|
|
22
25
|
)
|
|
23
26
|
|
|
24
27
|
|
|
25
|
-
def expect_organization_id(organization_id: str | None) -> str:
|
|
28
|
+
def expect_organization_id(organization_id: str | None) -> str | None:
|
|
26
29
|
return expect_exists(
|
|
27
30
|
organization_id,
|
|
28
31
|
"Organization ID is not set, please set JUDGMENT_ORG_ID in the environment variables or pass it as `organization_id`",
|
|
32
|
+
default=None,
|
|
29
33
|
)
|
|
30
34
|
|
|
31
35
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME = "opentelemetry.instrumentation.judgeval"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{judgeval-0.19.0 → judgeval-0.20.1}/assets/Screenshot 2025-05-17 at 8.14.27/342/200/257PM.png"
RENAMED
|
File without changes
|
|
File without changes
|