Interactions retries ignore the documented `initial_delay` and `max_delay` defaults

Aberta Para iniciantes
#3,317 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@Sun-Wukhan já está trabalhando nisso.

Desde 8/11/2026.

  • #3318 de @Sun-Wukhan — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
68/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
python

Direção de pesquisa

Leia types.py em torno dos valores padrão de HttpRetryOptions e _gaos/google_genai.py em torno de _DEFAULT_INITIAL_INTERVAL_MS; em seguida, compare-os com os valores padrão de novas tentativas em _api_client. A issue relata atrasos de novas tentativas e jitter diferentes para client.interactions e client.models; decida se Interactions deve usar os valores padrão compartilhados e verifique os cronogramas de novas tentativas com a reprodução sem rede fornecida.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

client.interactions backs off half as long as client.models when initial_delay and max_delay are left unset, so the same HttpRetryOptions give two different retry schedules in one client.

Repro at afb10e8 (3.0.0), with no network and no real key:

import time, httpx2
from google import genai
from google.genai import types

stamps = []
def handler(request):
    stamps.append(time.monotonic())
    return httpx2.Response(503, json={"error": {"code": 503, "message": "unavailable", "status": "UNAVAILABLE"}})

def gaps():
    return [round(b - a, 1) for a, b in zip(stamps, stamps[1:])]

retry = types.HttpRetryOptions(attempts=4, jitter=0)  # jitter=0 keeps the gaps exact; delays left unset
client = genai.Client(
    api_key="test",
    http_options=types.HttpOptions(
        retry_options=retry, httpx_client=httpx2.Client(transport=httpx2.MockTransport(handler))
    ),
)
for name, call in [
    ("models.generate_content", lambda: client.models.generate_content(model="gemini-3.8-flash", contents="hi")),
    ("interactions.create", lambda: client.interactions.create(model="gemini-3.8-flash", input="hi")),
]:
    stamps.clear()
    try:
        call()
    except Exception as e:
        print(f"{name}: {len(stamps)} requests, gaps {gaps()} s, {type(e).__name__}")
$ python repro.py
models.generate_content: 4 requests, gaps [1.0, 2.0, 4.0] s, ServerError
interactions.create: 4 requests, gaps [0.5, 1.0, 2.0] s, InternalServerError

HttpRetryOptions documents initial_delay as "If not specified, default to 1.0 second" and max_delay as "default to 60.0 seconds" (types.py:2671-2678). The comment above _DEFAULT_INITIAL_INTERVAL_MS in _gaos/google_genai.py calls 0.5 s and 8 s the default, so one of the two contracts is wrong. An unset jitter differs too: Interactions takes up to 25% off each delay, while client.models adds up to 1 s. #3263 already moved the unset attempts onto _api_client._RETRY_ATTEMPTS. I checked the sync client only.

I'd take all three from _api_client (_RETRY_INITIAL_DELAY, _RETRY_MAX_DELAY, _RETRY_JITTER) in the same way. Or are 0.5 s and 8 s meant to stay specific to Interactions?

Linguagem predominante
Python
Estrelas
4.1k
Forks
1.1k
Merge médio
1d 20h
PRs com merge (30d)
99

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de googleapis/python-genai

Todas as issues de googleapis/python-genai

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.