PyPI / google-genai / 2.32.0

google-genai 2.32.0

Source
https://github.com/googleapis/python-genai
Artifact scanned
google_genai-2.32.0-py3-none-any.whl (wheel · 1.2 MB · SHA-256 cf71a629df18…)
Compared with
google_genai-2.31.0-py3-none-any.whl (0 signals introduced since)
Files
594 scanned, 5 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 16 info
Scan time
9.1 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 13 of 13 warn and critical signals; 13 demoted to info.
Disclude version
4.3.0
Scanned (UTC)
2026-10-23 09:39

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info warn → info by review dynamic-attribute google/genai/__init__.py:51:5

    reach-by-name through `globals` (ast pass, confidence 0.60)

        module = importlib.import_module(f'.{name}', __name__)
        globals()[name] = module
        return module
      raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
    likely benign LLM, confidence 0.93 Lazy submodule loader via module-level __getattr__ in the google.genai package.
    Reasoning

    This is the standard PEP 562 module __getattr__ lazy-loading pattern: it imports a submodule by name relative to the package and caches it in globals. The name is constrained to the package's own submodules, so there is no attacker-controlled dynamic execution.

  2. info warn → info by review frame-introspection google/genai/_replay_api_client.py:211:19

    `inspect.currentframe` — call-stack frame introspection (ast pass, confidence 0.70)

      """Prints the current file path and line number."""
      current_frame = inspect.currentframe()
      if (
          current_frame is not None
    likely benign LLM, confidence 0.93 Debug helper that reads the current frame to report file and line number.
    Reasoning

    inspect.currentframe is used to print the current file path and line number for debugging/replay output. This is ordinary logging-style introspection with no network, execution, or concealment.

  3. info warn → info by review frame-introspection google/genai/tests/common/test_common.py:53:17

    `inspect.currentframe` — call-stack frame introspection (ast pass, confidence 0.70)

      with warnings.catch_warnings(record=True) as captured_warnings:
        call_line = inspect.currentframe().f_lineno + 1
        func()
    likely benign LLM, confidence 0.93 Test utility reading the frame's line number to validate warning call sites.
    Reasoning

    Test helper uses the caller's frame line number to check warning locations in captured warnings. This is standard test tooling.

  4. info warn → info by review encoding-hex google/genai/tests/models/test_compute_tokens.py:84:69

    16 consecutive `\xNN` escapes (entropy 3.8 bits/byte) (raw pass, confidence 0.65)

            decoded_tokens
            == b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe6\x9d\xa1unicode\xe6\xb5\x8b\xe8\xaf\x95\xf0\x9f\xa4\xaa\xe2\x9d\xa4\xe2\x98\x85'
        )
        assert decoded_tokens.decode('utf-8') == _UNICODE_STRING
    likely benign LLM, confidence 0.92 UTF-8 byte literal in a token-computation test that round-trips a unicode string.
    Reasoning

    The byte literal is the UTF-8 encoding of a Chinese/English/emoji test string, as the following assertion decodes it back to _UNICODE_STRING. It is a deliberate multi-byte unicode test fixture, not obfuscated code.

  5. info warn → info by review payload-bytes-literal google/genai/tests/transformers/test_bytes.py:8:5

    concatenated bytes literal contains 35 `\xNN` escapes (92% of content) — binary payload shape (ast pass, confidence 0.85)

    _RAW_BYTES = (
        b'\xfb\xf6\x9bq\xd7\x9f\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2\xdb\xaf\xc3\x1c\xb3\x00\x10\x83\x10Q\x87'
        b' \x92\x8b0\xd3\x8fA\x14\x93QU\x97a\x9d5\xdb~9\xeb\xbf='
    )
    likely benign LLM, confidence 0.85 Binary test fixture of raw bytes for testing bytes transformers.
    Reasoning

    The byte literal is a fixed test vector used to exercise bytes transformation, which is the purpose of a bytes-handling test. Binary-looking content in a test fixture is expected, and the file is a test module within the SDK.

  6. info warn → info by review payload-bytes-literal google/genai/tests/types/test_bytes_internal.py:36:5

    concatenated bytes literal contains 35 `\xNN` escapes (92% of content) — binary payload shape (ast pass, confidence 0.85)

    _RAW_BYTES = (
        b'\xfb\xf6\x9bq\xd7\x9f\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2\xdb\xaf\xc3\x1c\xb3\x00\x10\x83\x10Q\x87'
        b' \x92\x8b0\xd3\x8fA\x14\x93QU\x97a\x9d5\xdb~9\xeb\xbf='
    )
    likely benign LLM, confidence 0.85 Binary test fixture for internal bytes type tests.
    Reasoning

    Same binary test vector as the other bytes tests, used to verify bytes type handling. No execution or decoding of hidden payloads occurs in the snippet.

  7. info warn → info by review payload-bytes-literal google/genai/tests/types/test_bytes_type.py:30:5

    concatenated bytes literal contains 35 `\xNN` escapes (92% of content) — binary payload shape (ast pass, confidence 0.85)

    _RAW_BYTES = (
        b'\xfb\xf6\x9bq\xd7\x9f\x82\x18\xa3\x92Y\xa7\xa2\x9a\xab\xb2\xdb\xaf\xc3\x1c\xb3\x00\x10\x83\x10Q\x87'
        b' \x92\x8b0\xd3\x8fA\x14\x93QU\x97a\x9d5\xdb~9\xeb\xbf='
    )
    likely benign LLM, confidence 0.85 Binary test fixture for bytes type tests.
    Reasoning

    Identical binary test vector used for bytes type tests in the SDK. It is test data with no payload-delivery behavior shown.

  8. info warn → info by review dynamic-attribute google/genai/types.py:83:7

    reach-by-name through `globals` (ast pass, confidence 0.60)

        except ImportError:
          globals()[name] = None
          return None
        globals()[name] = ClientSession
    likely benign LLM, confidence 0.93 Lazy optional import of MCP ClientSession via module globals caching.
    Reasoning

    This is the lazy-import __getattr__ pattern: optional MCP symbols are imported on demand and cached in globals, setting None on ImportError. It is a standard optional-dependency idiom.

  9. info warn → info by review dynamic-attribute google/genai/types.py:85:5

    reach-by-name through `globals` (ast pass, confidence 0.60)

          return None
        globals()[name] = ClientSession
        return ClientSession
      if name == 'McpCallToolResult':
    likely benign LLM, confidence 0.93 Caches lazily imported ClientSession in module globals.
    Reasoning

    Caches the lazily imported ClientSession into module globals and returns it, part of the standard lazy optional-dependency pattern for MCP types.

  10. info warn → info by review dynamic-attribute google/genai/types.py:91:7

    reach-by-name through `globals` (ast pass, confidence 0.60)

        except ImportError:
          globals()[name] = None
          return None
        globals()[name] = CallToolResult
    likely benign LLM, confidence 0.93 Lazy optional import of MCP CallToolResult via module globals.
    Reasoning

    Same optional MCP import idiom: lazily imports CallToolResult and caches it in globals, with None fallback on ImportError.

  11. info warn → info by review dynamic-attribute google/genai/types.py:93:5

    reach-by-name through `globals` (ast pass, confidence 0.60)

          return None
        globals()[name] = CallToolResult
        return CallToolResult
      if name == 'mcp_types':
    likely benign LLM, confidence 0.93 Caches lazily imported CallToolResult in module globals.
    Reasoning

    Caches the lazily loaded CallToolResult in module globals and returns it, consistent with the optional-dependency pattern.

  12. info warn → info by review dynamic-attribute google/genai/types.py:99:7

    reach-by-name through `globals` (ast pass, confidence 0.60)

        except ImportError:
          globals()[name] = None
          return None
        globals()[name] = mcp_types
    likely benign LLM, confidence 0.93 Lazy optional import of mcp_types cached in globals.
    Reasoning

    Lazy import of the mcp_types module with None fallback, a standard optional-dependency idiom in this SDK.

  13. info warn → info by review dynamic-attribute google/genai/types.py:101:5

    reach-by-name through `globals` (ast pass, confidence 0.60)

          return None
        globals()[name] = mcp_types
        return mcp_types
      raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
    likely benign LLM, confidence 0.93 Caches lazily imported mcp_types module and falls through to AttributeError.
    Reasoning

    Caches and returns the lazily imported mcp_types module, then raises AttributeError for unknown names. Standard module __getattr__ behavior with no malicious indicators.

  14. info high-complexity google/genai/types.py:829:6

    compression ratio 0.881 is >2σ above file mean 0.681 (raw pass, confidence 0.50)

      REGEX_CONTAINS = 'REGEX_CONTAINS'
      """Equivalent to [GoogleSQL](https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#regexp_contains) `REGEX_CONTAINS(target, expression)`."""
      PARTIAL_MATCH = 'PARTIAL_MATCH'
  15. info high-complexity google/genai/types.py:15230:22

    compression ratio 0.824 is >2σ above file mean 0.681 (raw pass, confidence 0.50)

          default=None,
          description="""Required. BigQuery URI to a table, up to 2000 characters long. Accepted forms: * BigQuery path. For example: `bq://projectId.bqDatasetId.bqTableId`.""",
      )
  16. info high-complexity google/genai/types.py:15241:6

    compression ratio 0.824 is >2σ above file mean 0.681 (raw pass, confidence 0.50)

      input_uri: Optional[str]
      """Required. BigQuery URI to a table, up to 2000 characters long. Accepted forms: * BigQuery path. For example: `bq://projectId.bqDatasetId.bqTableId`."""

Reproduce This Scan

Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.

cargo install disclude --version 4.3.0
curl -fsSL -o google_genai-2.32.0-py3-none-any.whl https://files.pythonhosted.org/packages/97/70/964baf520f36019ad4e4ce316e6dc943189f3b398654ff8277dadb764f6d/google_genai-2.32.0-py3-none-any.whl
printf '%s  %s\n' cf71a629df18510cd837cacb4843b38a2db6834c69eb93963a0d8ee4d657b725 google_genai-2.32.0-py3-none-any.whl | shasum -a 256 -c -
unzip -q google_genai-2.32.0-py3-none-any.whl -d pkg
disclude scan --untrusted --severity info pkg