diff --git a/google/genai/chats.py b/google/genai/chats.py index 3ba5f3c95..de1f04f1f 100644 --- a/google/genai/chats.py +++ b/google/genai/chats.py @@ -117,8 +117,9 @@ def _extract_curated_history( i += 1 if is_valid: curated_history.extend(current_output) - elif curated_history: - curated_history.pop() + else: + while curated_history and curated_history[-1].role == 'user': + curated_history.pop() return curated_history diff --git a/google/genai/tests/chats/test_get_history.py b/google/genai/tests/chats/test_get_history.py index 37d5eacac..73a243568 100644 --- a/google/genai/tests/chats/test_get_history.py +++ b/google/genai/tests/chats/test_get_history.py @@ -237,6 +237,25 @@ def test_history_with_valid_and_invalid_model_output(): assert chat.get_history(curated=True) == [] +def test_history_with_consecutive_user_inputs_and_invalid_model_turn(): + history = [ + types.Content( + role='user', + parts=[types.Part.from_text(text='user input 1')], + ), + types.Content( + role='user', + parts=[types.Part.from_text(text='user input 2')], + ), + types.Content( + role='model', + parts=[], # invalid content + ), + ] + + assert chats._extract_curated_history(history) == [] + + def test_history_end_with_user_input(): history = [ types.Content(