O pacote google-cloud-aiplatform inclui o SDK da Agent Platform para Python
e a biblioteca de cliente da Agent Platform para Python. Esta página aborda as
seguintes categorias de mudanças no pacote google-cloud-aiplatform:
Os módulos de IA generativa foram movidos para o SDK de IA generativa do Google: os seguintes módulos de IA generativa no pacote
vertexaiforam descontinuados e migrados para o SDK de IA generativa do Google (google-genai):vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
Para saber como migrar os módulos descontinuados para o SDK de IA generativa do Google, consulte Como migrar módulos de IA generativa para o SDK de IA generativa do Google.
Reestruturação da superfície do agente: as seguintes mudanças foram feitas nos módulos
agentplatformdegoogle-cloud-aiplatform:- Renomeações
- Promoções para o nível superior
- Remoção do inicializador global
Para saber como migrar para a nova estrutura do SDK, consulte Reestruturação do SDK da Agent Platform.
Desacoplamento de
agentplatform: ogoogle-cloud-agentplatformagora é uma distribuição leve independente e a instalação recomendada para cargas de trabalho de agentes. Se você só cria agentes, instalegoogle-cloud-agentplatform, que não contém módulos de IA generativa. Os módulos doagentplatformabrangem as integrações comuns, como[adk],[a2a],[agent_engines],[langchain],[ag2],[llama_index],[evaluation],[bigquery],[live]e[all].
O que não será afetado
A superfície clássica de machine learning (conjuntos de dados, treinamento, modelos, previsão, rastreamento, pipelines) é totalmente compatível, não é afetada pelas mudanças da versão 2.0.1 e não tem equivalente no SDK de IA generativa do Google. Ainda é possível acessar a avaliação, o Agent Runtime, os comandos e as habilidades instalando o google-cloud-aiplatform. google-cloud-aiplatform e google-genai coexistem em um ambiente, e google-genai agora é uma dependência rígida de google-cloud-aiplatform:
import agentplatform
client = agentplatform.Client(project="my-project", location="global")
# client.evals client.prompts
# client.prompt_optimizer client.datasets client.skills
vertexai.batch_prediction não foi descontinuado, mas existe um equivalente do SDK de IA Generativa do Google, que é a ferramenta recomendada.
Como mover módulos de IA generativa para o SDK de IA generativa do Google
Se você usa os módulos de IA generativa no pacote google-cloud-aiplatform, siga estas recomendações para migrar para o SDK de IA Generativa do Google (google-genai):
Defina
google-cloud-aiplatform < 2.0.0para que as mudanças de dependência não relacionadas não possam remover os módulos abaixo de você.Pesquise os módulos descontinuados no seu código:
vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
Se você importar algum dos módulos do Python afetados, vai receber o seguinte aviso de descontinuação:
UserWarning: This feature is deprecated as of June 24, 2025 and will be removed on June 24, 2026. For details, see https://cloud.google.com/vertex-ai/generative-ai/docs/deprecations/genai-vertexai-sdk.Execute o pacote de testes com
-W error::UserWarningpara identificar as importações que você perdeu.Substitua
vertexai.init(...)por umgenai.Client(enterprise=True, project=..., location=...)explícito. Mantenhavertexai.init()se você também usa a superfície clássica de machine learning.Antes
# pip install google-cloud-aiplatform import vertexai from vertexai.generative_models import GenerativeModel vertexai.init(project="my-project", location="us-central1") # Model identity and config are bound at construction time. model = GenerativeModel("gemini-2.5-flash")Depois
# pip install google-genai from google import genai from google.genai import types client = genai.Client( enterprise=True, project="my-project", location="global", )Ou configure no ambiente:
export GOOGLE_GENAI_USE_ENTERPRISE=true export GOOGLE_CLOUD_PROJECT=my-project export GOOGLE_CLOUD_LOCATION=globalfrom google import genai client = genai.Client()Principais considerações:
- O estado global se torna um cliente explícito.
vertexai.init()configurou todo o processo;genai.Client()é um objeto que você transmite. Com ogenai.Client(), é possível usar dois projetos ou regiões em um processo. enterprise=Trueé obrigatório. Se você omitir, o cliente vai segmentar silenciosamente a API Gemini Developer, que vai falhar nas credenciais padrão do aplicativo ou exigir uma chave de API.- O nome do modelo passa da construção para cada chamada. Não há um objeto de modelo de vinculação única.
model=é um argumento de palavra-chave obrigatório em cada chamadaclient.models.*. - A autenticação não foi alterada. O Application Default Credentials ainda se aplica, e o
credentials=aceita umgoogle.auth.credentials.Credentialsnos dois SDKs. vertexai.init()também tinha configurações não generativas, comostaging_bucket,experiment,encryption_spec_key_name,service_account,network. Ogenai.Clientnão tem equivalente para eles.- A ortografia mais recente de
enterprise=Trueé aceita a partir dogoogle-genai2.20.0, mas a versão mais antiga devertexai=Truefunciona em todas as versões e é a opção mais segura.
- O estado global se torna um cliente explícito.
Audite seu código para identificar mudanças silenciosas em que o comportamento diverge sem um erro. Eles são compilados e executados, mas mudam de significado.
Comportamento Antes Depois response.textem uma resposta bloqueada ou vaziaGera ValueErrorRetorna Noneresponse.textcom vários candidatosGera ValueErrorRegistra um aviso e retorna o primeiro candidato. Segmentação de clientes vertexai.init()da Agent Platform implícitaOmitir vertexai=Truesegmenta silenciosamente a API Gemini DeveloperEmbeddings auto_truncateO valor padrão é True.Não definido; o padrão do servidor é aplicado Uma função Python transmitida como uma ferramenta Sem suporte Executado automaticamente pelo SDK system_instructionVinculado uma vez ao modelo Precisa ser transmitido em todas as chamadas A mudança
response.texté a primeira a ser pesquisada. Cadatry/except ValueErrorenvolvido em.textse torna um código morto, e cada.textdesprotegido agora pode gerarNoneem que umstrera retornado anteriormente:if response.text is None: print( "blocked or empty:", response.prompt_feedback, response.candidates[0].finish_reason if response.candidates else None, )Mantenha o
google-cloud-aiplatforminstalado se você usa avaliação, Agent Runtime, comandos, conjuntos de dados, habilidades e toda a superfície clássica de machine learning.Mude as chamadas para as novas versões. Comece com as renomeações mecânicas e depois continue com a consolidação de
config=.
Mudanças nas chamadas baseadas em tarefas
Confira as chamadas alteradas com base na tarefa:
- Geração de texto
- Geração de streaming
- Geração assíncrona
- Sessões de chat
- Configuração, configurações de segurança e instruções do sistema
- Entrada multimodal
- Chamada de função e embasamento
- Embeddings
- Contagem de tokens
- Armazenamento em cache de contexto
- Predição em lote e ajuste
Geração de texto
Para tarefas de geração de texto, todos os argumentos são somente de palavra-chave. As chamadas posicionais geram TypeError.
Antes
model = GenerativeModel("gemini-2.5-flash")
response = model.generate_content("Why is the sky blue?")
print(response.text)
Depois
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
)
print(response.text)
Geração de streaming
Para tarefas de geração de streaming, a flag stream=True é removida. O streaming agora é um método separado que retorna Iterator[types.GenerateContentResponse]. Use if chunk.text: para verificar antes de acessar o texto, porque cada bloco é um objeto de resposta completo, e o atributo .text às vezes pode ser None.
Antes
stream = model.generate_content("Tell me a story in 300 words.", stream=True)
for chunk in stream:
print(chunk.text, end="")
Depois
for chunk in client.models.generate_content_stream(
model="gemini-3.5-flash",
contents="Tell me a story in 300 words.",
):
if chunk.text:
print(chunk.text, end="")
Geração assíncrona
Para tarefas de geração assíncronas, o sufixo do nome do método _async foi removido. Cada chamada assíncrona fica em client.aio.<module> com o mesmo nome de método da contraparte síncrona. Feche o cliente com await client.aio.aclose() ou use async with genai.Client(...).aio as aclient:.
Antes
response = await model.generate_content_async("Why is the sky blue?")
async_stream = await model.generate_content_async("Why is the sky blue?", stream=True)
async for chunk in async_stream:
print(chunk.text, end="")
Depois
response = await client.aio.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
)
# Note the `await` in front of the async iterator.
async for chunk in await client.aio.models.generate_content_stream(
model="gemini-3.5-flash",
contents="Tell me a story in 300 words.",
):
print(chunk.text, end="")
Sessões de chat
Observe as seguintes mudanças nas tarefas de sessões de chat:
- As conversas são criadas pelo cliente, não por um objeto de modelo.
chat.history(propriedade) se tornachat.get_history()(método). O novo método usacurated: bool = False. TransmitirTrueretorna apenas as rodadas mantidas, que não têm um equivalente antigo.client.aio.chats.create(...)retorna umAsyncChatdiretamente. Somentesend_messageesend_message_streamsão aguardados.- As opções por turno são agrupadas em um argumento:
send_message(message, config=types.GenerateContentConfig(...)). O primeiro parâmetro também foi renomeado decontentparamessage. start_chat(response_validation=False)é um novo método sem equivalente nas versões anteriores.
Antes
model = GenerativeModel("gemini-2.5-flash")
chat = model.start_chat()
print(chat.send_message("Tell me a story").text)
for content in chat.history:
print(content.role, content.parts)
Depois
chat = client.chats.create(model="gemini-3.5-flash")
print(chat.send_message("Tell me a story").text)
for content in chat.get_history():
print(content.role, content.parts)
Configuração, configurações de segurança e instruções do sistema
Observe as seguintes mudanças nas tarefas de configuração, configurações de segurança e instruções do sistema:
Os argumentos a seguir são recolhidos em um
config=como campos deGenerateContentConfig:generation_configsafety_settingstoolstool_configlabelssystem_instruction
Um
dictsimples funciona em qualquer lugar em que um tipo de configuração funcione.system_instructionpassa do construtor do modelo para a configuração por chamada. Na versão anterior do SDK,system_instructionera definido uma vez ao criarGenerativeModel. Agora,system_instructionprecisa ser transmitido em todas as chamadas ou incluído emclient.chats.create(config=...).As configurações de segurança mudam de
dictparalist. Por exemplo,[types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()].Os tipos enumerados são aceitos como strings simples e convertidos.
Os nomes dos campos escalares não são alterados:
temperature,top_p,top_k,candidate_count,max_output_tokens,stop_sequences,presence_penalty,frequency_penalty,seed,response_mime_type,response_schema,response_logprobs,logprobs.Os novos campos sem equivalente antigo incluem
thinking_config,cached_content,automatic_function_calling,http_options,media_resolutionespeech_config.
Antes
from vertexai.generative_models import (
GenerativeModel, GenerationConfig, HarmCategory, HarmBlockThreshold,
)
model = GenerativeModel(
"gemini-2.5-flash",
system_instruction=["Talk like a pirate.", "Don't use rude words."],
)
response = model.generate_content(
contents="Why is the sky blue?",
generation_config=GenerationConfig(temperature=0, top_p=0.95, max_output_tokens=100),
safety_settings={
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
)
Depois
from google.genai import types
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
config=types.GenerateContentConfig(
system_instruction="Talk like a pirate. Don't use rude words.",
temperature=0,
top_p=0.95,
max_output_tokens=100,
safety_settings=[
types.SafetySetting(
category="HARM_CATEGORY_HATE_SPEECH",
threshold="BLOCK_MEDIUM_AND_ABOVE",
),
types.SafetySetting(
category=types.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH,
),
],
),
)
entrada multimodal
Observe as seguintes mudanças para tarefas de entrada multimodal:
| Antigo | Novo |
|---|---|
Part.from_uri(uri, mime_type), posicional permitido |
Part.from_uri(file_uri=, mime_type=), somente palavra-chave, parâmetro renomeado |
Part.from_data(data, mime_type) |
Part.from_bytes(data=, mime_type=), método renomeado |
Part.from_text(text) |
Part.from_text(text=), somente palavras-chave |
Image.load_from_file(path) |
Não há equivalente. Abra o arquivo e use Part.from_bytes. |
mime_typeé opcional emtypes.Part.from_uri()(inferido do lado do servidor), mas continua obrigatório emtypes.Part.from_bytes().O
client.files.upload(...)só é compatível com a API Gemini Developer. Para cargas de trabalho da Agent Platform, continue transmitindo URIs do Cloud Storage usandofrom_uriou bytes inline usandofrom_bytes.
Antes
from vertexai.generative_models import GenerativeModel, Part, Image
image = Image.load_from_file("image.jpg")
print(model.generate_content(["What is shown in this image?", image]).text)
image_part = Part.from_uri(
"gs://cloud-samples-data/generative-ai/image/scones.jpg",
mime_type="image/jpeg",
)
Depois
from google.genai import types
# Image.load_from_file has no equivalent: read the bytes yourself.
with open("image.jpg", "rb") as f:
image = types.Part.from_bytes(data=f.read(), mime_type="image/jpeg")
response = client.models.generate_content(
model="gemini-3.5-flash",
contents=["What is shown in this image?", image],
)
image_part = types.Part.from_uri(
file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
mime_type="image/jpeg",
)
Chamada de função e embasamento
Observe as seguintes mudanças para tarefas de chamada de função e embasamento:
- As ferramentas foram movidas para
config=. Não há argumentotools=na chamada ou em um objeto de modelo. Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())se tornatypes.Tool(google_search=types.GoogleSearch()). Um método de fábrica se torna um campo simples.types.Tooltambém tem um campogoogle_search_retrievalseparado.response.function_callsé o acessador idiomático e não falha quando a parte zero é um texto. A travessia antiga ainda funciona.- O esquema JSON bruto é especificado em
parameters_json_schema. Umtypes.Schemadigitado é especificado emparameters. - Agora é possível transmitir uma função em Python como uma ferramenta, e a chamada de função automática é ativada por padrão ao transmitir a função. Se você portar um loop de ferramenta manual e transmitir um objeto de função, o SDK vai começar a executar seu código. Desative a chamada de função automática padrão com
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True). Os novos tipos de ferramenta a seguir não têm equivalente nas versões anteriores:
code_execution,url_context,google_maps,computer_use,file_search,enterprise_web_search,mcp_servers.
Antes
from vertexai.generative_models import GenerativeModel, FunctionDeclaration, Tool, grounding
weather_tool = Tool(function_declarations=[
FunctionDeclaration(
name="get_current_weather",
description="Get the current weather in a given location",
parameters={
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
)
])
model = GenerativeModel("gemini-2.5-flash", tools=[weather_tool])
response = model.generate_content("What is the weather in Boston?")
call = response.candidates[0].content.parts[0].function_call
# Grounding
search_tool = Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())
Depois
from google.genai import types
weather_tool = types.Tool(function_declarations=[
types.FunctionDeclaration(
name="get_current_weather",
description="Get the current weather in a given location",
parameters_json_schema={
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
)
])
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="What is the weather in Boston?",
config=types.GenerateContentConfig(tools=[weather_tool]),
)
call = response.function_calls[0]
# Grounding
search_tool = types.Tool(google_search=types.GoogleSearch())
Embeddings
Observe as seguintes mudanças nas tarefas de embedding:
TextEmbeddingInputfoi removido.task_typeetitleagora são por solicitação, então os lotes de tarefas mistas precisam ser divididos em várias chamadas.- O tipo de retorno mudou de uma lista direta para um objeto de resposta.
get_embeddings()retornava diretamente umlist[TextEmbedding], então os autores de chamada indexavam a lista diretamente (embeddings[0].values). Na nova versão,embed_content()retorna um objetoEmbedContentResponseque contém uma lista.embeddings, exigindo que você acesseresponse.embeddings[0].values. Os campos de embedding individuais (.valuese.statistics) mantêm os nomes originais. auto_truncatenão tem maisTruecomo padrão. O padrão do novo campo éunset. Se você depende do truncamento silencioso de entradas muito longas, definaauto_truncateexplicitamente.
Antes
from vertexai.language_models import TextEmbeddingModel, TextEmbeddingInput
model = TextEmbeddingModel.from_pretrained("gemini-embedding-001")
text_input = TextEmbeddingInput(
text="How do I get a driver's license?",
task_type="RETRIEVAL_DOCUMENT", # per input
title="Driver's License", # per input
)
embeddings = model.get_embeddings([text_input], output_dimensionality=3072, auto_truncate=True)
print(embeddings[0].values)
Depois
from google.genai import types
response = client.models.embed_content(
model="gemini-embedding-2",
contents="How do I get a driver's license?",
config=types.EmbedContentConfig(
task_type="RETRIEVAL_DOCUMENT", # now per request
title="Driver's License", # now per request
output_dimensionality=3072,
auto_truncate=True,
),
)
print(response.embeddings[0].values)
Contagem de tokens
Observe as seguintes mudanças nas tarefas de contagem de tokens:
total_billable_charactersfoi removido e não tem substituição. Qualquer estimativa de custo baseada emtotal_billable_charactersprecisa ser reformulada (por exemplo, em relação atotal_tokensouresponse.usage_metadata) de uma chamada de geração.client.models.compute_tokens(...)foi adicionado para IDs de token e partes de string.A contagem off-line foi adicionada por meio de
google.genai.local_tokenizer.LocalTokenizer.
Antes
model = GenerativeModel("gemini-2.5-flash")
response = model.count_tokens(["Why is the sky blue?"])
print(response.total_tokens)
print(response.total_billable_characters)
Depois
response = client.models.count_tokens(
model="gemini-3.5-flash",
contents=["Why is the sky blue?"],
)
print(response.total_tokens)
print(response.cached_content_token_count)
O armazenamento em cache de contexto
Observe as seguintes mudanças nas tarefas de armazenamento em cache de contexto:
ttlmuda o tipo dedatetime.timedeltapara uma string de duração, como"86400s".- Os métodos de objeto de recurso se tornam chamadas de módulo de cliente.
updateretorna um novo objeto em vez de fazer uma mutação no local.
Antes
import datetime
from vertexai.caching import CachedContent
cache = CachedContent.create(
model_name="gemini-2.5-flash",
system_instruction="Please answer my question formally",
contents=contents,
ttl=datetime.timedelta(days=1),
)
cache.update(ttl=datetime.timedelta(days=2))
cache.delete()
Depois
from google.genai import types
cache = client.caches.create(
model="gemini-3.5-flash",
config=types.CreateCachedContentConfig(
contents=contents,
system_instruction="Please answer my question formally",
ttl="86400s",
),
)
cache = client.caches.update(
name=cache.name, config=types.UpdateCachedContentConfig(ttl="172800s")
)
client.caches.delete(name=cache.name)
Predição em lote e ajuste
Observe as seguintes mudanças para tarefas de predição em lote e ajuste:
- A sondagem é baseada em nova vinculação, não no local. Não há
job.refresh()nemjob.has_ended. Busque um novo objeto declient.batches.get(name=...)e comparejob.statecom as stringsJOB_STATE_*. - Renomeações em lote:
source_modelparamodel,input_datasetparasrc,output_uri_prefixparaconfig.dest,job_display_nameparaconfig.display_name. - Os controles de formato de máquina em lote foram removidos e não têm equivalente na nova versão do SDK.
machine_type,accelerator_type,accelerator_count,starting_replica_countemax_replica_countnão são mais campos deCreateBatchJobConfig. - Os seguintes métodos foram renomeados:
sft.trainaclient.tunings.tune- De
source_modelparabase_model - De
train_datasetparatraining_dataset epochsaepoch_count
- Os conjuntos de dados de ajuste são agrupados. Uma string
"gs://..."simples se tornatypes.TuningDataset(gcs_uri=...). adapter_sizemuda o tipo deintpara uma string de tipo enumerado, como"ADAPTER_SIZE_FOUR".
Antes
from vertexai.batch_prediction import BatchPredictionJob
from vertexai.tuning import sft
job = BatchPredictionJob.submit(
source_model="gemini-2.5-flash",
input_dataset="bq://my-project.my-dataset.my-table",
output_uri_prefix="bq://my-project.my-dataset.output",
)
while not job.has_ended:
job.refresh()
tuning_job = sft.train(
source_model="gemini-2.5-flash",
train_dataset="gs://bucket/train.jsonl",
epochs=1,
adapter_size=4,
)
Depois
from google.genai import types
job = client.batches.create(
model="gemini-3.5-flash",
src="bq://my-project.my-dataset.my-table",
config=types.CreateBatchJobConfig(dest="bq://my-project.my-dataset.output"),
)
completed = {"JOB_STATE_SUCCEEDED", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_PAUSED"}
while job.state not in completed:
job = client.batches.get(name=job.name)
tuning_job = client.tunings.tune(
base_model="gemini-3.5-flash",
training_dataset=types.TuningDataset(gcs_uri="gs://bucket/train.jsonl"),
config=types.CreateTuningJobConfig(
epoch_count=1,
adapter_size="ADAPTER_SIZE_FOUR",
),
)
Reestruturação do SDK da Agent Platform
Se você usa os módulos agentplatform do google-cloud-aiplatform, siga as recomendações abaixo para migrar para a nova estrutura do SDK:
O
google-cloud-agentplatformagora é uma distribuição independente e leve, além de ser a instalação recomendada para cargas de trabalho de agentes. Se você não precisar da superfície clássica de machine learning, mude a instalação depip install google-cloud-aiplatformparapip install google-cloud-agentplatform.Use a tabela a seguir para atualizar as importações e os caminhos de atributos:
Anterior Novo client.agent_engines.createclient.runtimes.create(implante um Agent Runtime em uma instância da Gemini Enterprise Agent Platform, que oferece sessões integradas da Agent Platform, execução de código em sandbox e configuração de memória de contexto)
client.memory_banks.create(crie recursos independentes do Memory Bank da Agent Platform para persistir, gerenciar e recuperar memórias em várias interações)client.agent_engines.sandboxesclient.sandboxesclient.agent_engines.sandboxes.snapshotsclient.sandboxes.snapshotsclient.agent_engines.sandboxes.templatesclient.sandboxes.templatesclient.agent_engines.sessionsclient.sessionsclient.agent_engines.sessions.eventsclient.sessions.eventsclient.agent_engines.runtimes.revisionsclient.runtimes.revisionsclient.agent_engines.memoriesclient.memory_banks.memoriesagentplatform.agent_engines.templatesagentplatform.frameworksO inicializador global foi removido, e os frameworks de agente não leem mais o projeto e o local do estado
aiplatform.init()ouvertexai.init(). Substitua a configuração derivada do inicializador por variáveis de ambiente para tudo o que estiver em execução em um framework de agente. O código que depende do inicializador para configurar os agentes implantados é interrompido silenciosamente, em vez de gerar um erro.Atualize os sites de chamada
evals.run_inference(agent=...)para transmitirtypes.Runtime, já que o SDK não aceita maistypes.AgentEngine.Faça as mudanças a seguir:
vertexai.Clientaagentplatform.Clientvertexai.ragaagentplatform.Client().rag
vertexai.Clientemite umFutureWarningna primeira instanciação:The vertexai.Client class is deprecated. Please use agentplatform.Client instead.vertexai.ragemite umUserWarningno momento da importação do módulo, não na chamada. Migre para o seguinte:import agentplatform client = agentplatform.Client(project="your-project", location="global") client.rag.create_corpus(...)Atualize o tratamento de erros em torno de
AdkAppe chamadas de sessão. Os métodos de sessão síncronos e as execuções de agentes de streaming agora mostram o erro da API. Os autores de chamadas que capturam um erro genérico encapsulado não correspondem mais. Substitua as capturas de exceções genéricas do wrapper de biblioteca porgoogle.api_core.exceptions.GoogleAPICallError(ou erros de status específicos, comoResourceExhaustedeNotFound).Atualize os autores de chamadas do cliente ou o middleware para incluir o token de acesso OAuth do usuário em cada solicitação, já que os tokens agora são temporários e não são mantidos com o estado da sessão. Gerencie a atualização de tokens no lado do cliente.
O módulo
a2a.tasksfoi removido sem substituição.