summaryrefslogtreecommitdiff
path: root/tests/test_context.py
blob: baf5dd6756937671199aae1c0c19cb7bee12c5cc (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from personal_agent.context import ContextBuilder
from personal_agent.identity import AgentIdentity, UserProfile
from personal_agent.memory.models import TaskStatus, WorkingMemory


def create_agent_identity() -> AgentIdentity:
    return AgentIdentity(
        name="Test Agent",
        personality={"style": "direct"},
        values={"honesty": True, "directness": True},
        quirks={"favorite_color": "blue"},
        behavior={
            "task_management": "TASK MANAGEMENT POLICY",
            "working_memory": "WORKING MEMORY POLICY",
            "long_term_memory": "LONG TERM MEMORY POLICY",
        },
    )


def create_user_profile() -> UserProfile:
    return UserProfile(
        name="Test User",
        preferences={},
    )


def create_context_builder() -> ContextBuilder:
    return ContextBuilder(
        agent_identity=create_agent_identity(),
        user_profile=create_user_profile(),
    )


def test_system_prompt_contains_agent_identity():
    builder = create_context_builder()

    prompt = builder.build_system_prompt(WorkingMemory())

    assert "You are Test Agent, a personal AI assistant." in prompt
    assert "Personality: direct." in prompt
    assert "Honesty: True." in prompt
    assert "Directness: True." in prompt
    assert "Favorite color: blue." in prompt
    assert "The user's name is Test User" in prompt


def test_system_prompt_contains_all_behavior_policies():
    builder = create_context_builder()

    prompt = builder.build_system_prompt(WorkingMemory())

    behavior = builder.agent_identity.behavior

    assert behavior["task_management"] in prompt
    assert behavior["working_memory"] in prompt
    assert behavior["long_term_memory"] in prompt


def test_system_prompt_contains_behavior_sections():
    builder = create_context_builder()

    prompt = builder.build_system_prompt(WorkingMemory())

    assert "===BEHAVIOR===" in prompt
    assert "Task management:" in prompt
    assert "Working memory:" in prompt
    assert "Long term memory:" in prompt


def test_system_prompt_contains_working_memory():
    builder = create_context_builder()

    memory = WorkingMemory()
    memory.set_objective("Implement authentication")
    memory.set_status(TaskStatus.ACTIVE)
    memory.add_fact("The project uses SQLite.")
    memory.add_note("Need to add logout support.")

    prompt = builder.build_system_prompt(memory)

    assert "Current working memory:" in prompt
    assert "Objective: Implement authentication" in prompt
    assert "Status: active" in prompt
    assert "The project uses SQLite." in prompt
    assert "Need to add logout support." in prompt


def test_empty_working_memory_is_explicitly_shown():
    builder = create_context_builder()

    prompt = builder.build_system_prompt(WorkingMemory())

    assert "Current working memory:" in prompt
    assert "(empty)" in prompt


def test_build_messages_puts_system_prompt_first():
    builder = create_context_builder()

    history: list[dict[str, object]] = [
        {
            "role": "user",
            "content": "Hello",
        },
        {
            "role": "assistant",
            "content": "Hi!",
        },
    ]

    messages = builder.build_messages(history, WorkingMemory())

    assert messages[0]["role"] == "system"
    assert messages[1:] == history


def test_build_messages_uses_current_working_memory():
    builder = create_context_builder()

    memory = WorkingMemory()
    memory.set_objective("Build the memory system")

    messages = builder.build_messages([], memory)

    system_prompt = messages[0]["content"]

    assert isinstance(system_prompt, str)
    assert "Objective: Build the memory system" in system_prompt