Files
cleveragents-core/benchmarks/bench_uko_persistence.py
HAL9000 ba7870da3e
CI / helm (pull_request) Successful in 55s
CI / e2e_tests (pull_request) Failing after 1m5s
CI / build (pull_request) Failing after 44s
CI / security (pull_request) Failing after 1m7s
CI / typecheck (pull_request) Failing after 1m7s
CI / integration_tests (pull_request) Failing after 1m6s
CI / push-validation (pull_request) Successful in 1m21s
CI / lint (pull_request) Successful in 1m46s
CI / quality (pull_request) Successful in 2m5s
CI / unit_tests (pull_request) Failing after 7m12s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / benchmark-publish (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
CI / benchmark-regression (pull_request) Failing after 31s
fix(acms): fix format violations and remove duplicate step definitions in uko_persistence tests
2026-05-05 02:49:54 +00:00

115 lines
4.0 KiB
Python

"""ASV benchmarks for UKO Graph Persistence service.
Benchmarks the save() and restore() methods under varying triple counts.
"""
from __future__ import annotations
import tempfile
from pathlib import Path
from unittest.mock import MagicMock
from cleveragents.application.services.uko_persistence import (
InMemoryPersistenceBackend,
JSONFilePersistenceBackend,
UKOGraphPersistence,
)
from cleveragents.domain.models.acms.index_backends import GraphIndexBackend
class UKOPersistenceBenchmarks:
"""Benchmarks for UKO Graph Persistence."""
params = [10, 100, 1000]
param_names = ["triple_count"]
def setup(self, triple_count: int) -> None:
"""Set up benchmark fixtures."""
self.triple_count = triple_count
self.temp_dir = tempfile.mkdtemp()
# Create mock graph backend
self.graph_backend = MagicMock(spec=GraphIndexBackend)
# Create sample triples
self.triples = [
{
"subject": f"uko://code/module/mod_{i}",
"predicate": "uko:type",
"object": "uko-py:Module",
}
for i in range(triple_count)
]
# Set up graph backend to return triples
self.graph_backend.query.return_value = [
{
"s": t["subject"],
"p": t["predicate"],
"o": t["object"],
}
for t in self.triples
]
def teardown(self, triple_count: int) -> None:
"""Clean up after benchmark."""
import shutil
shutil.rmtree(self.temp_dir, ignore_errors=True)
def time_save_with_in_memory_backend(self, triple_count: int) -> None:
"""Benchmark save() with InMemoryPersistenceBackend."""
persistence_backend = InMemoryPersistenceBackend()
service = UKOGraphPersistence(
graph_backend=self.graph_backend,
project="local/benchmark",
persistence_backend=persistence_backend,
)
service.save()
def time_save_with_json_file_backend(self, triple_count: int) -> None:
"""Benchmark save() with JSONFilePersistenceBackend."""
persistence_backend = JSONFilePersistenceBackend(self.temp_dir)
service = UKOGraphPersistence(
graph_backend=self.graph_backend,
project="local/benchmark",
persistence_backend=persistence_backend,
)
service.save()
def time_restore_with_in_memory_backend(self, triple_count: int) -> None:
"""Benchmark restore() with InMemoryPersistenceBackend."""
persistence_backend = InMemoryPersistenceBackend()
persistence_backend.save("local/benchmark", self.triples)
service = UKOGraphPersistence(
graph_backend=self.graph_backend,
project="local/benchmark",
persistence_backend=persistence_backend,
)
service.restore()
def time_restore_with_json_file_backend(self, triple_count: int) -> None:
"""Benchmark restore() with JSONFilePersistenceBackend."""
persistence_backend = JSONFilePersistenceBackend(self.temp_dir)
persistence_backend.save("local/benchmark", self.triples)
service = UKOGraphPersistence(
graph_backend=self.graph_backend,
project="local/benchmark",
persistence_backend=persistence_backend,
)
service.restore()
def time_json_file_backend_load(self, triple_count: int) -> None:
"""Benchmark JSONFilePersistenceBackend.load()."""
persistence_backend = JSONFilePersistenceBackend(self.temp_dir)
persistence_backend.save("local/benchmark", self.triples)
persistence_backend.load("local/benchmark")
def time_in_memory_backend_load(self, triple_count: int) -> None:
"""Benchmark InMemoryPersistenceBackend.load()."""
persistence_backend = InMemoryPersistenceBackend()
persistence_backend.save("local/benchmark", self.triples)
persistence_backend.load("local/benchmark")