Skip to content

[PY] using Optional fields in pydantic schema raises an error with google_genai plugin #3502

@pavelgj

Description

@pavelgj

Describe the bug

Using the sample from getting started doc

class Recipe(BaseModel):
    title: str
    description: str
    prep_time: str
    cook_time: str
    servings: int
    ingredients: list[str]
    instructions: list[str]
    tips: Optional[list[str]]

# Generate structured recipe data using the same schema
result = await ai.generate(
    prompt=prompt,
    output_schema=Recipe,
)
Traceback (most recent call last):
  File ".../genkit-intro/lib/python3.13/site-packages/genkit/core/action/_action.py", line 519, in async_tracing_wrapper
    output = await afn(input, ctx)
             ^^^^^^^^^^^^^^^^^^^^^
  File ".../genkit-intro/lib/python3.13/site-packages/genkit/plugins/google_genai/models/gemini.py", line 683, in generate
    response = await self._generate(
               ^^^^^^^^^^^^^^^^^^^^^
        request_contents=request_contents, request_cfg=request_cfg, model_name=model_name
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File ".../genkit-intro/lib/python3.13/site-packages/genkit/plugins/google_genai/models/gemini.py", line 719, in _generate
    response = await self._client.aio.models.generate_content(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        model=model_name, contents=request_contents, config=request_cfg
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/models.py", line 8171, in generate_content
    response = await self._generate_content(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        model=model, contents=contents, config=parsed_config
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/models.py", line 6982, in _generate_content
    request_dict = _GenerateContentParameters_to_mldev(
        self._api_client, parameter_model
    )
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/models.py", line 852, in _GenerateContentParameters_to_mldev
    _GenerateContentConfig_to_mldev(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        api_client, getv(from_object, ['config']), to_object
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ),
    ^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/models.py", line 728, in _GenerateContentConfig_to_mldev
    t.t_schema(api_client, getv(from_object, ['response_schema'])),
    ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/_transformers.py", line 849, in t_schema
    process_schema(schema, client)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/_transformers.py", line 775, in process_schema
    properties[name] = _recurse(sub_schema)
                       ~~~~~~~~^^^^^^^^^^^^
  File ".../genkit-intro/lib/python3.13/site-packages/google/genai/_transformers.py", line 747, in _recurse
    if (ref := sub_schema.pop('$ref', None)) is not None:
               ^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'pop'

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpythonPython

Type

No type

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions