Files
wehub-resource-sync 5a558eb09e
Backend Tests / discover-tests (push) Waiting to run
Backend Tests / ${{ matrix.name }} (push) Blocked by required conditions
Build and Publish SDK / build-and-publish (push) Waiting to run
Build Opik Docker Images / set-version (push) Waiting to run
Build Opik Docker Images / build-backend (push) Blocked by required conditions
Build Opik Docker Images / build-sandbox-executor-python (push) Blocked by required conditions
Build Opik Docker Images / build-python-backend (push) Blocked by required conditions
Build Opik Docker Images / build-frontend (push) Blocked by required conditions
Build Opik Docker Images / create-git-tag (push) Blocked by required conditions
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Waiting to run
Docs - Publish / run (push) Waiting to run
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Waiting to run
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Blocked by required conditions
Frontend Unit Tests / Test on Node 20 (push) Waiting to run
Guardrails E2E Tests / Select Python version matrix (push) Waiting to run
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Blocked by required conditions
Guardrails E2E Tests / 📢 Slack Notification (push) Blocked by required conditions
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Waiting to run
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Blocked by required conditions
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Waiting to run
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Waiting to run
Lint Opik Helm Chart / unittest-helm-chart (push) Waiting to run
Lint Opik Helm Chart / render-equality (push) Waiting to run
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Waiting to run
Python BE E2E Tests / Python BE E2E (push) Waiting to run
Python Backend Tests / run-python-backend-tests (push) Waiting to run
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Waiting to run
Release Drafter / update_release_draft (push) Waiting to run
SDK E2E Libraries Integration Tests / Check Secrets (push) Waiting to run
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Blocked by required conditions
SDK E2E Libraries Integration Tests / build-opik (push) Blocked by required conditions
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Blocked by required conditions
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Waiting to run
TypeScript SDK Build & Publish / build-and-publish (push) Waiting to run
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Waiting to run
TypeScript SDK Compatibility V1.x E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / TypeScript SDK Compatibility V1.x E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
TypeScript SDK E2E Tests / TypeScript SDK E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
Python SDK E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK E2E Tests / Python SDK E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK E2E Tests / build-opik (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Python SDK Compatibility V1.x E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK E2E Tests / build-opik (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer E2E Tests Python ${{matrix.python_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer Integration Smoke Tests (push) Has been cancelled
🐙 Code Quality / detect (push) Has been cancelled
🐙 Code Quality / lint (${{ matrix.leg.name }}) (push) Has been cancelled
🐙 Code Quality / summary (push) Has been cancelled
TypeScript SDK Library Integration Tests / Check Secrets (push) Has been cancelled
TypeScript SDK Library Integration Tests / opik-vercel (Vercel AI SDK / eve) (push) Has been cancelled
SDK Library Integration Tests Runner / Check Secrets (push) Has been cancelled
SDK Library Integration Tests Runner / Missed OpenAI API Key Warning (push) Has been cancelled
SDK Library Integration Tests Runner / Build (push) Has been cancelled
SDK Library Integration Tests Runner / openai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_legacy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / llama_index_tests (push) Has been cancelled
SDK Library Integration Tests Runner / anthropic_tests (push) Has been cancelled
SDK Library Integration Tests Runner / mistral_tests (push) Has been cancelled
SDK Library Integration Tests Runner / groq_tests (push) Has been cancelled
SDK Library Integration Tests Runner / aisuite_tests (push) Has been cancelled
SDK Library Integration Tests Runner / haystack_tests (push) Has been cancelled
SDK Library Integration Tests Runner / dspy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v1_tests (push) Has been cancelled
SDK Library Integration Tests Runner / genai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_legacy_1_3_0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / evaluation_metrics_tests (push) Has been cancelled
SDK Library Integration Tests Runner / bedrock_tests (push) Has been cancelled
SDK Library Integration Tests Runner / litellm_tests (push) Has been cancelled
SDK Library Integration Tests Runner / harbor_tests (push) Has been cancelled
SDK Library Integration Tests Runner / Slack Notification (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:25:44 +08:00

127 lines
4.3 KiB
Python

"""
Unit tests for opik.evaluation.rest_operations.log_test_result_feedback_scores.
Verifies that suite-assertion ScoreResults are routed to the new
assertion-results endpoint while regular feedback scores continue to use
the feedback-scores path.
"""
from unittest import mock
from opik.evaluation import rest_operations
from opik.evaluation.metrics import score_result
def _client_mock() -> mock.MagicMock:
return mock.MagicMock()
class TestLogTestResultFeedbackScoresRouting:
def test_only_regular_scores__calls_feedback_scores_only(self):
client = _client_mock()
results = [
score_result.ScoreResult(name="precision", value=0.9, reason="ok"),
score_result.ScoreResult(name="recall", value=0.8, reason="ok"),
]
rest_operations.log_test_result_feedback_scores(
client=client,
score_results=results,
trace_id="trace-1",
project_name="proj-A",
)
client.log_traces_feedback_scores.assert_called_once()
client.log_assertion_results.assert_not_called()
scores = client.log_traces_feedback_scores.call_args.kwargs["scores"]
assert {s["name"] for s in scores} == {"precision", "recall"}
def test_only_suite_assertions__calls_assertion_results_only(self):
client = _client_mock()
results = [
score_result.ScoreResult(
name="must mention paris",
value=True,
reason="mentioned",
category_name="suite_assertion",
),
score_result.ScoreResult(
name="must be polite",
value=False,
reason="rude tone",
category_name="suite_assertion",
),
]
rest_operations.log_test_result_feedback_scores(
client=client,
score_results=results,
trace_id="trace-1",
project_name="proj-A",
)
client.log_traces_feedback_scores.assert_not_called()
client.log_assertion_results.assert_called_once()
kwargs = client.log_assertion_results.call_args.kwargs
assert kwargs["project_name"] == "proj-A"
sent = kwargs["assertion_results"]
assert len(sent) == 2
assert sent[0]["id"] == "trace-1"
assert sent[0]["name"] == "must mention paris"
assert sent[0]["status"] == "passed"
assert sent[0]["reason"] == "mentioned"
assert sent[1]["status"] == "failed"
def test_mixed__splits_suite_assertions_from_feedback_scores(self):
client = _client_mock()
results = [
score_result.ScoreResult(name="precision", value=0.9),
score_result.ScoreResult(
name="must mention paris",
value=True,
category_name="suite_assertion",
),
]
rest_operations.log_test_result_feedback_scores(
client=client,
score_results=results,
trace_id="trace-1",
project_name="proj-A",
)
client.log_traces_feedback_scores.assert_called_once()
feedback_scores = client.log_traces_feedback_scores.call_args.kwargs["scores"]
assert len(feedback_scores) == 1
assert feedback_scores[0]["name"] == "precision"
client.log_assertion_results.assert_called_once()
assertion_results = client.log_assertion_results.call_args.kwargs[
"assertion_results"
]
assert len(assertion_results) == 1
assert assertion_results[0]["name"] == "must mention paris"
assert assertion_results[0]["status"] == "passed"
def test_scoring_failed_records__excluded_from_both_endpoints(self):
client = _client_mock()
results = [
score_result.ScoreResult(
name="must mention paris",
value=False,
category_name="suite_assertion",
scoring_failed=True,
),
score_result.ScoreResult(name="precision", value=0.0, scoring_failed=True),
]
rest_operations.log_test_result_feedback_scores(
client=client,
score_results=results,
trace_id="trace-1",
project_name="proj-A",
)
client.log_traces_feedback_scores.assert_not_called()
client.log_assertion_results.assert_not_called()