gooddata-eval 1.68.1.dev3__tar.gz → 1.68.1.dev4__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.
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/PKG-INFO +2 -2
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/pyproject.toml +2 -2
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/alert_skill.py +31 -14
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/conversation.py +1 -1
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/scoring.py +3 -1
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/.gitignore +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/LICENSE.txt +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/Makefile +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/README.md +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/_version.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/cli/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/cli/agentic_runner.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/cli/main.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/_catalog.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/_langfuse.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/general_question.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/guardrail.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/metric_skill.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/search_tool.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/visualization.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/chat/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/chat/sse_client.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/config.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/connection.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/dataset/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/dataset/langfuse_source.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/dataset/local.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/_deep_subset.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/_llm_judge.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/_text_utils.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/alert_skill.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/base.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/general_question.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/guardrail.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/metric_skill.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/search_tool.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/summary.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/visualization.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/langfuse/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/langfuse/sink.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/models.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/reporting/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/reporting/console.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/reporting/json_report.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/runner.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/summary/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/summary/http_client.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/workspace.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/__init__.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/conftest.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/fixtures/sample_dataset/metric_skill_create.json +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/fixtures/sample_dataset/visualization_revenue.json +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/fixtures/sse_visualization_stream.txt +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_alert_skill.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_conversation.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_general_question.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_guardrail.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_metric_skill.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_search_tool.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_visualization.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_alert_skill_evaluator.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_cli.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_connection.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_deep_subset.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_langfuse_sink.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_langfuse_source.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_llm_judge.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_local_loader.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_metric_skill_evaluator.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_models.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_reporting.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_runner.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_scoring.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_search_tool_evaluator.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_sse_client.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_summary_client.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_summary_evaluator.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_text_evaluators.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_visualization_evaluator.py +0 -0
- {gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gooddata-eval
|
|
3
|
-
Version: 1.68.1.
|
|
3
|
+
Version: 1.68.1.dev4
|
|
4
4
|
Summary: Evaluate the GoodData AI agent against your own questions and models.
|
|
5
5
|
Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
|
|
6
6
|
Author-email: GoodData <support@gooddata.com>
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
17
17
|
Classifier: Topic :: Software Development
|
|
18
18
|
Classifier: Typing :: Typed
|
|
19
19
|
Requires-Python: >=3.10
|
|
20
|
-
Requires-Dist: gooddata-sdk~=1.68.1.
|
|
20
|
+
Requires-Dist: gooddata-sdk~=1.68.1.dev4
|
|
21
21
|
Requires-Dist: httpx<1.0,>=0.27
|
|
22
22
|
Requires-Dist: orjson<4.0.0,>=3.9.15
|
|
23
23
|
Requires-Dist: pydantic<3.0,>=2.6
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# (C) 2026 GoodData Corporation
|
|
2
2
|
[project]
|
|
3
3
|
name = "gooddata-eval"
|
|
4
|
-
version = "1.68.1.
|
|
4
|
+
version = "1.68.1.dev4"
|
|
5
5
|
description = "Evaluate the GoodData AI agent against your own questions and models."
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "MIT"
|
|
@@ -11,7 +11,7 @@ authors = [
|
|
|
11
11
|
keywords = ["gooddata", "ai", "evaluation", "llm", "analytics", "cli"]
|
|
12
12
|
requires-python = ">=3.10"
|
|
13
13
|
dependencies = [
|
|
14
|
-
"gooddata-sdk~=1.68.1.
|
|
14
|
+
"gooddata-sdk~=1.68.1.dev4",
|
|
15
15
|
"httpx>=0.27,<1.0",
|
|
16
16
|
"orjson>=3.9.15,<4.0.0",
|
|
17
17
|
"pydantic>=2.6,<3.0",
|
|
@@ -77,6 +77,8 @@ def _check_threshold(expected: CatalogMetricAlert, actual_args: dict) -> bool:
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
def _check_trigger(expected: CatalogMetricAlert, actual_args: dict) -> bool:
|
|
80
|
+
if expected.operator == "ANOMALY":
|
|
81
|
+
return True
|
|
80
82
|
exp_trigger = expected.trigger
|
|
81
83
|
act_trigger = actual_args.get("trigger", actual_args.get("triggerMode", "ALWAYS"))
|
|
82
84
|
if exp_trigger in _ALWAYS_TRIGGER_VALUES:
|
|
@@ -235,27 +237,42 @@ class AgenticAlertSummary:
|
|
|
235
237
|
best: AlertRunResult
|
|
236
238
|
|
|
237
239
|
|
|
240
|
+
def _case_insensitive_get(d: dict, *keys: str) -> Any:
|
|
241
|
+
"""Look up a value by key, preferring an exact match then a case-insensitive one."""
|
|
242
|
+
for k in keys:
|
|
243
|
+
if k in d:
|
|
244
|
+
return d[k]
|
|
245
|
+
lowered = {str(k).lower(): v for k, v in d.items()}
|
|
246
|
+
for k in keys:
|
|
247
|
+
if k.lower() in lowered:
|
|
248
|
+
return lowered[k.lower()]
|
|
249
|
+
return None
|
|
250
|
+
|
|
251
|
+
|
|
238
252
|
def _normalize_expected_output(expected: dict) -> CatalogMetricAlert:
|
|
239
253
|
"""Parse expected_output dict into CatalogMetricAlert, accepting display-format or internal-format keys."""
|
|
240
|
-
operator = expected
|
|
241
|
-
threshold = expected
|
|
242
|
-
threshold_from = expected
|
|
243
|
-
threshold_to = expected
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
254
|
+
operator = _case_insensitive_get(expected, "operator") or "GREATER_THAN"
|
|
255
|
+
threshold = _case_insensitive_get(expected, "threshold")
|
|
256
|
+
threshold_from = _case_insensitive_get(expected, "threshold_from")
|
|
257
|
+
threshold_to = _case_insensitive_get(expected, "threshold_to")
|
|
258
|
+
|
|
259
|
+
trigger = _case_insensitive_get(expected, "trigger") or "not specified"
|
|
260
|
+
trigger = _TRIGGER_DISPLAY_TO_API.get(trigger, trigger)
|
|
261
|
+
|
|
262
|
+
metric_id = _case_insensitive_get(expected, "metric_id")
|
|
263
|
+
if not metric_id:
|
|
264
|
+
metric_disp = _case_insensitive_get(expected, "metric")
|
|
265
|
+
if metric_disp:
|
|
266
|
+
m = re.search(r"\(([^)]+)\)\s*$", str(metric_disp))
|
|
267
|
+
metric_id = m.group(1).strip() if m else None
|
|
268
|
+
|
|
269
|
+
raw_recip = _case_insensitive_get(expected, "recipients", "recipient(s)") or []
|
|
253
270
|
if isinstance(raw_recip, str):
|
|
254
271
|
recipients = [r.strip() for r in raw_recip.replace(";", ",").split(",") if r.strip()]
|
|
255
272
|
else:
|
|
256
273
|
recipients = list(raw_recip)
|
|
257
274
|
|
|
258
|
-
filters = expected
|
|
275
|
+
filters = _case_insensitive_get(expected, "filters")
|
|
259
276
|
if isinstance(filters, str) and any(kw in filters for kw in ("None", "All time")):
|
|
260
277
|
filters = None
|
|
261
278
|
|
|
@@ -102,7 +102,7 @@ def _activated_skills(tool_call_events: list[ToolCallEvent]) -> list[str]:
|
|
|
102
102
|
if tc.function_name != "set_skills":
|
|
103
103
|
continue
|
|
104
104
|
args = tc.parsed_arguments() or {}
|
|
105
|
-
skills.extend(args.get("skills"
|
|
105
|
+
skills.extend(args.get("skill_names") or args.get("skills") or [])
|
|
106
106
|
return list(set(skills))
|
|
107
107
|
|
|
108
108
|
|
|
@@ -71,7 +71,9 @@ def validate_cross_references(viz: CreatedVisualization) -> tuple[bool, list[str
|
|
|
71
71
|
continue
|
|
72
72
|
using_val = filter_dict.get("using", "")
|
|
73
73
|
using_uri = _resolve_alias_to_uri(using_val, fields)
|
|
74
|
-
|
|
74
|
+
field_def = fields.get(using_val)
|
|
75
|
+
is_adhoc_agg = isinstance(field_def, AacQueryField) and bool(field_def.aggregation)
|
|
76
|
+
if not using_uri.startswith(("metric/", "fact/")) and not is_adhoc_agg:
|
|
75
77
|
errors.append(
|
|
76
78
|
f"ranking filter '{filter_key}': using='{using_val}' "
|
|
77
79
|
f"resolves to '{using_uri}' — expected a metric/ or fact/ URI"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/cli/agentic_runner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/__init__.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/_catalog.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/_langfuse.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/agentic/guardrail.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/chat/__init__.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/chat/sse_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/connection.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/dataset/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/dataset/local.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/evaluators/summary.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/langfuse/__init__.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/langfuse/sink.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/reporting/__init__.py
RENAMED
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/reporting/console.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/src/gooddata_eval/core/summary/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/fixtures/sse_visualization_stream.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_agentic_general_question.py
RENAMED
|
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
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_metric_skill_evaluator.py
RENAMED
|
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
|
{gooddata_eval-1.68.1.dev3 → gooddata_eval-1.68.1.dev4}/tests/test_visualization_evaluator.py
RENAMED
|
File without changes
|
|
File without changes
|