SwarmAudit / app /services /benchmark.py
Pranoy Mukherjee
Update SwarmAudit Space demo
9237011
Raw
History Blame Contribute Delete
2.48 kB
import time
from app.config import Settings
from app.schemas import BenchmarkResult
from app.services.llm_client import LLMClient
BENCHMARK_PROMPT = (
"Review this Python snippet for one security issue and answer in one concise sentence:\n"
"user_code = input('code: ')\n"
"eval(user_code)\n"
)
class BenchmarkService:
def __init__(self, settings: Settings):
self.settings = settings
self.llm_client = LLMClient(settings)
async def run_llm_benchmark(self) -> BenchmarkResult:
start = time.perf_counter()
try:
completion = await self.llm_client.test_completion()
latency_ms = round((time.perf_counter() - start) * 1000, 2)
completion_chars = len(completion)
chars_per_second = self._chars_per_second(completion_chars, latency_ms)
return BenchmarkResult(
provider=self.settings.llm_provider,
model=self.settings.llm_model,
backend=self._backend_name(),
hardware=self._hardware_label(),
ok=True,
latency_ms=latency_ms,
prompt_chars=len(BENCHMARK_PROMPT),
completion_chars=completion_chars,
chars_per_second=chars_per_second,
completion_preview=completion,
)
except Exception as exc:
latency_ms = round((time.perf_counter() - start) * 1000, 2)
return BenchmarkResult(
provider=self.settings.llm_provider,
model=self.settings.llm_model,
backend=self._backend_name(),
hardware=self._hardware_label(),
ok=False,
latency_ms=latency_ms,
prompt_chars=len(BENCHMARK_PROMPT),
error=str(exc),
)
def _backend_name(self) -> str:
if self.settings.llm_provider == "mock":
return "Mock local backend"
if self.settings.llm_provider == "vllm":
return "vLLM OpenAI-compatible endpoint"
return self.settings.llm_provider
def _hardware_label(self) -> str:
if self.settings.llm_provider == "vllm":
return "AMD MI300X target"
return "Local/mock"
def _chars_per_second(self, completion_chars: int, latency_ms: float) -> float | None:
if latency_ms <= 0:
return None
return round(completion_chars / (latency_ms / 1000), 2)