google / google/adk-python

contents rearrange still raises on id-less / unmatched trailing function responses (follow-up to orphan FR prune)

Abierto
#6,751 5 comentarios 0 reacciones 1 asignado Reclamado por @surajksharma07 Ver en GitHub
live
Lenguaje dominante
Python
Estrellas
21.5k
Forks
4k
Merge medio
1 d 22 h
PR fusionados (30 d)
31

Descripción

### Describe the Bug

`#6582` / `73e8625` added `_drop_orphaned_function_responses`, which correctly prunes **id'd** function responses with no matching function call before contents assembly.

Two gaps remain and can still permanently poison a session (raise happens in request preprocessing, before any user callback):

1. **`_rearrange_events_for_latest_function_response` still raises** `ValueError: No function call event found for function responses ids: ...` when it cannot pair the trailing FR event. `@GWeale` noted on `#6587` that this rearrange-path drop is still worth having as defense in depth (`main` only prunes responses that carry an id).
2. **Id-less / empty-id trailing FRs are intentionally skipped by the prune helper** (`if response.id`), but then rearrange adds `None` / `''` into the id set and raises — so sessions with stripped or missing FR ids still die on the next turn.

Related hole: when rearrange finds a matching FC event but the trailing FR event also carries unmatched ids (`Last response event should only contain the responses...`), it still raises instead of dropping the unmatched parts.

### Steps to Reproduce

```python
from google.adk.events.event import Event
from google.adk.flows.llm_flows.contents import _get_contents
from google.genai import types

events = [
Event(author='user', content=types.Content(role='user', parts=[types.Part(text='hi')])),
Event(author='agent', content=types.Content(role='model', parts=[types.Part(text='done')])),
Event(
author='agent',
content=types.Content(
role='user',
parts=[types.Part(function_response=types.FunctionResponse(name='tool', id=None, response={'ok': True}))],
),
),
]
_get_contents(None, events, 'agent') # ValueError: ... ids: {None}
```

### Expected Behavior

Orphaned / unpairable trailing function responses are dropped (with a warning), contents assembly continues, and the session stays usable.

### Observed Behavior

`ValueError` during contents assembly; every later turn replays the same fatal history.

### Environment

- ADK: current `main` (post-`73e8625`)
- Related: `#6582` (closed), `#6587` (closed as duplicate of landed prune; rearrange follow-up requested)

### Additional Context

Happy to send the rearrange-path follow-up PR referenced by `@GWeale` on `#6587`.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.