File size: 2,304 Bytes
6657e32
5ed3a9a
6657e32
b20b4ef
5ed3a9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6657e32
5ed3a9a
6657e32
 
 
5ed3a9a
6657e32
 
 
 
 
5ed3a9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Tests for core/types.py — enums and ABC."""
import pytest
from core.types import BackendName, AgentId, LLMBackend
from agents.definitions import AgentDef


class TestEnums:
    def test_backend_names(self):
        assert BackendName.MOCK == "mock"
        assert BackendName.ANTHROPIC == "anthropic"
        assert BackendName.OPENAI == "openai"
        assert BackendName.GEMINI == "gemini"

    def test_agent_ids(self):
        assert AgentId.DESIGN == "design"
        assert AgentId.ENGINEERING == "engineering"
        assert AgentId.CNC == "cnc"
        assert AgentId.CAD == "cad"

    def test_backend_name_is_string(self):
        assert isinstance(BackendName.MOCK, str)
        assert BackendName.MOCK in {"mock", "anthropic"}


class TestAgentDefModel:
    def test_create(self):
        ad = AgentDef(id="design", name="Design", role="Designer", color="#fff", avatar="D", goal="g", backstory="b")
        assert ad.id == "design"
        assert ad.name == "Design"

    def test_model_dump(self):
        ad = AgentDef(id="cad", name="CAD", role="Coder", color="#000", avatar="C", goal="g", backstory="b")
        d = ad.model_dump()
        assert d["id"] == "cad"
        assert "role" in d


class TestLLMBackendABC:
    def test_cannot_instantiate(self):
        with pytest.raises(TypeError):
            LLMBackend()

    def test_subclass_must_implement_generate(self):
        class Incomplete(LLMBackend):
            pass
        with pytest.raises(TypeError):
            Incomplete()

    def test_subclass_with_generate(self):
        class Complete(LLMBackend):
            def generate(self, messages):
                return "ok"
        b = Complete()
        assert b.generate([]) == "ok"

    def test_split_system_message(self):
        msgs = [
            {"role": "system", "content": "You are a bot"},
            {"role": "user", "content": "hello"},
        ]
        system, rest = LLMBackend.split_system_message(msgs)
        assert system == "You are a bot"
        assert len(rest) == 1
        assert rest[0]["role"] == "user"

    def test_split_system_message_no_system(self):
        msgs = [{"role": "user", "content": "hello"}]
        system, rest = LLMBackend.split_system_message(msgs)
        assert system == ""
        assert len(rest) == 1