[agents] Auto-complete agent session scrobbles after 10 minutes
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user