-
Notifications
You must be signed in to change notification settings - Fork 223
google_genai integration crashes when Gemini returns parts = None #1675
Copy link
Copy link
Closed
Description
Description
google_genai integration crashes when Gemini returns parts = None
Description
The logfire.instrument_google_genai() integration crashes when Gemini 3 Pro returns a response with parts = None (thinking-only response with no text or tool calls).
Error
File "logfire/_internal/integrations/google_genai.py", line 80, in emit
new_parts = [transform_part(part) for part in parts]
^^^^^
TypeError: 'NoneType' object is not iterable
Full Traceback
Traceback (most recent call last):
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/generate_content.py", line 1020, in _response_async_generator_wrapper
helper.process_response(response)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/generate_content.py", line 398, in process_response
self._maybe_log_response(response)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/generate_content.py", line 606, in _maybe_log_response
self._maybe_log_response_candidate(
candidate,
candidate_index=candidate_index,
response_index=self._response_index,
)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/generate_content.py", line 649, in _maybe_log_response_candidate
self._otel_wrapper.log_response_content(
attributes=attributes,
body=body,
)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/otel_wrapper.py", line 102, in log_response_content
self._log_event(event_name, attributes, body)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/opentelemetry/instrumentation/google_genai/otel_wrapper.py", line 110, in _log_event
self._logger.emit(event)
File "/opt/render/project/src/.venv/lib/python3.13/site-packages/logfire/_internal/integrations/google_genai.py", line 80, in emit
new_parts = [transform_part(part) for part in parts]
^^^^^
TypeError: 'NoneType' object is not iterable
Context
This occurs when using gemini-3-pro-preview with thinking enabled via Pydantic AI's GoogleModel. The model sometimes returns responses containing only thinking content with parts = None during streaming.
Configuration:
import logfire
from pydantic_ai import Agent
from pydantic_ai.models.google import GoogleModel
logfire.configure()
logfire.instrument_pydantic_ai()
logfire.instrument_google_genai()
model = GoogleModel(
'gemini-3-pro-preview',
thinking_config={
'mode': 'extended',
'level': 'high',
}
)
agent = Agent(model, retries=2)
# Agent calls that require function calling trigger the errorWhat happens:
- Gemini 3 Pro enters extended thinking mode
- API returns response chunk with
parts = None(only thinking, no text/tool calls) - Logfire integration assumes
partsis always iterable - Crash occurs when trying to iterate over
None
Environment
- Logfire: Latest (Python SDK)
- Pydantic AI: 0.0.29 (latest)
- Python: 3.13.4
- Model:
gemini-3-pro-preview
Suggested Fix
Add a null check in logfire/_internal/integrations/google_genai.py before iterating:
# Line 80
if parts is not None:
new_parts = [transform_part(part) for part in parts]
else:
new_parts = [] # or handle appropriatelyImpact
- Crashes Logfire telemetry collection when Gemini 3 Pro is used with thinking
- Error is caught but prevents capturing detailed logs of the problematic responses
- Makes debugging the underlying Gemini issue harder since we can't see the full response data
Related Issues
- Gemini models in some cases cause empty responses: Expected at least one candidate in Gemini response pydantic-ai#4102 - Gemini 3 Pro thinking + function calling bug (upstream root cause)
- Retry instead of raising error when Google returns 0 candidates pydantic-ai#4125 - Retry instead of raising error when Google returns 0 candidates
- This issue is a downstream effect where Logfire can't handle the malformed responses from Gemini
Workaround
Currently using gemini-3-flash-preview instead, which doesn't exhibit this behavior.
Python, Logfire & OS Versions, related packages (not required)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels