"""ASV benchmarks for ACMS Context Tiers. Measures the performance of: - TieredFragment construction - ContextTierService store/get operations - Tier promotion and demotion - LRU eviction - Actor view filtering - Project scoping """ from __future__ import annotations import importlib import sys from pathlib import Path # Ensure the local *source* tree is importable even when ASV has an # older build of the package installed. _SRC = str(Path(__file__).resolve().parents[1] / "src") if _SRC not in sys.path: sys.path.insert(0, _SRC) # Force-reload so ASV picks up the source tree version. import cleveragents # noqa: E402 importlib.reload(cleveragents) from cleveragents.application.services.context_tiers import ( # noqa: E402 ContextTierService, ) from cleveragents.domain.models.acms.tiers import ( # noqa: E402 ActorRole, ContextTier, ScopedBackendView, TierBudget, TieredFragment, TierMetrics, ) # --------------------------------------------------------------------------- # Model construction benchmarks # --------------------------------------------------------------------------- class TierModelConstructionSuite: """Benchmark tier model object creation overhead.""" timeout = 60 def time_create_tiered_fragment(self) -> None: TieredFragment(fragment_id="bench-001", content="benchmark data") def time_create_tier_budget(self) -> None: TierBudget() def time_create_tier_metrics(self) -> None: TierMetrics() def time_create_scoped_view(self) -> None: ScopedBackendView(allowed_projects=["proj-a", "proj-b"]) # --------------------------------------------------------------------------- # Service operation benchmarks # --------------------------------------------------------------------------- class TierServiceStoreSuite: """Benchmark ContextTierService store/get operations.""" timeout = 60 def setup(self) -> None: self.service = ContextTierService() self.fragment = TieredFragment( fragment_id="bench-store", content="benchmark content", tier=ContextTier.HOT, ) def time_store_fragment(self) -> None: self.service.store(self.fragment) def time_get_fragment(self) -> None: self.service.store(self.fragment) self.service.get("bench-store") def time_get_miss(self) -> None: self.service.get("nonexistent") class TierServicePromotionSuite: """Benchmark tier promotion and demotion.""" timeout = 60 def setup(self) -> None: self.service = ContextTierService() def time_promote_cold_to_warm(self) -> None: frag = TieredFragment( fragment_id="promote-bench", content="data", tier=ContextTier.COLD, ) self.service.store(frag) self.service.promote("promote-bench") def time_demote_hot_to_warm(self) -> None: frag = TieredFragment( fragment_id="demote-bench", content="data", tier=ContextTier.HOT, ) self.service.store(frag) self.service.demote("demote-bench") class TierServiceEvictionSuite: """Benchmark LRU eviction performance.""" timeout = 60 def setup(self) -> None: self.service = ContextTierService() for i in range(100): self.service.store( TieredFragment( fragment_id=f"evict-{i}", content=f"data-{i}", tier=ContextTier.HOT, ) ) def time_evict_10_from_100(self) -> None: self.service.evict_lru(ContextTier.HOT, 10) class TierServiceActorViewSuite: """Benchmark per-actor filtered view performance.""" timeout = 60 def setup(self) -> None: self.service = ContextTierService() for i in range(50): tier = [ContextTier.HOT, ContextTier.WARM, ContextTier.COLD][i % 3] self.service.store( TieredFragment( fragment_id=f"actor-{i}", content=f"data-{i}", tier=tier, project_name="bench-proj", ) ) def time_strategist_view(self) -> None: self.service.get_for_actor(ActorRole.STRATEGIST, ["bench-proj"]) def time_executor_view(self) -> None: self.service.get_for_actor(ActorRole.EXECUTOR, ["bench-proj"]) def time_reviewer_view(self) -> None: self.service.get_for_actor(ActorRole.REVIEWER, ["bench-proj"]) def time_scoped_view(self) -> None: self.service.get_scoped_view(["bench-proj"])