kronector / tests /test_data_agent.py
Prathamesh Bhamare
Initial commit: KRONECTOR MLOps & Multi-Agent AI system
2532605
Raw
History Blame Contribute Delete
3.6 kB
"""
Tests for agents.data_agent.
Run: python -m pytest tests/test_data_agent.py -v
"""
from types import SimpleNamespace
import pandas as pd
import pytest
from agents.data_agent import (
data_agent,
parse_query_with_groq,
)
from ml.feature_engineering import prepare_model_data
@pytest.fixture
def agent_dataset(tmp_path):
df = pd.DataFrame(
{
"season": [2023, 2023],
"round": [1, 1],
"driver_id": ["VER", "HAM"],
"driver_name": ["Max Verstappen", "Lewis Hamilton"],
"team": ["Red Bull Racing", "Mercedes"],
"grid_position": [1.0, 2.0],
"finish_position": [1.0, 2.0],
"circuit_id": ["Bahrain Grand Prix", "Bahrain Grand Prix"],
"sector_1_time": [28.7, 28.9],
"sector_2_time": [38.5, 38.7],
"sector_3_time": [22.4, 22.6],
"avg_lap_time_practice": [95.1, 95.4],
"tire_compound": [0.0, 1.0],
"tire_age_laps": [14.0, 12.0],
"fresh_tire": [0.0, 1.0],
"pit_stop_count": [2.0, 2.0],
"team_pit_speed": [2.5, 2.8],
"weather_temp_track": [31.0, 31.0],
"weather_rainfall": [0.0, 0.0],
"telemetry_available": [True, True],
}
)
path = tmp_path / "races.parquet"
df.to_parquet(path, index=False)
return path
def test_data_agent_returns_prediction_compatible_dataframe(agent_dataset):
def parser(query):
return {
"season": 2023,
"round": 1,
"driver_id": "VER",
"driver_name": "Max Verstappen",
}
result = data_agent("Will Verstappen win Bahrain 2023?", agent_dataset, parser)
assert result["intent"]["driver_id"] == "VER"
assert len(result["rows"]) == 1
assert result["dataframe"].iloc[0]["driver_id"] == "VER"
bundle, _ = prepare_model_data(result["dataframe"])
assert len(bundle.X) == 1
def test_data_agent_returns_all_race_rows_when_no_driver(agent_dataset):
def parser(query):
return {"season": 2023, "round": 1, "driver_id": None, "driver_name": None}
result = data_agent("Predict Bahrain 2023", agent_dataset, parser)
assert len(result["dataframe"]) == 2
def test_data_agent_raises_for_missing_race(agent_dataset):
def parser(query):
return {"season": 2024, "round": 99, "driver_id": None, "driver_name": None}
with pytest.raises(ValueError, match="No rows found"):
data_agent("Predict a missing race", agent_dataset, parser)
def test_parse_query_with_groq_parses_json(monkeypatch):
class FakeCompletions:
def create(self, **kwargs):
return SimpleNamespace(
choices=[
SimpleNamespace(
message=SimpleNamespace(
content=(
'{"season": 2023, "round": 1, '
'"driver_id": "ver", "driver_name": "Max Verstappen"}'
)
)
)
]
)
class FakeGroq:
def __init__(self, api_key):
self.chat = SimpleNamespace(
completions=FakeCompletions()
)
monkeypatch.setenv("GROQ_API_KEY", "test-key")
monkeypatch.setattr("agents.data_agent.Groq", FakeGroq)
intent = parse_query_with_groq("Will Max win Bahrain 2023?")
assert intent == {
"season": 2023,
"round": 1,
"driver_id": "VER",
"driver_name": "Max Verstappen",
}