Files
wehub-resource-sync 5a558eb09e
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
Lint Opik Helm Chart / render-equality (push) Has been cancelled
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Has been cancelled
Python BE E2E Tests / Python BE E2E (push) Has been cancelled
Python Backend Tests / run-python-backend-tests (push) Has been cancelled
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
SDK E2E Libraries Integration Tests / Check Secrets (push) Has been cancelled
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Has been cancelled
SDK E2E Libraries Integration Tests / build-opik (push) Has been cancelled
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Has been cancelled
TypeScript SDK Build & Publish / build-and-publish (push) Has been cancelled
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Has been cancelled
Backend Tests / discover-tests (push) Has been cancelled
Backend Tests / ${{ matrix.name }} (push) Has been cancelled
Build and Publish SDK / build-and-publish (push) Has been cancelled
Build Opik Docker Images / set-version (push) Has been cancelled
Build Opik Docker Images / build-backend (push) Has been cancelled
Build Opik Docker Images / build-sandbox-executor-python (push) Has been cancelled
Build Opik Docker Images / build-python-backend (push) Has been cancelled
Build Opik Docker Images / build-frontend (push) Has been cancelled
Build Opik Docker Images / create-git-tag (push) Has been cancelled
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Has been cancelled
Docs - Publish / run (push) Has been cancelled
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Has been cancelled
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Has been cancelled
Frontend Unit Tests / Test on Node 20 (push) Has been cancelled
Guardrails E2E Tests / Select Python version matrix (push) Has been cancelled
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Guardrails E2E Tests / 📢 Slack Notification (push) Has been cancelled
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Has been cancelled
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Has been cancelled
Lint Opik Helm Chart / unittest-helm-chart (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:25:44 +08:00

151 lines
4.3 KiB
Python

"""HotpotQA multi-hop benchmark using shared benchmark agent components.
This script is a thin runnable example that reuses the centralized benchmark
agent implementation from `benchmarks/packages/hotpot/agent.py`.
"""
from __future__ import annotations
import logging
import os
import random
from typing import Any
from benchmarks.packages.hotpot.metrics import hotpot_f1
from opik_optimizer import HierarchicalReflectiveOptimizer
from opik_optimizer.datasets import hotpot
from opik_optimizer.utils.logging import setup_logging
from benchmarks.packages.hotpot.agent import build_hotpot_agent
from benchmarks.packages.hotpot.prompts import build_hotpot_prompts
from benchmarks.packages.hotpot.agent import bm25_wikipedia_search
PROJECT_HEADER = "Hotpot QA Multihop Optimization"
SEED = 42
MODEL_NAME = "openai/gpt-4.1-mini"
MODEL_PARAMS = {"temperature": 1.0}
NUM_PASSAGES = 5
TRAIN_COUNT = 150
VALIDATION_COUNT = 300
TEST_COUNT = 300
# Disable tqdm progress bars (used by bm25s)
os.environ["TQDM_DISABLE"] = "1"
setup_logging()
logger = logging.getLogger(__name__)
random.seed(SEED)
def print_header() -> None:
print("=" * 80)
print(PROJECT_HEADER)
print("=" * 80)
print()
print("This benchmark uses the centralized Hotpot multi-hop benchmark agent.")
print("- Multi-hop retrieval pipeline")
print("- Multiple optimizable prompts")
print("- Wikipedia search integration")
print()
def load_datasets() -> tuple[Any, Any, Any]:
print("Loading datasets...")
train = hotpot(count=TRAIN_COUNT, split="train", dataset_name="hotpot_train")
val = hotpot(
count=VALIDATION_COUNT,
split="validation",
dataset_name="hotpot_validation",
)
test = hotpot(count=TEST_COUNT, split="test", dataset_name="hotpot_test")
print(f" - Train: {len(train.get_items())} samples")
print(f" - Validation: {len(val.get_items())} samples")
print(f" - Test: {len(test.get_items())} samples")
print()
return train, val, test
def run_optimization(
*,
agent: Any,
initial_prompts: dict[str, Any],
train_dataset: Any,
validation_dataset: Any,
) -> Any:
optimizer = HierarchicalReflectiveOptimizer(
model=MODEL_NAME,
model_parameters=MODEL_PARAMS,
seed=SEED,
)
print(f"Running multi-prompt optimization ({optimizer.__class__.__name__})...")
return optimizer.optimize_prompt(
prompt=initial_prompts,
dataset=train_dataset,
validation_dataset=validation_dataset,
metric=hotpot_f1,
agent=agent,
max_trials=50,
)
def main() -> None:
print_header()
train_dataset, validation_dataset, test_dataset = load_datasets()
print(f"Search function: {bm25_wikipedia_search.__name__}")
print()
try:
bm25_wikipedia_search("warmup", 1)
except Exception:
logger.exception("Wikipedia warmup failed")
raise
agent = build_hotpot_agent(
model_name=MODEL_NAME,
model_parameters=MODEL_PARAMS,
)
# Keep passage count configurable in script context.
agent.num_passages = NUM_PASSAGES
initial_prompts = build_hotpot_prompts()
print("=" * 80)
print("OPTIMIZATION")
print("=" * 80)
print("This will optimize ALL prompts in the multi-hop pipeline:")
for name in initial_prompts:
print(f" - {name}")
print()
print(f"Training on hotpot_train ({TRAIN_COUNT} samples)...")
print(f"Validation on hotpot_validation ({VALIDATION_COUNT} samples)...")
print()
opt_result = run_optimization(
agent=agent,
initial_prompts=initial_prompts,
train_dataset=train_dataset,
validation_dataset=validation_dataset,
)
print(f"Optimization best score: {opt_result.score:.4f}")
print(f"Optimization rounds: {len(getattr(opt_result, 'history', []) or [])}")
print("=" * 80)
print("TESTING")
print("=" * 80)
print("Evaluating optimized prompts on test set...")
score = HierarchicalReflectiveOptimizer(
model=MODEL_NAME,
model_parameters=MODEL_PARAMS,
seed=SEED,
).evaluate_prompt(
prompt=opt_result.prompt,
dataset=test_dataset,
metric=hotpot_f1,
n_threads=4,
agent=agent,
)
print(f"Test score (hotpot_f1): {score:.4f}")
if __name__ == "__main__":
main()