Automatic function calling rejects `datetime` and `UUID` arguments

Ouverte
#3,331 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@Venkaiahbabuneelam y travaille déjà.

Depuis le 11/11/2026.

  • #3333 par @copybara-service — ouverte

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
75/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python

Piste de recherche

Start by reading convert_if_exist_pydantic_model, which the issue identifies as the point rejecting JSON strings for datetime and UUID, and compare its validation with the pydantic schema generation. Check the automatic function calling tests for argument conversion and add coverage for both types. Done when valid schema-compatible strings reach the tool as converted arguments and the tests pass.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

priority: p2 type: bug
Environment details
  • Programming language: Python
  • OS: macOS
  • Language runtime version: Python 3.12.13
  • Package version: google-genai 3.0.0 (same on 2.24.0 and main)
Steps to reproduce

With automatic function calling, a tool that takes a datetime or a UUID never runs. The declaration tells the model to send a date-time (or uuid) string, the model does, and google-genai rejects it.

This fakes the Gemini API, so no key is needed:

import datetime, json, uuid

import httpx
from google import genai
from google.genai import types

ran, sent = [], []


def schedule(when: datetime.datetime, job_id: uuid.UUID) -> str:
    """Schedule a job."""
    ran.append(True)
    return "ok"


def fake_gemini(request):
    sent.append(json.loads(request.content))
    args = {"when": "2026-11-10T09:30:00Z", "job_id": "12345678-1234-5678-1234-567812345678"}
    part = {"functionCall": {"name": "schedule", "args": args}} if len(sent) == 1 else {"text": "done"}
    return httpx.Response(200, json={"candidates": [{"content": {"role": "model", "parts": [part]}}]})


client = genai.Client(
    api_key="fake",
    http_options=types.HttpOptions(httpx_client=httpx.Client(transport=httpx.MockTransport(fake_gemini))),
)
client.models.generate_content(
    model="gemini-2.5-flash", contents="Schedule it.", config=types.GenerateContentConfig(tools=[schedule])
)

print("declared:", sent[0]["tools"][0]["functionDeclarations"][0]["parameters_json_schema"]["properties"])
print("ran:", bool(ran))
print("sent back:", sent[1]["contents"][-1]["parts"][0]["functionResponse"]["response"])

uv run --no-project --python 3.12 --with "google-genai[httpx]==3.0.0" python repro.py prints:

declared: {'when': {'format': 'date-time', 'type': 'string'}, 'job_id': {'format': 'uuid', 'type': 'string'}}
ran: False
sent back: {'error': "Failed to parse parameter when for function schedule from function call part because function call argument value 2026-11-10T09:30:00Z is not compatible with parameter annotation <class 'datetime.datetime'>."}

job_id fails the same way once when is gone. The call still completes, so nothing says the tool never ran.

The cause: the schema comes from pydantic, but convert_if_exist_pydantic_model ends with isinstance(value, annotation), and a JSON string is never a datetime or UUID. Validating with pydantic too, e.g. pydantic.TypeAdapter(annotation).validate_python(value), would make them agree.

Related, for other types: #2013 (set[str] and other generics, fix in #3295) and #2199 (IntEnum, fix in #3288). From their diffs, neither PR covers datetime or UUID.

Thanks!

Langage dominant
Python
Étoiles
4.1k
Forks
1.1k
Merge moyen
1 j 20 h
PR mergées (30 j)
90

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de googleapis/python-genai

Toutes les issues de googleapis/python-genai

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.