Files
wehub-resource-sync 7a0da7932b
Backwards Compatibility / Verify Encryption Constants (push) Waiting to run
Backwards Compatibility / PyPI Version Compatibility (push) Waiting to run
Backwards Compatibility / Database Migration Tests (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
CodeQL Advanced / Analyze (python) (push) Waiting to run
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Blocked by required conditions
Docker Tests (Consolidated) / detect-changes (push) Waiting to run
Docker Tests (Consolidated) / Build Test Image (push) Waiting to run
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Blocked by required conditions
Docker Tests (Consolidated) / Accessibility Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / LLM Unit Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / LLM Example Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / Production Image Smoke Test (push) Blocked by required conditions
Docker Tests (Consolidated) / Infrastructure Tests (push) Blocked by required conditions
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Waiting to run
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

244 lines
9.8 KiB
Python

"""
Tests for optimization API functions.
This module tests the convenience functions that wrap OptunaOptimizer
for different optimization strategies.
"""
from unittest.mock import MagicMock, patch
from local_deep_research.benchmarks.optimization.api import (
optimize_for_efficiency,
optimize_for_quality,
optimize_for_speed,
optimize_parameters,
)
class TestOptimizeParameters:
"""Tests for the optimize_parameters function."""
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_creates_optimizer_with_query(self, mock_optimizer_class):
"""Function creates optimizer with the provided query."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({"iterations": 3}, 0.85)
mock_optimizer_class.return_value = mock_optimizer
optimize_parameters(query="test research query")
mock_optimizer_class.assert_called_once()
call_kwargs = mock_optimizer_class.call_args[1]
assert call_kwargs["base_query"] == "test research query"
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_passes_all_parameters_to_optimizer(self, mock_optimizer_class):
"""Function passes all configuration parameters to optimizer."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_parameters(
query="test query",
output_dir="/custom/output",
model_name="gpt-4",
provider="openai",
search_tool="google",
temperature=0.5,
n_trials=50,
timeout=3600,
n_jobs=4,
study_name="custom_study",
optimization_metrics=["quality"],
metric_weights={"quality": 1.0},
benchmark_weights={"simpleqa": 0.7, "browsecomp": 0.3},
)
call_kwargs = mock_optimizer_class.call_args[1]
assert call_kwargs["output_dir"] == "/custom/output"
assert call_kwargs["model_name"] == "gpt-4"
assert call_kwargs["provider"] == "openai"
assert call_kwargs["search_tool"] == "google"
assert call_kwargs["temperature"] == 0.5
assert call_kwargs["n_trials"] == 50
assert call_kwargs["timeout"] == 3600
assert call_kwargs["n_jobs"] == 4
assert call_kwargs["study_name"] == "custom_study"
assert call_kwargs["optimization_metrics"] == ["quality"]
assert call_kwargs["metric_weights"] == {"quality": 1.0}
assert call_kwargs["benchmark_weights"] == {
"simpleqa": 0.7,
"browsecomp": 0.3,
}
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_calls_optimizer_optimize_method(self, mock_optimizer_class):
"""Function calls the optimizer's optimize method."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
param_space = {"iterations": {"type": "int", "low": 1, "high": 5}}
optimize_parameters(query="test", param_space=param_space)
mock_optimizer.optimize.assert_called_once_with(param_space)
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_returns_optimizer_result(self, mock_optimizer_class):
"""Function returns the result from optimizer."""
expected_params = {"iterations": 3, "search_strategy": "rapid"}
expected_score = 0.92
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = (expected_params, expected_score)
mock_optimizer_class.return_value = mock_optimizer
result_params, result_score = optimize_parameters(query="test")
assert result_params == expected_params
assert result_score == expected_score
class TestOptimizeForSpeed:
"""Tests for the optimize_for_speed function."""
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_speed_focused_param_space(self, mock_optimizer_class):
"""Function uses a parameter space optimized for speed."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_speed(query="test")
# Check the param_space passed to optimize()
param_space = mock_optimizer.optimize.call_args[0][0]
# Speed-focused should have limited iterations (max 3)
assert param_space["iterations"]["high"] == 3
assert param_space["questions_per_iteration"]["high"] == 3
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_speed_focused_weights(self, mock_optimizer_class):
"""Function uses metric weights that prioritize speed."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_speed(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
metric_weights = call_kwargs["metric_weights"]
# Speed should be heavily weighted
assert metric_weights["speed"] == 0.8
assert metric_weights["quality"] == 0.2
assert metric_weights["resource"] == 0.0
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_speed_focused_search_strategies(self, mock_optimizer_class):
"""Function uses fast search strategies."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_speed(query="test")
param_space = mock_optimizer.optimize.call_args[0][0]
strategies = param_space["search_strategy"]["choices"]
# Should include fast strategies
assert "source-based" in strategies
assert "focused-iteration" in strategies
class TestOptimizeForQuality:
"""Tests for the optimize_for_quality function."""
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_quality_focused_weights(self, mock_optimizer_class):
"""Function uses metric weights that prioritize quality."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_quality(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
metric_weights = call_kwargs["metric_weights"]
# Quality should be heavily weighted
assert metric_weights["quality"] == 0.9
assert metric_weights["speed"] == 0.1
assert metric_weights["resource"] == 0.0
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_default_param_space(self, mock_optimizer_class):
"""Function passes None for param_space (uses default)."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_quality(query="test")
# param_space should be None (will use optimizer's default)
param_space = mock_optimizer.optimize.call_args[0][0]
assert param_space is None
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_includes_quality_in_optimization_metrics(
self, mock_optimizer_class
):
"""Function includes quality in optimization metrics."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_quality(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
assert "quality" in call_kwargs["optimization_metrics"]
class TestOptimizeForEfficiency:
"""Tests for the optimize_for_efficiency function."""
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_uses_balanced_weights(self, mock_optimizer_class):
"""Function uses balanced metric weights."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_efficiency(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
metric_weights = call_kwargs["metric_weights"]
# Should balance all three metrics
assert metric_weights["quality"] == 0.4
assert metric_weights["speed"] == 0.3
assert metric_weights["resource"] == 0.3
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_includes_resource_metric(self, mock_optimizer_class):
"""Function includes resource in optimization metrics."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_efficiency(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
assert "resource" in call_kwargs["optimization_metrics"]
@patch("local_deep_research.benchmarks.optimization.api.OptunaOptimizer")
def test_includes_all_three_metrics(self, mock_optimizer_class):
"""Function optimizes for quality, speed, and resource."""
mock_optimizer = MagicMock()
mock_optimizer.optimize.return_value = ({}, 0.5)
mock_optimizer_class.return_value = mock_optimizer
optimize_for_efficiency(query="test")
call_kwargs = mock_optimizer_class.call_args[1]
metrics = call_kwargs["optimization_metrics"]
assert "quality" in metrics
assert "speed" in metrics
assert "resource" in metrics