[agents] Fork completed agent session scrobbles on follow-up
This commit is contained in:
@ -1105,8 +1105,8 @@ def test_agent_session_detail_view(mock_delay, client, user):
|
||||
|
||||
|
||||
@patch("scrobbles.tasks.scrobble_agent_session_prompt.delay")
|
||||
def test_manual_scrobble_agent_follow_up_appends_turn(mock_delay, user):
|
||||
scrobble = _mk_scrobble(
|
||||
def test_manual_scrobble_agent_follow_up_forks_completed_session(mock_delay, user):
|
||||
original = _mk_scrobble(
|
||||
user,
|
||||
in_progress=False,
|
||||
turns=[
|
||||
@ -1118,6 +1118,42 @@ def test_manual_scrobble_agent_follow_up_appends_turn(mock_delay, user):
|
||||
],
|
||||
)
|
||||
|
||||
result = manual_scrobble_agent_follow_up("tell me more", original.id, user.id)
|
||||
|
||||
assert result.id != original.id
|
||||
assert result.agent_session_id == original.agent_session_id
|
||||
assert result.in_progress is True
|
||||
assert result.log["title"] == original.log["title"]
|
||||
assert result.log["forked_from_id"] == original.id
|
||||
|
||||
original.refresh_from_db()
|
||||
assert len(original.log["turns"]) == 1
|
||||
assert original.in_progress is False
|
||||
|
||||
turns = result.log["turns"]
|
||||
assert len(turns) == 2
|
||||
assert turns[0] == original.log["turns"][0]
|
||||
assert turns[1]["prompt"] == "tell me more"
|
||||
assert turns[1]["response"] is None
|
||||
mock_delay.assert_called_once_with(result.id, turns[1]["prompt_id"])
|
||||
|
||||
|
||||
@patch("scrobbles.tasks.scrobble_agent_session_prompt.delay")
|
||||
def test_manual_scrobble_agent_follow_up_appends_turn_when_in_progress(
|
||||
mock_delay, user
|
||||
):
|
||||
scrobble = _mk_scrobble(
|
||||
user,
|
||||
in_progress=True,
|
||||
turns=[
|
||||
{
|
||||
"prompt_id": "abc-123",
|
||||
"prompt": "hello",
|
||||
"response": "hi back",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
result = manual_scrobble_agent_follow_up("tell me more", scrobble.id, user.id)
|
||||
|
||||
assert result.id == scrobble.id
|
||||
@ -1127,6 +1163,7 @@ def test_manual_scrobble_agent_follow_up_appends_turn(mock_delay, user):
|
||||
assert turns[1]["prompt"] == "tell me more"
|
||||
assert turns[1]["response"] is None
|
||||
assert scrobble.in_progress is True
|
||||
assert "forked_from_id" not in scrobble.log
|
||||
mock_delay.assert_called_once_with(scrobble.id, turns[1]["prompt_id"])
|
||||
|
||||
|
||||
@ -1137,8 +1174,8 @@ def test_manual_scrobble_agent_follow_up_unknown_scrobble(mock_delay, user):
|
||||
|
||||
|
||||
@patch("scrobbles.tasks.scrobble_agent_session_prompt.delay")
|
||||
def test_agent_session_followup_post_appends_turn(mock_delay, client, user):
|
||||
scrobble = _mk_scrobble(
|
||||
def test_agent_session_followup_post_forks_completed_session(mock_delay, client, user):
|
||||
original = _mk_scrobble(
|
||||
user,
|
||||
in_progress=False,
|
||||
turns=[
|
||||
@ -1150,12 +1187,48 @@ def test_agent_session_followup_post_appends_turn(mock_delay, client, user):
|
||||
],
|
||||
)
|
||||
client.force_login(user)
|
||||
response = client.post(
|
||||
reverse("scrobbles:agent-session-followup", args=[original.id]),
|
||||
{"prompt": "tell me more"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response["HX-Redirect"] == reverse(
|
||||
"scrobbles:detail", args=[response.context["object"].id]
|
||||
)
|
||||
forked = response.context["object"]
|
||||
assert forked.id != original.id
|
||||
assert b"tell me more" in response.content
|
||||
assert b"Thinking" in response.content
|
||||
assert b"every 5s" in response.content
|
||||
original.refresh_from_db()
|
||||
assert len(original.log["turns"]) == 1
|
||||
assert original.in_progress is False
|
||||
|
||||
|
||||
@patch("scrobbles.tasks.scrobble_agent_session_prompt.delay")
|
||||
def test_agent_session_followup_post_appends_turn_when_in_progress(
|
||||
mock_delay, client, user
|
||||
):
|
||||
scrobble = _mk_scrobble(
|
||||
user,
|
||||
in_progress=True,
|
||||
turns=[
|
||||
{
|
||||
"prompt_id": "abc-123",
|
||||
"prompt": "hello",
|
||||
"response": "hi back",
|
||||
}
|
||||
],
|
||||
)
|
||||
client.force_login(user)
|
||||
response = client.post(
|
||||
reverse("scrobbles:agent-session-followup", args=[scrobble.id]),
|
||||
{"prompt": "tell me more"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert "HX-Redirect" not in response
|
||||
assert b"tell me more" in response.content
|
||||
assert b"Thinking" in response.content
|
||||
assert b"every 5s" in response.content
|
||||
|
||||
Reference in New Issue
Block a user