Skip to content

ImportError: 'Content'/'Part' from 'google.generativeai.types' with Python 3.12.3 and google-generativeai 0.8.5 #736

Open
@vimaltech

Description

@vimaltech

Description of the bug:

Issue: Persistent ImportError for Content/Part from google.generativeai.types (Python 3.12.3, google-generativeai 0.8.5)

Summary:
Despite google-generativeai being reported as 0.8.5 by pip show, attempts to import Content or Part directly from google.generativeai.types consistently result in an ImportError. This occurs on a clean virtual environment using Python 3.12.3. Prior to this, a TypeError: Could not create Blob was encountered with standard dictionary-based message formats, also persisting through various troubleshooting steps. All standard debugging approaches, including aggressive environment cleanups and explicit API type usage, have failed to resolve either issue.


Environment Details:

  • Operating System: Windows 11**
  • Python Version: 3.12.3
  • google-generativeai Version: 0.8.5
  • Key Dependency Versions (from pip show outputs):
    • google-ai-generativelanguage: 0.6.15
    • protobuf: 4.25.8
    • grpcio: 1.72.1
    • Pillow: 11.2.1

Problem Description:

The core issue is a recurring ImportError when attempting to import Content or Part from google.generativeai.types. This is unexpected for google-generativeai version 0.8.5, where these types are documented and expected to be directly importable.

Prior to this ImportError, the primary blocking issue was a persistent TypeError: Could not create Blob, expected Blob, dictor anImage type... Got a: <class 'google.ai.generativelanguage_v1beta.types.content.Content'>. This TypeError consistently occurred when calling chat_session.send_message(), even when the messages list was correctly structured as [{"role": "user", "parts": [{"text": "Your prompt"}]}]. The TypeError indicated an internal type conversion error within the library, where an already-processed Content object was being passed to an internal function expecting raw data for conversion.

The ImportError then surfaced when attempting to explicitly use Content and Part types (from google.generativeai.types import Content, Part) to bypass the TypeError. This suggests a deeper problem with the actual installed library files or Python's ability to load them correctly, rather than just runtime behavior.


Steps to Reproduce:

  1. Create a clean virtual environment:
    python -m venv flaky_detector_venv
  2. Activate the virtual environment:
    .\flaky_detector_venv\Scripts\activate
  3. Create a requirements.txt file with the following content:
    google-generativeai~=0.8.0
    pymysql~=1.1.0
    pandas~=2.2.2
    numpy~=1.26.4
    pillow~=11.2.1
    
  4. Install dependencies from requirements.txt:
    pip install -r requirements.txt
  5. Verify google-generativeai version:
    pip show google-generativeai
    (Expected output confirms Version 0.8.5)
  6. Create a minimal Python script named test_gemini.py with the following content:
    import os
    import google.generativeai as genai
    import logging
    from google.generativeai.types import Content, Part # This line causes the ImportError
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
    
    def run_test():
        try:
            api_key = os.getenv("GEMINI_API_KEY")
            if not api_key:
                logging.error("GEMINI_API_KEY environment variable not set. Please set it.")
                return
    
            genai.configure(api_key=api_key)
    
            model = genai.GenerativeModel(model_name="gemini-1.5-flash-latest")
            chat_session = model.start_chat()
    
            prompt = "Hello, what is your purpose?"
            # Attempting with explicit types after prior TypeError issues:
            messages = [Content(role="user", parts=[Part(text=prompt)])]
    
            logging.info("Attempting to send message to Gemini...")
            response = chat_session.send_message(messages)
            logging.info(f"Received response from Gemini: {response.text}")
    
        except Exception as e:
            logging.error(f"An error occurred: {e}", exc_info=True)
    
    if __name__ == "__main__":
        run_test()
  7. Run the test_gemini.py script:
    python .\test_gemini.py

Full Traceback:

Traceback (most recent call last):
File "D:\agent\v3\test_gemini.py", line 4, in <module>
from google.generativeai.types import Content, Part # Import Content and Part
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: cannot import name 'Content' from 'google.generativeai.types' (D:\agent\flaky_detector_venv\Lib\site-packages\google\generativeai\types_init_.py)

(Note: Prior to this ImportError, when attempting chat_session.send_message([{"role": "user", "parts": [{"text": prompt}]}]), the script consistently failed with a TypeError traceback similar to this example:)
TypeError: Could not create Blob, expected Blob, dict or an Image type(PIL.Image.Image or IPython.display.Image).
Got a: <class 'google.ai.generativelanguage_v1beta.types.content.Content'>
Value: parts {
text: "Hello, what is your purpose?"
}
role: "user"
Traceback (most recent call last):
File "D:\agent\v3\test_gemini.py", line 23, in run_test
response = chat_session.send_message(messages)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\agent\v3\flaky_detector_venv\Lib\site-packages\google\generativeai\generative_models.py", line 564, in send_message
content = content_types.to_content(content)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\agent\v3\flaky_detector_venv\Lib\site-packages\google\generativeai\types\content_types.py", line 296, in to_content
return protos.Content(parts=[to_part(part) for part in content])
^^^^^^^^^^^^^
File "D:\agent\v3\flaky_detector_venv\Lib\site-packages\google\generativeai\types\content_types.py", line 264, in to_part
return protos.Part(inline_data=to_blob(part))
^^^^^^^^^^^^^
File "D:\agent\v3\flaky_detector_venv\Lib\site-packages\google\generativeai\types\content_types.py", line 210, in to_blob
raise TypeError(

Actual vs expected behavior:

Actual Behavior:

The script consistently terminates with an ImportError on the line where Content and Part are imported.

Expected Behavior:

The test_gemini.py script should successfully import Content and Part, send a message to the Gemini API, and print the received response.

Any other information you'd like to share?

Troubleshooting Performed:

  1. Variations in send_message input format:

    • Attempted chat_session.send_message([prompt]).
    • Attempted chat_session.send_message([{"role": "user", "parts": [{"text": prompt}]}]) (consistently failed with TypeError: Could not create Blob...).
    • Attempted from google.generativeai.types import text_part (failed with ImportError as text_part was not found/available in earlier version).
    • Attempted from google.generativeai.types import Content, Part (currently failing with ImportError for Python 3.12.3).
  2. Aggressive Virtual Environment Management:

    • Multiple instances of complete deletion of the flaky_detector_venv directory.
    • Used pip cache purge to clear pip's package cache before reinstallations.
    • Recreated new virtual environments from scratch for each test.
    • Manually checked for and deleted __pycache__ folders in relevant directories.
  3. Dependency Installation and Verification:

    • Confirmed Pillow was installed and updated (initially identified as missing).
    • Ensured all required packages (pandas, numpy, pymysql) were installed via requirements.txt.
    • Upgraded google-generativeai through pip install --upgrade (from an initial 0.5.x to 0.8.5) and by updating requirements.txt to google-generativeai~=0.8.0.
    • Confirmed pip show google-generativeai consistently reports 0.8.5 in the active environment after each installation.
    • Confirmed other core dependencies (google-ai-generativelanguage, protobuf, grpcio) are at recent, compatible versions.
  4. Python Version Consideration:

    • The issue is observed with Python 3.12.3. It has been suggested to try Python 3.11.x to rule out compatibility issues specific to Python 3.12.3, but this step has not been fully completed yet by the user.

Additional Notes/Hypothesis:

The core contradiction between pip show google-generativeai (showing 0.8.5) and Python's inabilitty to import expected components (Content, Part) from google.generativeai.types is highly unusual. This points towards a potential issue with the package's distribution for Python 3.12.3 on Windows, or a deeper, less common environmental problem affecting how Python loads installed modules.

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