google / google/adk-python

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

Aperta
#6,751 5 commenti 0 reazioni 1 assegnatario Rivendicata da @surajksharma07 Vedi su GitHub
live
Lingua principale
Python
Stelle
21.5k
Fork
4k
Merge medio
1g 14h
PR unite (30g)
37

Descrizione

### 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`.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.