If your service calls Gemini via from vertexai.generative_models import GenerativeModel
, it broke two days ago. Google removed the Vertex AI generative AI modules on June 24 — exactly one year after announcing the deprecation. No grace period, no compatibility shim. The fix is a three-step migration that takes under an hour, and it unlocks Gemini 3.1 Pro as a bonus since that model is not available on the old SDK at all.
What Was Removed #
Five module paths are gone as of June 24, 2026. If your code imports from any of these, you’re getting an ImportError
or AttributeError
in production right now:
vertexai.generative_models
— the big one.GenerativeModel
,Part
,Content
, andHarmCategory
all lived here.vertexai.language_models
—TextGenerationModel
,ChatModel
vertexai.vision_models
—ImageGenerationModel
vertexai.tuning
— fine-tuning jobsvertexai.caching
— context caching
Run this before anything else to find every affected file:
grep -r "vertexai.generative_models" .
Every match is a live production failure. Repeat for the other module names above.
The Fix in Three Steps #
The replacement is the Google Gen AI SDK (google-genai
). Install it, then swap two patterns in your code.
Step 1: Install the new SDK
pip install google-genai
Step 2: Replace the old initialization and call pattern. Here is what your code looks like now (broken):
from vertexai.generative_models import GenerativeModel
import vertexai
vertexai.init(project="my-project", location="us-central1")
model = GenerativeModel("gemini-2.0-flash")
response = model.generate_content("Summarize this:")
print(response.text)
Here is what it should look like after migration:
from google import genai
from google.genai.types import HttpOptions
client = genai.Client(
vertexai=True,
project="my-project",
location="us-central1",
http_options=HttpOptions(api_version="v1"),
)
response = client.models.generate_content(
model="gemini-2.0-flash",
contents="Summarize this:",
)
print(response.text)
Step 3: Update streaming calls if you use them:
for chunk in client.models.generate_content_stream(
model="gemini-2.0-flash",
contents="Tell me a story",
):
print(chunk.text, end="")
What Actually Changed Under the Hood #
The old SDK used global module-level state. You called vertexai.init()
once and every subsequent GenerativeModel
call inherited your project and location silently. That worked until you needed multiple clients, different regions, or proper test isolation — at which point it became a liability.
The new SDK is client-based. All config lives on the Client
object. It is explicit, thread-safe, and actually testable. This is the same direction OpenAI took with their Python SDK, and Google is right to follow.
One gotcha worth calling out: GenerateContentResponse
objects are now Pydantic models. If you call .to_dict()
on a response object, that breaks too. Replace it:
response_dict = response.to_dict()
response_dict = response.model_dump(mode='json')
You Also Unlock Gemini 3.1 Pro #
This migration is not purely defensive. Vertex AI SDK releases after June 2026 do not support new Gemini models at all — they are exclusive to google-genai
. Gemini 3.1 Pro, released this month, scored 77.1% on the ARC-AGI-2 benchmark and delivers double the reasoning performance of 3 Pro. You can only reach it through the new SDK:
response = client.models.generate_content(
model="gemini-3-1-pro",
contents="Your prompt here",
)
Framework Users: Check Your Wrappers #
If you’re using LangChain, upgrade to langchain-google-genai
4.0.0 — that release migrated the package to the unified google-genai SDK internally. You’ll switch from ChatVertexAI
to ChatGoogleGenerativeAI
for Gemini calls. One real-world catch: the old wrapper used gRPC for transport. The new one defaults to REST. If you run high-throughput streaming, benchmark before flipping to production — some teams have reported latency differences on real-time workloads.
For Java, the LangChain4j migration is tracked in issue #4383 — check your wrapper version before assuming it has been handled automatically.
Verification Checklist #
pip show google-genai
confirms the package is installed- Searching codebase for
vertexai.generative_models
returns zero results client.models.list()
returns available models without error- A test
generate_content()
call returns.text
as expected - Streaming tested with
generate_content_stream()
if your app uses it
The migration is not optional and there is no rollback path. But it is also not complex — the API surface maps almost one-to-one, and the code you end up with is meaningfully cleaner. The biggest operational risk is not the migration itself; it is discovering the failure in a production incident rather than a planned deploy. Run the search now, migrate today, and use the new model IDs while you’re at it. Google’s official migration guide covers edge cases including async clients, embeddings, and multimodal content.