Files
cleveragents-core/benchmarks/execution_environment_bench.py
T
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

119 lines
3.6 KiB
Python

"""ASV benchmarks for execution environment routing.
Measures the performance of:
- ExecutionEnvironmentResolver.resolve() overhead
- ExecutionEnvironmentResolver.validate_container_available() overhead
- ExecutionEnvironmentResolver.resolve_and_validate() overhead
- ExecutionEnvironment enum instantiation
"""
from __future__ import annotations
import contextlib
import importlib
import sys
from pathlib import Path
# Ensure the local source tree is importable
_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.execution_environment_resolver import ( # noqa: E402
ContainerUnavailableError,
ExecutionEnvironmentResolver,
)
from cleveragents.domain.models.core.plan import ExecutionEnvironment # noqa: E402
# ---------------------------------------------------------------------------
# Resolver resolution benchmarks
# ---------------------------------------------------------------------------
class ResolverResolutionSuite:
"""Benchmark resolution overhead."""
timeout = 60
def setup(self) -> None:
self.resolver = ExecutionEnvironmentResolver()
def time_resolve_default(self) -> None:
self.resolver.resolve()
def time_resolve_tool_override(self) -> None:
self.resolver.resolve(tool_env="container")
def time_resolve_full_chain(self) -> None:
self.resolver.resolve(
tool_env="host",
plan_env="container",
project_env="container",
default="host",
)
def time_resolve_plan_only(self) -> None:
self.resolver.resolve(plan_env="container")
def time_resolve_project_only(self) -> None:
self.resolver.resolve(project_env="host")
# ---------------------------------------------------------------------------
# Container validation benchmarks
# ---------------------------------------------------------------------------
class ContainerValidationSuite:
"""Benchmark container availability validation overhead."""
timeout = 60
def setup(self) -> None:
self.resolver = ExecutionEnvironmentResolver()
self.container_types = ["devcontainer-instance", "git-checkout"]
self.no_container_types = ["git-checkout", "fs-directory"]
def time_validate_with_container(self) -> None:
self.resolver.validate_container_available(self.container_types)
def time_validate_without_container_exception(self) -> None:
with contextlib.suppress(ContainerUnavailableError):
self.resolver.validate_container_available(self.no_container_types)
def time_resolve_and_validate_host(self) -> None:
self.resolver.resolve_and_validate(
linked_resource_types=self.container_types,
project_env="host",
)
def time_resolve_and_validate_container(self) -> None:
self.resolver.resolve_and_validate(
linked_resource_types=self.container_types,
plan_env="container",
)
# ---------------------------------------------------------------------------
# Enum instantiation benchmarks
# ---------------------------------------------------------------------------
class EnumInstantiationSuite:
"""Benchmark ExecutionEnvironment enum overhead."""
timeout = 60
def time_create_host(self) -> None:
ExecutionEnvironment("host")
def time_create_container(self) -> None:
ExecutionEnvironment("container")
def time_resolver_instantiation(self) -> None:
ExecutionEnvironmentResolver()