Files
cleveragents-core/benchmarks/acms_pipeline_phase3_bench.py
freemo 583e6b7ea2
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 17s
CI / security (pull_request) Successful in 36s
CI / typecheck (pull_request) Successful in 54s
CI / unit_tests (pull_request) Successful in 2m39s
CI / integration_tests (pull_request) Successful in 3m10s
CI / docker (pull_request) Successful in 40s
CI / coverage (pull_request) Successful in 5m0s
CI / lint (push) Successful in 14s
CI / build (push) Successful in 15s
CI / quality (push) Successful in 16s
CI / security (push) Successful in 34s
CI / typecheck (push) Successful in 35s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m23s
CI / docker (push) Successful in 38s
CI / integration_tests (push) Successful in 3m8s
CI / coverage (push) Successful in 5m10s
CI / benchmark-publish (push) Successful in 16m26s
CI / benchmark-regression (pull_request) Successful in 30m12s
feat(correcting-plans): implement Predictive Error Prevention (Layer 4) with Error Pattern Database
Implement spec-mandated Layer 4 Predictive Error Prevention system:

- ErrorPattern domain model with pattern text, historical failures,
  preventive checks, frequency tracking, and keyword-based matching.
- ErrorPatternRepository with in-memory CRUD + context-matching query.
- ErrorPatternService with record_failure(), match_patterns(), and
  get_statistics() methods.
- Wire into plan execution via plan_lifecycle_service pre-execution hook.
- Add error pattern statistics to CLI diagnostics output.

Behave BDD: 11 scenarios covering recording, matching, formatting, stats.
Robot Framework: 3 integration smoke tests.
ASV benchmarks: pattern matching performance.

ISSUES CLOSED: #571
2026-03-08 21:53:21 -04:00

143 lines
4.5 KiB
Python

"""ASV benchmarks for ACMS pipeline Phase 3 — Context Finalization and
advanced strategy components.
Measures the performance of:
- RelevanceCoherenceOrderer with varying fragment counts
- ProvenancePreambleGenerator with varying fragment counts
- ArceStrategy with varying fragment counts and iteration limits
- TemporalArchaeologyStrategy with varying fragment counts
- PlanDecisionContextStrategy with varying fragment counts
"""
from __future__ import annotations
import importlib
import sys
from pathlib import Path
from typing import ClassVar
_SRC = str(Path(__file__).resolve().parents[1] / "src")
if _SRC not in sys.path:
sys.path.insert(0, _SRC)
import cleveragents # noqa: E402
importlib.reload(cleveragents)
from cleveragents.application.services.acms_advanced_strategies import ( # noqa: E402
ArceStrategy,
PlanDecisionContextStrategy,
TemporalArchaeologyStrategy,
)
from cleveragents.application.services.acms_phase3 import ( # noqa: E402
ProvenancePreambleGenerator,
RelevanceCoherenceOrderer,
)
from cleveragents.domain.models.core.context_fragment import ( # noqa: E402
ContextBudget,
ContextFragment,
FragmentProvenance,
)
_DEFAULT_PROV = FragmentProvenance(resource_uri="bench://phase3")
def _make_fragments(
n: int,
*,
unique_nodes: bool = True,
vary_tiers: bool = False,
) -> list[ContextFragment]:
"""Create *n* fragments for benchmarks."""
tiers = ["hot", "warm", "cold"]
frags: list[ContextFragment] = []
for i in range(n):
node = f"bench://file{i}" if unique_nodes else "bench://same-node"
tier = tiers[i % 3] if vary_tiers else "warm"
frags.append(
ContextFragment(
uko_node=node,
content=f"content-{i} " * max(1, (i % 10)),
relevance_score=round(0.1 + (i % 10) * 0.09, 2),
token_count=50 + (i % 5) * 10,
detail_depth=i % 10,
tier=tier,
strategy_source=f"strategy-{i % 3}",
provenance=_DEFAULT_PROV,
)
)
return frags
class RelevanceCoherenceOrdererSuite:
"""Benchmark RelevanceCoherenceOrderer throughput."""
params: ClassVar[list[int]] = [10, 100, 500]
param_names: ClassVar[list[str]] = ["num_fragments"]
def setup(self, n: int) -> None:
self.orderer = RelevanceCoherenceOrderer()
self.fragments = _make_fragments(n)
def time_order(self, n: int) -> None:
self.orderer.order(self.fragments)
class ProvenancePreambleGeneratorSuite:
"""Benchmark ProvenancePreambleGenerator throughput."""
params: ClassVar[list[int]] = [10, 100, 500]
param_names: ClassVar[list[str]] = ["num_fragments"]
def setup(self, n: int) -> None:
self.generator = ProvenancePreambleGenerator()
self.fragments = _make_fragments(n)
def time_generate(self, n: int) -> None:
self.generator.generate(self.fragments)
class ArceStrategySuite:
"""Benchmark ArceStrategy throughput."""
params: ClassVar[list[int]] = [10, 100, 500]
param_names: ClassVar[list[str]] = ["num_fragments"]
def setup(self, n: int) -> None:
self.strategy = ArceStrategy(max_iterations=3)
self.fragments = _make_fragments(n)
self.budget = ContextBudget(max_tokens=100000, reserved_tokens=0)
def time_assemble(self, n: int) -> None:
self.strategy.assemble(self.fragments, self.budget)
class TemporalArchaeologyStrategySuite:
"""Benchmark TemporalArchaeologyStrategy throughput."""
params: ClassVar[list[int]] = [10, 100, 500]
param_names: ClassVar[list[str]] = ["num_fragments"]
def setup(self, n: int) -> None:
self.strategy = TemporalArchaeologyStrategy()
self.fragments = _make_fragments(n, vary_tiers=True)
self.budget = ContextBudget(max_tokens=100000, reserved_tokens=0)
def time_assemble(self, n: int) -> None:
self.strategy.assemble(self.fragments, self.budget)
class PlanDecisionContextStrategySuite:
"""Benchmark PlanDecisionContextStrategy throughput."""
params: ClassVar[list[int]] = [10, 100, 500]
param_names: ClassVar[list[str]] = ["num_fragments"]
def setup(self, n: int) -> None:
self.strategy = PlanDecisionContextStrategy()
self.fragments = _make_fragments(n, vary_tiers=True)
self.budget = ContextBudget(max_tokens=100000, reserved_tokens=0)
def time_assemble(self, n: int) -> None:
self.strategy.assemble(self.fragments, self.budget)