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

217 lines
6.8 KiB
Python

from __future__ import annotations
import uuid
import pytest
import opik
from opik import synchronization
from . import verifiers
@pytest.fixture
def annotation_queue_name():
return f"e2e-tests-annotation-queue-{str(uuid.uuid4())[-6:]}"
def test_annotation_queue__add_traces__happyflow(
opik_client: opik.Opik,
temporary_project_name: str,
annotation_queue_name: str,
):
"""Test creating a traces annotation queue and adding traces to it."""
# Create traces and capture the returned Trace objects
trace1 = opik_client.trace(
name="trace-1",
input={"input": "trace-1-input"},
output={"output": "trace-1-output"},
project_name=temporary_project_name,
)
trace2 = opik_client.trace(
name="trace-2",
input={"input": "trace-2-input"},
output={"output": "trace-2-output"},
project_name=temporary_project_name,
)
opik_client.flush()
# Wait for traces to be available (which also ensures project is created)
def traces_available():
traces = opik_client.search_traces(
project_name=temporary_project_name,
max_results=10,
)
return len(traces) >= 2
synchronization.wait_for_done(traces_available, timeout=30)
# Create traces annotation queue after project exists
queue = opik_client.create_traces_annotation_queue(
name=annotation_queue_name,
project_name=temporary_project_name,
description="Test queue for traces",
instructions="Please review these traces",
)
verifiers.verify_traces_annotation_queue(
opik_client=opik_client,
queue_id=queue.id,
name=annotation_queue_name,
scope="trace",
description="Test queue for traces",
instructions="Please review these traces",
)
# Add traces directly using the Trace objects returned by opik_client.trace()
queue.add_traces([trace1, trace2])
# Verify queue items count
def check_items_count():
updated_queue = opik_client.get_traces_annotation_queue(queue.id)
return updated_queue.items_count == 2
synchronization.wait_for_done(check_items_count, timeout=30)
# Verify we can retrieve the queue
retrieved_queue = opik_client.get_traces_annotation_queue(queue.id)
assert retrieved_queue.id == queue.id
assert retrieved_queue.name == annotation_queue_name
assert retrieved_queue.items_count == 2
# Retrieve the items in the queue
def queue_items_available():
return len(queue.get_items()) == 2
synchronization.wait_for_done(queue_items_available, timeout=30)
items = queue.get_items()
assert {item.id for item in items} == {trace1.id, trace2.id}
# Remove one trace from queue
queue.remove_traces([trace1])
# Verify queue items count after removal
def check_items_count_after_removal():
updated_queue = opik_client.get_traces_annotation_queue(queue.id)
return updated_queue.items_count == 1
synchronization.wait_for_done(check_items_count_after_removal, timeout=30)
# Cleanup: delete the queue
queue.delete()
# Verify queue is deleted
with pytest.raises(opik.exceptions.OpikException):
opik_client.get_traces_annotation_queue(queue.id)
def test_annotation_queue__add_threads__happyflow(
opik_client: opik.Opik,
temporary_project_name: str,
annotation_queue_name: str,
):
"""Test creating a threads annotation queue and adding threads to it."""
# Thread IDs must be valid UUIDs for annotation queue API
# Use full UUIDs and store them to filter later
thread_id_1 = "thread_1"
thread_id_2 = "thread_2"
thread_ids = {thread_id_1, thread_id_2}
# Create traces that belong to threads
for i in range(3):
opik_client.trace(
name=f"trace-thread1-{i}",
input={"input": f"input-{i}"},
output={"output": f"output-{i}"},
project_name=temporary_project_name,
thread_id=thread_id_1,
)
for i in range(2):
opik_client.trace(
name=f"trace-thread2-{i}",
input={"input": f"input-{i}"},
output={"output": f"output-{i}"},
project_name=temporary_project_name,
thread_id=thread_id_2,
)
opik_client.flush()
# Wait for threads to be available (which also ensures project is created)
def threads_available():
threads = opik_client.search_threads(
project_name=temporary_project_name,
max_results=100,
)
found_ids = {t.id for t in threads}
return thread_ids.issubset(found_ids)
synchronization.wait_for_done(threads_available, timeout=30)
# Create threads annotation queue after project exists
queue = opik_client.create_threads_annotation_queue(
name=annotation_queue_name,
project_name=temporary_project_name,
description="Test queue for threads",
instructions="Please review these threads",
)
verifiers.verify_threads_annotation_queue(
opik_client=opik_client,
queue_id=queue.id,
name=annotation_queue_name,
scope="thread",
description="Test queue for threads",
instructions="Please review these threads",
)
# Get threads from API and filter by our thread IDs
threads = opik_client.search_threads(
project_name=temporary_project_name,
max_results=10,
)
assert len(threads) == 2
# Add threads to queue
queue.add_threads(threads)
# Verify queue items count
def check_items_count():
updated_queue = opik_client.get_threads_annotation_queue(queue.id)
return updated_queue.items_count == 2
synchronization.wait_for_done(check_items_count, timeout=30)
# Verify we can retrieve the queue
retrieved_queue = opik_client.get_threads_annotation_queue(queue.id)
assert retrieved_queue.id == queue.id
assert retrieved_queue.name == annotation_queue_name
assert retrieved_queue.items_count == 2
# Retrieve the items in the queue
def queue_items_available():
return len(queue.get_items()) == 2
synchronization.wait_for_done(queue_items_available, timeout=30)
items = queue.get_items()
assert {item.id for item in items} == thread_ids
# Remove one thread from queue
queue.remove_threads([threads[0]])
# Verify queue items count after removal
def check_items_count_after_removal():
updated_queue = opik_client.get_threads_annotation_queue(queue.id)
return updated_queue.items_count == 1
synchronization.wait_for_done(check_items_count_after_removal, timeout=30)
# Cleanup: delete the queue
queue.delete()
# Verify queue is deleted
with pytest.raises(opik.exceptions.OpikException):
opik_client.get_threads_annotation_queue(queue.id)