[agents] Auto-complete agent session scrobbles after 10 minutes
All checks were successful
ci / test (push) Successful in 2m51s
ci / build-and-deploy (push) Has been skipped

This commit is contained in:
2026-07-31 08:19:23 -04:00
parent 63589c3fcc
commit af84e1419b
4 changed files with 131 additions and 14 deletions

View File

@ -19,7 +19,11 @@ from scrobbles.scrobblers import (
manual_scrobble_agent_follow_up,
manual_scrobble_agent_session,
)
from scrobbles.tasks import scrobble_agent_session_prompt
from scrobbles.tasks import (
AGENT_SESSION_AUTO_COMPLETE_SECONDS,
scrobble_agent_session_complete,
scrobble_agent_session_prompt,
)
User = get_user_model()
@ -297,7 +301,10 @@ def test_manual_scrobble_agent_session_opencode_model_empty(mock_delay, user, se
@patch("agents.providers.agent_prompt")
def test_scrobble_agent_session_prompt_fills_turn(mock_agent_prompt, user):
@patch("scrobbles.tasks.scrobble_agent_session_complete.apply_async")
def test_scrobble_agent_session_prompt_fills_turn(
mock_complete, mock_agent_prompt, user
):
scrobble = _mk_scrobble(
user,
turns=[
@ -320,12 +327,18 @@ def test_scrobble_agent_session_prompt_fills_turn(mock_agent_prompt, user):
mock_agent_prompt.assert_called_once_with("hello", provider="gemini", history=[])
assert scrobble.log["turns"][0]["response"] == "hi back"
assert scrobble.log["provider"] == "gemini"
assert scrobble.in_progress is False
assert scrobble.played_to_completion is True
assert scrobble.in_progress is True
assert scrobble.played_to_completion is False
mock_complete.assert_called_once_with(
args=[scrobble.id], countdown=AGENT_SESSION_AUTO_COMPLETE_SECONDS
)
@patch("agents.providers.agent_prompt")
def test_scrobble_agent_session_prompt_passes_history(mock_agent_prompt, user):
@patch("scrobbles.tasks.scrobble_agent_session_complete.apply_async")
def test_scrobble_agent_session_prompt_passes_history(
mock_complete, mock_agent_prompt, user
):
scrobble = _mk_scrobble(
user,
turns=[
@ -363,7 +376,10 @@ def test_scrobble_agent_session_prompt_passes_history(mock_agent_prompt, user):
@patch("agents.providers.agent_prompt")
def test_scrobble_agent_session_prompt_stores_error(mock_agent_prompt, user):
@patch("scrobbles.tasks.scrobble_agent_session_complete.apply_async")
def test_scrobble_agent_session_prompt_stores_error(
mock_complete, mock_agent_prompt, user
):
scrobble = _mk_scrobble(
user,
turns=[
@ -381,7 +397,48 @@ def test_scrobble_agent_session_prompt_stores_error(mock_agent_prompt, user):
scrobble.refresh_from_db()
assert scrobble.log["turns"][0]["response"] == "Error: boom"
assert scrobble.log["turns"][0]["error"] is True
assert scrobble.in_progress is True
mock_complete.assert_called_once_with(
args=[scrobble.id], countdown=AGENT_SESSION_AUTO_COMPLETE_SECONDS
)
# --- auto-complete ---
def test_scrobble_agent_session_complete_marks_done(user):
scrobble = _mk_scrobble(
user,
in_progress=True,
turns=[{"prompt_id": "abc-123", "prompt": "hello", "response": "hi back"}],
)
scrobble_agent_session_complete(scrobble.id)
scrobble.refresh_from_db()
assert scrobble.in_progress is False
assert scrobble.played_to_completion is True
@patch("scrobbles.tasks.scrobble_agent_session_complete.apply_async")
def test_scrobble_agent_session_complete_reschedules_when_pending(mock_complete, user):
scrobble = _mk_scrobble(
user,
in_progress=True,
turns=[{"prompt_id": "abc-123", "prompt": "hello", "response": None}],
)
scrobble_agent_session_complete(scrobble.id)
scrobble.refresh_from_db()
assert scrobble.in_progress is True
mock_complete.assert_called_once_with(
args=[scrobble.id], countdown=AGENT_SESSION_AUTO_COMPLETE_SECONDS
)
def test_scrobble_agent_session_complete_unknown_scrobble(user):
scrobble_agent_session_complete(999999)
# --- views ---
@ -452,7 +509,9 @@ def test_agent_session_list_view(mock_delay, client, user):
@patch("scrobbles.tasks.scrobble_agent_session_prompt.delay")
def test_homepage_shows_agent_sessions_with_first_prompt_title(mock_delay, client, user):
def test_homepage_shows_agent_sessions_with_first_prompt_title(
mock_delay, client, user
):
first_prompt = "tell me about the history of cheese making in europe"
_mk_scrobble(user, in_progress=False, title=first_prompt)
client.force_login(user)