Depuis avril 2026, Gemini 2.0 Flash présente un bug intermittent : le grounding google_search renvoie des résultats vides ou refuse de se déclencher. La régression du grounding d'image de mars 2026 a aggravé le problème. Flash n'invoque pas la recherche de manière fiable, surtout lorsque des outils externes sont également enregistrés. Ce tutoriel construit une couche de détection et de repli pour que votre agent obtienne toujours des résultats de recherche.
Prérequis
- Identifiants Google AI Studio ou Vertex AI
- Clé API Scavio
- Python 3.8+
Parcours
Étape 1: Appeler Gemini avec le grounding google_search
Configurer l'appel Gemini standard avec le grounding activé.
import google.generativeai as genai
import os
genai.configure(api_key=os.environ['GEMINI_API_KEY'])
model = genai.GenerativeModel('gemini-2.0-flash',
tools=[genai.Tool(google_search=genai.GoogleSearch())])
def gemini_search(query):
response = model.generate_content(query)
return responseÉtape 2: Détecter les résultats de recherche vides ou échoués
Vérifier si Gemini a effectué un appel de grounding de recherche. Le bug d'avril 2026 renvoie des candidats sans métadonnées de grounding.
def search_failed(response):
# No grounding metadata = search did not trigger
if not hasattr(response, 'candidates') or not response.candidates:
return True
candidate = response.candidates[0]
grounding = getattr(candidate, 'grounding_metadata', None)
if not grounding or not grounding.grounding_chunks:
return True
# Empty chunks = search triggered but returned nothing
return len(grounding.grounding_chunks) == 0Étape 3: Rediriger vers Scavio en cas d'échec
Lorsque la recherche Gemini échoue, extraire la requête et appeler Scavio.
import requests
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search_with_fallback(query):
response = gemini_search(query)
if search_failed(response):
results = requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'google', 'query': query}).json()
return {'source': 'scavio', 'results': results}
return {'source': 'gemini', 'response': response}Étape 4: Enregistrer les taux d'échec pour le suivi
Suivre la fréquence des échecs de recherche Gemini pour savoir quand Google corrige le bug.
import json, datetime
def log_search_event(query, source, failed):
with open('search_fallback_log.jsonl', 'a') as f:
f.write(json.dumps({
'ts': datetime.datetime.now().isoformat(),
'query': query, 'source': source, 'gemini_failed': failed
}) + '\n')Exemple Python
import os, requests
import google.generativeai as genai
genai.configure(api_key=os.environ['GEMINI_API_KEY'])
model = genai.GenerativeModel('gemini-2.0-flash',
tools=[genai.Tool(google_search=genai.GoogleSearch())])
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search(query):
resp = model.generate_content(query)
grounding = getattr(resp.candidates[0], 'grounding_metadata', None) if resp.candidates else None
if not grounding or not grounding.grounding_chunks:
return requests.post('https://api.scavio.dev/api/v1/search',
headers=H, json={'platform': 'google', 'query': query}).json()
return respExemple JavaScript
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query: userQuery})
});
const fallbackResults = await res.json();Sortie attendue
Agent that always returns search results: Gemini grounding when it works, Scavio API when Gemini fails. JSONL log of failure rates for monitoring.