fix(test): move advanced context strategy test doubles to features/mocks

- Extract FakeEmbeddings, RelevanceScoringStrategy, AdaptiveContextSelector,
  ContextFusionStrategy, and _pack_budget from features/steps/ into new
  features/mocks/advanced_context_strategies_mocks.py per mock-placement rules
- Remove sys.path manipulation from robot/helper_advanced_context_strategies.py;
  import directly from features.mocks instead of features/steps
- Add None guard before selected.assemble() in step_assemble_context_query
- Add explicit ValueError for unknown strategy types in step_load_yaml_strategy
  and load_strategy_from_yaml_impl

ISSUES CLOSED: #7574
This commit is contained in:
2026-06-06 03:13:26 -04:00
committed by Forgejo
parent df26d166c3
commit 809ccc624a
5 changed files with 181 additions and 181 deletions
+9 -19
View File
@@ -2,10 +2,14 @@
from __future__ import annotations
import sys
from pathlib import Path
from typing import Any
from features.mocks.advanced_context_strategies_mocks import (
AdaptiveContextSelector,
ContextFusionStrategy,
RelevanceScoringStrategy,
)
from cleveragents.application.services.context_strategies import (
BreadthDepthNavigatorStrategy,
SemanticEmbeddingStrategy,
@@ -19,16 +23,6 @@ from cleveragents.domain.models.core.context_fragment import (
# Default provenance used for test fragments (no real resource needed).
_TEST_PROVENANCE = FragmentProvenance(resource_uri="test://fixture")
# Import from step definitions
features_path = Path(__file__).parent.parent / "features" / "steps"
sys.path.insert(0, str(features_path))
from advanced_context_strategies_steps import ( # noqa: E402
AdaptiveContextSelector,
ContextFusionStrategy,
RelevanceScoringStrategy,
)
def create_semantic_search_strategy_impl() -> SemanticEmbeddingStrategy:
"""Create a semantic search strategy with FakeEmbeddings."""
@@ -80,9 +74,7 @@ def create_test_fragments_impl(args: list[str]) -> list[ContextFragment]:
return fragments
def create_context_budget_impl(
max_tokens: int, reserved_tokens: int
) -> ContextBudget:
def create_context_budget_impl(max_tokens: int, reserved_tokens: int) -> ContextBudget:
"""Create a context budget."""
return ContextBudget(
max_tokens=int(max_tokens),
@@ -159,8 +151,8 @@ def load_strategy_from_yaml_impl(config: dict[str, Any]) -> Any:
elif strategy_type == "context-fusion":
strategies = config.get("strategies", [])
return ContextFusionStrategy(strategies)
return None
else:
raise ValueError(f"Unknown strategy type: {strategy_type!r}")
def create_context_assembler_with_advanced_strategies_impl() -> dict[str, Any]:
@@ -193,7 +185,6 @@ def assemble_context_with_query_impl(
"""Assemble context with a query."""
request = {"query": query}
# Select best strategy
best_strategy = None
best_confidence = 0.0
@@ -206,7 +197,6 @@ def assemble_context_with_query_impl(
if best_strategy is None:
best_strategy = assembler["strategies"][0]
# Set query if needed
if hasattr(best_strategy, "set_query"):
best_strategy.set_query(query)