1
1
from unittest .mock import MagicMock , patch
2
2
3
3
import pytest
4
- from exchange import Message
4
+ from exchange import Message , ToolUse , ToolResult
5
5
from goose .cli .prompt .goose_prompt_session import GoosePromptSession
6
6
from goose .cli .prompt .user_input import PromptAction , UserInput
7
7
from goose .cli .session import Session
@@ -32,7 +32,7 @@ def create_session(session_attributes: dict = {}):
32
32
yield create_session
33
33
34
34
35
- def test_session_does_not_extend_last_user_message_on_init (
35
+ def test_session_does_not_extend_last_user_text_message_on_init (
36
36
create_session_with_mock_configs , mock_sessions_path , create_session_file
37
37
):
38
38
messages = [Message .user ("Hello" ), Message .assistant ("Hi" ), Message .user ("Last should be removed" )]
@@ -44,6 +44,41 @@ def test_session_does_not_extend_last_user_message_on_init(
44
44
assert [message .text for message in session .exchange .messages ] == ["Hello" , "Hi" ]
45
45
46
46
47
+ def test_session_adds_resume_message_if_last_message_is_tool_result (
48
+ create_session_with_mock_configs , mock_sessions_path , create_session_file
49
+ ):
50
+ messages = [
51
+ Message .user ("Hello" ),
52
+ Message (role = "assistant" , content = [ToolUse (id = "1" , name = "first_tool" , parameters = {})]),
53
+ Message (role = "user" , content = [ToolResult (tool_use_id = "1" , output = "output" )]),
54
+ ]
55
+ create_session_file (messages , mock_sessions_path / f"{ SESSION_NAME } .jsonl" )
56
+
57
+ session = create_session_with_mock_configs ({"name" : SESSION_NAME })
58
+ print ("Messages after session init:" , session .exchange .messages ) # Debugging line
59
+ assert len (session .exchange .messages ) == 4
60
+ assert session .exchange .messages [- 1 ].role == "assistant"
61
+ assert session .exchange .messages [- 1 ].text == "I see we were interrupted. How can I help you?"
62
+
63
+
64
+ def test_session_removes_tool_use_and_adds_resume_message_if_last_message_is_tool_use (
65
+ create_session_with_mock_configs , mock_sessions_path , create_session_file
66
+ ):
67
+ messages = [
68
+ Message .user ("Hello" ),
69
+ Message (role = "assistant" , content = [ToolUse (id = "1" , name = "first_tool" , parameters = {})]),
70
+ ]
71
+ create_session_file (messages , mock_sessions_path / f"{ SESSION_NAME } .jsonl" )
72
+
73
+ session = create_session_with_mock_configs ({"name" : SESSION_NAME })
74
+ print ("Messages after session init:" , session .exchange .messages ) # Debugging line
75
+ assert len (session .exchange .messages ) == 2
76
+ assert [message .text for message in session .exchange .messages ] == [
77
+ "Hello" ,
78
+ "I see we were interrupted. How can I help you?" ,
79
+ ]
80
+
81
+
47
82
def test_save_session_create_session (mock_sessions_path , create_session_with_mock_configs , mock_specified_session_name ):
48
83
session = create_session_with_mock_configs ()
49
84
session .exchange .messages .append (Message .assistant ("Hello" ))
0 commit comments