diff --git a/contributing/samples/gepa/experiment.py b/contributing/samples/gepa/experiment.py index 2f5d03a772..f68b349d9c 100644 --- a/contributing/samples/gepa/experiment.py +++ b/contributing/samples/gepa/experiment.py @@ -43,7 +43,6 @@ from tau_bench.types import EnvRunResult from tau_bench.types import RunConfig import tau_bench_agent as tau_bench_agent_lib - import utils diff --git a/contributing/samples/gepa/run_experiment.py b/contributing/samples/gepa/run_experiment.py index cfd850b3a3..1bc4ee58c8 100644 --- a/contributing/samples/gepa/run_experiment.py +++ b/contributing/samples/gepa/run_experiment.py @@ -25,7 +25,6 @@ from absl import flags import experiment from google.genai import types - import utils _OUTPUT_DIR = flags.DEFINE_string( diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index 4cf5a29546..e6b6c2a51b 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -1208,6 +1208,7 @@ async def _setup_context_for_resumed_invocation( ValueError: If the session has no events to resume; If no user message is available for resuming the invocation; Or if the app is not resumable. """ + if not session.events: raise ValueError(f'Session {session.id} has no events to resume.') @@ -1215,6 +1216,22 @@ async def _setup_context_for_resumed_invocation( user_message = new_message or self._find_user_message_for_invocation( session.events, invocation_id ) + + # === [START FIX] Fallback mechanism === + if not user_message and session.events: + # If exact invocation match failed, try to find the latest user message + # This handles cases where invocation IDs might have drifted or for generic resume + for event in reversed(session.events): + if event.author == 'user' and event.content: + logger.warning( + 'Could not find user message for invocation %s. Falling back to ' + 'the latest user message in the session.', + invocation_id, + ) + user_message = event.content + break + # === [END FIX] === + if not user_message: raise ValueError( f'No user message available for resuming invocation: {invocation_id}'