Files
OpenJarvis/evals/tests/test_backends.py
T
Jon Saad-FalconandClaude Opus 4.6 bd49383201 Add evaluation framework and center README logo SVGs
Evaluation framework (evals/): benchmarking system for measuring accuracy
across four categories — Chat (WildChat), Reasoning (SuperGPQA), RAG (FRAMES),
and Agentic (GAIA). Two backends: jarvis-direct (engine-level) and jarvis-agent
(agent-level with tool calling), both supporting local and cloud models.
Datasets adapted from IPW, scorers include exact match, LLM letter extraction,
and LLM-as-judge. Parallel execution via ThreadPoolExecutor with incremental
JSONL output. CLI: python -m evals {run,run-all,summarize,list}. 57 tests pass.

SVG fix: center logo content within viewBox by wrapping icon+text in a
translate(90,0) group, eliminating the left-shift visible in the README.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 23:48:43 +00:00

139 lines
5.4 KiB
Python

"""Tests for backend construction with mocks."""
from __future__ import annotations
from unittest.mock import MagicMock, patch
class TestJarvisDirectBackend:
@patch("openjarvis.system.SystemBuilder")
def test_construction_default(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_system = MagicMock()
mock_builder.build.return_value = mock_system
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_direct import JarvisDirectBackend
backend = JarvisDirectBackend()
assert backend.backend_id == "jarvis-direct"
mock_builder.telemetry.assert_called_with(False)
mock_builder.traces.assert_called_with(False)
mock_builder.build.assert_called_once()
@patch("openjarvis.system.SystemBuilder")
def test_construction_with_engine_key(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_builder.build.return_value = MagicMock()
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_direct import JarvisDirectBackend
JarvisDirectBackend(engine_key="cloud")
mock_builder.engine.assert_called_with("cloud")
@patch("openjarvis.system.SystemBuilder")
def test_generate_full(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_system = MagicMock()
mock_system.engine.generate.return_value = {
"content": "42",
"usage": {"prompt_tokens": 10, "completion_tokens": 5},
"model": "test-model",
"cost_usd": 0.001,
}
mock_builder.build.return_value = mock_system
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_direct import JarvisDirectBackend
backend = JarvisDirectBackend()
result = backend.generate_full("What is 2+2?", model="test-model")
assert result["content"] == "42"
assert result["cost_usd"] == 0.001
assert "latency_seconds" in result
@patch("openjarvis.system.SystemBuilder")
def test_generate(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_system = MagicMock()
mock_system.engine.generate.return_value = {
"content": "Paris",
"usage": {},
}
mock_builder.build.return_value = mock_system
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_direct import JarvisDirectBackend
backend = JarvisDirectBackend()
text = backend.generate("Capital of France?", model="m")
assert text == "Paris"
class TestJarvisAgentBackend:
@patch("openjarvis.system.SystemBuilder")
def test_construction(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.agent.return_value = mock_builder
mock_builder.tools.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_builder.build.return_value = MagicMock()
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_agent import JarvisAgentBackend
backend = JarvisAgentBackend(
engine_key="cloud", agent_name="orchestrator",
tools=["calculator", "think"],
)
assert backend.backend_id == "jarvis-agent"
mock_builder.engine.assert_called_with("cloud")
mock_builder.agent.assert_called_with("orchestrator")
mock_builder.tools.assert_called_with(["calculator", "think"])
@patch("openjarvis.system.SystemBuilder")
def test_generate_full(self, mock_builder_cls):
mock_builder = MagicMock()
mock_builder.engine.return_value = mock_builder
mock_builder.agent.return_value = mock_builder
mock_builder.tools.return_value = mock_builder
mock_builder.telemetry.return_value = mock_builder
mock_builder.traces.return_value = mock_builder
mock_system = MagicMock()
mock_system.ask.return_value = {
"content": "The answer is 4.",
"usage": {"prompt_tokens": 50, "completion_tokens": 20},
"model": "gpt-4o",
"turns": 2,
"tool_results": [
{"tool_name": "calculator", "content": "4", "success": True},
],
}
mock_builder.build.return_value = mock_system
mock_builder_cls.return_value = mock_builder
from evals.backends.jarvis_agent import JarvisAgentBackend
backend = JarvisAgentBackend(agent_name="orchestrator")
result = backend.generate_full("What is 2+2?", model="gpt-4o")
assert result["content"] == "The answer is 4."
assert result["turns"] == 2
assert len(result["tool_results"]) == 1