db033844d4
- Aggiunto helper callGemini($url, $payload, $timeout): * Fino a 4 tentativi su 429 / 503 * Legge Retry-After header dalla risposta HTTP di Google * Legge retryDelay dal corpo JSON di errore (es. '10s', '30s') * Backoff default: 2s, 4s, 6s (sovrascitto da Google se specificato) - geminiReadExpiry(), geminiChat(), geminiIdentifyProduct(): rimosso curl diretto senza retry, ora usano callGemini() - generateRecipe(): rimosso vecchio loop manuale (3 tentativi, 2s/4s fissi), ora usa callGemini() che rispetta i delay suggeriti da Google - In caso di 429 finale restituisce il messaggio di errore da Google (non generico)