Spaces:
Sleeping
Sleeping
File size: 2,742 Bytes
116524e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import pytest
from pydantic import ValidationError
from ace.integrations.mcp.models import (
AskRequest,
AskResponse,
LearnSampleRequest,
LearnSampleResponse,
LearnFeedbackRequest,
LearnFeedbackResponse,
SkillbookGetRequest,
SkillbookGetResponse,
SkillbookSaveRequest,
SkillbookSaveResponse,
SkillbookLoadRequest,
SkillbookLoadResponse,
SessionConfig,
SampleItem,
SkillItem,
ErrorEnvelope,
)
def test_session_config_validation():
# Valid with all fields
config = SessionConfig(model="gpt-4o", temperature=0.7, max_tokens=100)
assert config.model == "gpt-4o"
# Valid without model (optional per contract)
config2 = SessionConfig(temperature=0.5)
assert config2.model is None
# Invalid: empty string for model
with pytest.raises(ValidationError):
SessionConfig(model="")
# Invalid temp
with pytest.raises(ValidationError):
SessionConfig(model="gpt-4o", temperature=2.5)
def test_ask_request_validation():
# Valid
req = AskRequest(session_id="s1", question="hello")
assert req.context == ""
assert req.metadata is None
# Max length question
with pytest.raises(ValidationError):
AskRequest(session_id="s1", question="a" * 100001)
# Removed compatibility flags must remain invalid
with pytest.raises(ValidationError):
AskRequest(session_id="s1", question="hello", learn=True)
def test_learn_sample_request_limits():
# Min items
with pytest.raises(ValidationError):
LearnSampleRequest(session_id="s1", samples=[])
# Max items
samples = [{"question": f"q{i}"} for i in range(26)]
with pytest.raises(ValidationError):
LearnSampleRequest(session_id="s1", samples=samples)
def test_skillbook_get_limits():
# Valid
req = SkillbookGetRequest(session_id="s", limit=50)
assert req.limit == 50
# Max limit
with pytest.raises(ValidationError):
SkillbookGetRequest(session_id="s", limit=201)
def test_error_envelope():
env = ErrorEnvelope(code="ERR1", message="Error message")
assert env.code == "ERR1"
# Extra fields forbidden
with pytest.raises(ValidationError):
ErrorEnvelope(code="ERR1", message="m", extra="not allowed")
def test_skillbook_load_request_disallows_unsupported_flags():
req = SkillbookLoadRequest(session_id="s1", path="/tmp/skillbook.json")
assert req.path == "/tmp/skillbook.json"
with pytest.raises(ValidationError):
SkillbookLoadRequest(
session_id="s1",
path="/tmp/skillbook.json",
replace=False,
)
|