Skip to content

google_genai integration crashes when Gemini returns parts = None #1675

@cmorrison3r3

Description

@cmorrison3r3

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 error

What happens:

  1. Gemini 3 Pro enters extended thinking mode
  2. API returns response chunk with parts = None (only thinking, no text/tool calls)
  3. Logfire integration assumes parts is always iterable
  4. 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 appropriately

Impact

  • 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

Workaround

Currently using gemini-3-flash-preview instead, which doesn't exhibit this behavior.

Python, Logfire & OS Versions, related packages (not required)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions