Skip to content

Commit e686cc7

Browse files
committed
fix(contrib): align evaluator runtime versions
1 parent 809f482 commit e686cc7

7 files changed

Lines changed: 35 additions & 5 deletions

File tree

evaluators/contrib/budget/src/agent_control_evaluator_budget/budget/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class BudgetEvaluatorConfig(EvaluatorConfig):
109109
metadata_paths: dict[str, str] = Field(default_factory=dict)
110110

111111
@model_validator(mode="after")
112-
def require_pricing_for_cost_rules(self) -> "BudgetEvaluatorConfig":
112+
def require_pricing_for_cost_rules(self) -> BudgetEvaluatorConfig:
113113
has_cost_rule = any(rule.limit_unit == "usd_cents" for rule in self.limits)
114114
if has_cost_rule and self.pricing is None:
115115
raise ValueError('pricing is required when any rule uses limit_unit="usd_cents"')

evaluators/contrib/budget/src/agent_control_evaluator_budget/budget/evaluator.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import logging
1616
import math
1717
import threading
18+
from importlib.metadata import PackageNotFoundError, version
1819
from typing import Any
1920

2021
from agent_control_evaluators._base import Evaluator, EvaluatorMetadata
@@ -27,6 +28,11 @@
2728

2829
logger = logging.getLogger(__name__)
2930

31+
try:
32+
_PACKAGE_VERSION = version("agent-control-evaluator-budget")
33+
except PackageNotFoundError:
34+
_PACKAGE_VERSION = "0.0.0.dev"
35+
3036
# ---------------------------------------------------------------------------
3137
# Module-level store registry
3238
#
@@ -173,7 +179,7 @@ class BudgetEvaluator(Evaluator[BudgetEvaluatorConfig]):
173179

174180
metadata = EvaluatorMetadata(
175181
name="budget",
176-
version="3.0.0",
182+
version=_PACKAGE_VERSION,
177183
description="Cumulative LLM token and cost budget tracking",
178184
)
179185
config_model = BudgetEvaluatorConfig

evaluators/contrib/budget/tests/budget/test_budget.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from __future__ import annotations
77

8+
from importlib.metadata import version
89
import threading
910
from typing import Any
1011

@@ -39,6 +40,10 @@ def _clean_store_registry() -> None:
3940
clear_budget_stores()
4041

4142

43+
def test_metadata_version_matches_distribution_version() -> None:
44+
assert BudgetEvaluator.metadata.version == version("agent-control-evaluator-budget")
45+
46+
4247
# ---------------------------------------------------------------------------
4348
# InMemoryBudgetStore
4449
# ---------------------------------------------------------------------------

evaluators/contrib/cisco/src/agent_control_evaluator_cisco/ai_defense/evaluator.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import json
44
import os
5+
from importlib.metadata import PackageNotFoundError, version
56
from typing import Any
67

78
from agent_control_evaluators import (
@@ -14,6 +15,11 @@
1415
from .client import AI_DEFENSE_HTTPX_AVAILABLE, REGION_BASE_URLS, AIDefenseClient, build_endpoint
1516
from .config import CiscoAIDefenseConfig
1617

18+
try:
19+
_PACKAGE_VERSION = version("agent-control-evaluator-cisco")
20+
except PackageNotFoundError:
21+
_PACKAGE_VERSION = "0.0.0.dev"
22+
1723

1824
def _load_api_key(env_name: str) -> str:
1925
key = os.getenv(env_name)
@@ -99,7 +105,7 @@ class CiscoAIDefenseEvaluator(Evaluator[CiscoAIDefenseConfig]):
99105

100106
metadata = EvaluatorMetadata(
101107
name="cisco.ai_defense",
102-
version="0.1.0",
108+
version=_PACKAGE_VERSION,
103109
description="Cisco AI Defense Chat Inspection integration",
104110
requires_api_key=True,
105111
timeout_ms=15000,

evaluators/contrib/cisco/tests/test_evaluator.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from importlib.metadata import version
2+
13
import pytest
24
from pydantic import ValidationError
35

@@ -13,6 +15,10 @@ def _env_api_key(monkeypatch: pytest.MonkeyPatch) -> None:
1315
monkeypatch.setenv("AI_DEFENSE_API_KEY", "test-key")
1416

1517

18+
def test_metadata_version_matches_distribution_version() -> None:
19+
assert CiscoAIDefenseEvaluator.metadata.version == version("agent-control-evaluator-cisco")
20+
21+
1622
@pytest.mark.asyncio
1723
async def test_none_input_returns_no_data() -> None:
1824
cfg = CiscoAIDefenseConfig()

evaluators/contrib/galileo/src/agent_control_evaluator_galileo/luna2/evaluator.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import logging
88
import os
9+
from importlib.metadata import PackageNotFoundError, version
910
from typing import Any
1011

1112
from agent_control_evaluators import Evaluator, EvaluatorMetadata, register_evaluator
@@ -15,6 +16,11 @@
1516

1617
logger = logging.getLogger(__name__)
1718

19+
try:
20+
_PACKAGE_VERSION = version("agent-control-evaluator-galileo")
21+
except PackageNotFoundError:
22+
_PACKAGE_VERSION = "0.0.0.dev"
23+
1824
# Check if httpx is available
1925
try:
2026
import httpx
@@ -84,7 +90,7 @@ class Luna2Evaluator(Evaluator[Luna2EvaluatorConfig]):
8490

8591
metadata = EvaluatorMetadata(
8692
name="galileo.luna2",
87-
version="3.0.0",
93+
version=_PACKAGE_VERSION,
8894
description="Galileo Luna-2 enterprise runtime protection (direct API)",
8995
requires_api_key=True,
9096
timeout_ms=10000,

evaluators/contrib/galileo/tests/test_luna2_evaluator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
The evaluator uses direct HTTP API calls instead of the galileo SDK.
88
"""
99

10+
from importlib.metadata import version
1011
import os
1112
from unittest.mock import AsyncMock, MagicMock, patch
1213

@@ -282,7 +283,7 @@ def test_luna2_evaluator_import_success(self):
282283

283284
assert Luna2Evaluator is not None
284285
assert Luna2Evaluator.metadata.name == "galileo.luna2"
285-
assert Luna2Evaluator.metadata.version == "3.0.0"
286+
assert Luna2Evaluator.metadata.version == version("agent-control-evaluator-galileo")
286287

287288
@patch("agent_control_evaluator_galileo.luna2.evaluator.LUNA2_AVAILABLE", False)
288289
def test_luna2_evaluator_is_available_false_without_httpx(self):

0 commit comments

Comments
 (0)