Skip to content

Fixing mypy errors in google gen ai provider and tests#67276

Merged
amoghrajesh merged 2 commits into
apache:mainfrom
astronomer:fixing-mypy-providers-google-and-more
May 21, 2026
Merged

Fixing mypy errors in google gen ai provider and tests#67276
amoghrajesh merged 2 commits into
apache:mainfrom
astronomer:fixing-mypy-providers-google-and-more

Conversation

@amoghrajesh
Copy link
Copy Markdown
Contributor

@amoghrajesh amoghrajesh commented May 21, 2026


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

Several mypy errors across three providers were failing CI type checks, see in https://github.com/apache/airflow/actions/runs/26211631196/job/77125309480?pr=67118

providers/google/tests/unit/google/cloud/hooks/test_gen_ai.py:79: error: Argument "contents" to "CreateCachedContentConfig" has incompatible type "list[Content]"; expected
  "Content | str | Image | File | Part | list[str | Image | File | Part] | list[Content | str | Image | File | Part | list[str | Image | File | Part]] | None"  [arg-type]
          contents=[
                   ^
  providers/google/tests/unit/google/cloud/hooks/test_gen_ai.py:79: note: "list" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
  providers/google/tests/unit/google/cloud/hooks/test_gen_ai.py:79: note: Consider using "Sequence" instead, which is covariant
  providers/amazon/src/airflow/providers/amazon/aws/executors/batch/batch_executor.py:434: error: Argument "key" to "BatchQueuedJob" has incompatible type "TaskInstanceKey | str"; expected
  "TaskInstanceKey | CallbackKey"  [arg-type]
                      key=key,
                          ^~~
  providers/google/tests/unit/google/cloud/operators/test_gen_ai.py:64: error: Argument "contents" to "CreateCachedContentConfig" has incompatible type "list[Content]"; expected
  "Content | str | Image | File | Part | list[str | Image | File | Part] | list[Content | str | Image | File | Part | list[str | Image | File | Part]] | None"  [arg-type]
          contents=[
                   ^
  providers/google/tests/unit/google/cloud/operators/test_gen_ai.py:64: note: "list" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
  providers/google/tests/unit/google/cloud/operators/test_gen_ai.py:64: note: Consider using "Sequence" instead, which is covariant
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:203: error: Argument "contents" to "CreateCachedContentConfig" has incompatible type "list[Content]"; expected
  "Content | str | Image | File | Part | list[str | Image | File | Part] | list[Content | str | Image | File | Part | list[str | Image | File | Part]] | None"  [arg-type]
          contents=[
                   ^
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:203: note: "list" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:203: note: Consider using "Sequence" instead, which is covariant
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:259: error: Argument "contents" to "GenAICountTokensOperator" has incompatible type "list[str]"; expected
  "Content | str | Image | File | Part | list[str | Image | File | Part] | list[Content | str | Image | File | Part | list[str | Image | File | Part]] | Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict] | list[Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict]]"
   [arg-type]
              contents=CONTENTS,
                       ^~~~~~~~
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:269: error: Argument "contents" to "GenAIGenerateContentOperator" has incompatible type "list[str]"; expected
  "Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict] | list[Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict]]"
   [arg-type]
              contents=CONTENTS,
                       ^~~~~~~~
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:269: note: "list" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:269: note: Consider using "Sequence" instead, which is covariant
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:327: error: Argument "contents" to "GenAIGenerateContentOperator" has incompatible type "list[str]"; expected
  "Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict] | list[Content | ContentDict | str | Image | File | FileDict | Part | PartDict | list[str | Image | File | FileDict | Part | PartDict]]"
   [arg-type]
              contents=["What are the papers about?"],
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:327: note: "list" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
  providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py:327: note: Consider using "Sequence" instead, which is covariant

Fix is to:

  • add | list[str] to the contents parameter of GenAIGenerateContentOperator and GenAICountTokensOperator, aligning them with GenAIGenerateEmbeddingsOperator.
  • Three gen_ai test files: extract the [Content(...)] literal into a _CACHED_CONTENTS: Sequence[Content] typed variable before passing it to CreateCachedContentConfig, fixing the list invariance error per mypy's own recommendation.

The batch executor execute_async key type mismatch (TaskInstanceKey | str vs TaskInstanceKey | CallbackKey) is tracked separately in PR #67269.


  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

@amoghrajesh amoghrajesh requested a review from shahar1 as a code owner May 21, 2026 08:57
@boring-cyborg boring-cyborg Bot added area:providers provider:google Google (including GCP) related issues labels May 21, 2026
@amoghrajesh amoghrajesh changed the title Fixing mypy errors in google gen ai, and batch executor providers Fixing mypy errors in google gen ai provider and tests May 21, 2026
@amoghrajesh amoghrajesh self-assigned this May 21, 2026
@amoghrajesh amoghrajesh requested review from Lee-W, eladkal and potiuk May 21, 2026 08:58
@amoghrajesh
Copy link
Copy Markdown
Contributor Author

Failing mypy is unrelated and Anish has a fix for it in #67268

@amoghrajesh amoghrajesh merged commit b13d796 into apache:main May 21, 2026
86 of 89 checks passed
@amoghrajesh amoghrajesh deleted the fixing-mypy-providers-google-and-more branch May 21, 2026 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providers provider:google Google (including GCP) related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants