diff --git a/agent/title_generator.py b/agent/title_generator.py index f865aa02d022..64f5b03f977f 100644 --- a/agent/title_generator.py +++ b/agent/title_generator.py @@ -237,6 +237,13 @@ def _auto_title_session( return try: + latest = session_db.get_session_title(session_id) + if latest: + logger.debug( + "Skipping auto-generated session title because a title was set while generation was in flight: %s", + latest, + ) + return session_db.set_session_title(session_id, title) logger.debug("Auto-generated session title: %s", title) if title_callback is not None: diff --git a/tests/agent/test_title_generator.py b/tests/agent/test_title_generator.py index 50aa01951abe..0dfbdc57f322 100644 --- a/tests/agent/test_title_generator.py +++ b/tests/agent/test_title_generator.py @@ -245,6 +245,23 @@ class TestAutoTitleSession: auto_title_session(db, "sess-1", "hi", "hello") db.set_session_title.assert_called_once_with("sess-1", "New Title") + def test_does_not_overwrite_title_set_while_generation_was_in_flight(self): + db = MagicMock() + db.get_session_title.side_effect = [None, "Manual Title"] + seen = [] + + with patch("agent.title_generator.generate_title", return_value="Auto Title"): + auto_title_session( + db, + "sess-1", + "hi", + "hello", + title_callback=seen.append, + ) + + db.set_session_title.assert_not_called() + assert seen == [] + def test_invokes_title_callback_after_setting_title(self): db = MagicMock() db.get_session_title.return_value = None