feat(google-vertex/google/gemini-robotics-er-2-preview-info): add new models [bot] - #1962
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit a9d5c41. Configure here.
| @@ -0,0 +1,2 @@ | |||
| mode: unknown | |||
| model: google/gemini-robotics-er-2-preview-info | |||
There was a problem hiding this comment.
Incorrect model identifier suffix
High Severity
The registered model ID is google/gemini-robotics-er-2-preview-info, but the real Gemini Robotics ER 2 preview ID is gemini-robotics-er-2-preview. The extra -info suffix makes this entry unusable for API lookups and routing. The filename carries the same incorrect suffix.
Reviewed by Cursor Bugbot for commit a9d5c41. Configure here.
|
/test-models |
Gateway test results
Failures (16)
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
],
max_tokens=256,
temperature=0.7,
stream=True,
)
for chunk in response:
if chunk.choices and len(chunk.choices) > 0:
delta = chunk.choices[0].delta
if delta.content is not None:
print(delta.content, end="", flush=True)
ErrorCode snippetfrom openai import OpenAI
import json
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response_schema = json.loads('''{
"title": "CalendarEvent",
"type": "object",
"properties": {
"name": { "type": "string" },
"date": { "type": "string" },
"participants": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "date", "participants"],
"additionalProperties": false
}''')
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "Extract the event information as JSON."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Alice and Bob are going to a science fair on Friday. Extract the event details as JSON."},
],
response_format={"type": "json_schema", "json_schema": {"name": "CalendarEvent", "schema": response_schema}},
stream=False,
)
import json as _json
_content = response.choices[0].message.content
print(_content)
if not _content:
raise Exception("VALIDATION FAILED: structured-output - response content is empty")
_parsed = _json.loads(_content)
if "name" not in _parsed or "date" not in _parsed or "participants" not in _parsed:
raise Exception("VALIDATION FAILED: structured-output - missing expected fields (name, date, participants)")
if not isinstance(_parsed.get("participants"), list):
raise Exception("VALIDATION FAILED: structured-output - 'participants' is not a list, schema not enforced")
if set(_parsed.keys()) != {"name", "date", "participants"}:
raise Exception(
f"VALIDATION FAILED: structured-output - unexpected keys present: {set(_parsed.keys())}"
)
print("VALIDATION: structured-output SUCCESS")
ErrorCode snippetfrom openai import OpenAI
import json
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response_schema = json.loads('''{
"title": "CalendarEvent",
"type": "object",
"properties": {
"name": { "type": "string" },
"date": { "type": "string" },
"participants": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "date", "participants"],
"additionalProperties": false
}''')
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "Extract the event information as JSON."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Alice and Bob are going to a science fair on Friday. Extract the event details as JSON."},
],
response_format={"type": "json_schema", "json_schema": {"name": "CalendarEvent", "schema": response_schema}},
stream=True,
)
import json as _json
_accumulated = ""
for chunk in response:
if chunk.choices and len(chunk.choices) > 0:
delta = chunk.choices[0].delta
if delta.content is not None:
_accumulated += delta.content
print(delta.content, end="", flush=True)
if not _accumulated:
raise Exception("VALIDATION FAILED: structured-output stream - no content received")
_parsed = _json.loads(_accumulated)
if "name" not in _parsed or "date" not in _parsed or "participants" not in _parsed:
raise Exception("VALIDATION FAILED: structured-output stream - missing expected fields (name, date, participants)")
if not isinstance(_parsed.get("participants"), list):
raise Exception("VALIDATION FAILED: structured-output stream - 'participants' is not a list, schema not enforced")
if set(_parsed.keys()) != {"name", "date", "participants"}:
raise Exception(
f"VALIDATION FAILED: structured-output stream - unexpected keys present: {set(_parsed.keys())}"
)
print("\nVALIDATION: structured-output stream SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
],
reasoning_effort="medium",
stream=True,
)
_reasoning_detected = False
for chunk in response:
if chunk.choices and len(chunk.choices) > 0:
delta = chunk.choices[0].delta
if delta.content is not None:
print(delta.content, end="", flush=True)
if getattr(delta, "reasoning_content", None) is not None:
_reasoning_detected = True
if getattr(delta, "reasoning", None) is not None:
_reasoning_detected = True
_usage = getattr(chunk, "usage", None)
if _usage is not None:
_details = getattr(_usage, "completion_tokens_details", None)
if _details and getattr(_details, "reasoning_tokens", 0) > 0:
_reasoning_detected = True
if not _reasoning_detected:
raise Exception("VALIDATION FAILED: reasoning stream - no reasoning information in stream")
print("\nVALIDATION: reasoning stream SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
],
tools=tools,
tool_choice="auto",
stream=True,
)
_tool_calls_made = False
for chunk in response:
if chunk.choices and len(chunk.choices) > 0:
delta = chunk.choices[0].delta
if delta.content is not None:
print(delta.content, end="", flush=True)
if delta.tool_calls:
_tool_calls_made = True
for _tc in delta.tool_calls:
if _tc.function:
print(_tc.function.arguments or "", end="", flush=True)
if not _tool_calls_made:
raise Exception("VALIDATION FAILED: tool-call stream - no tool calls received")
print("\nVALIDATION: tool-call stream SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
],
tools=tools,
tool_choice="auto",
stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
for _tc in _message.tool_calls:
print(f"Function: {_tc.function.name}")
print(f"Arguments: {_tc.function.arguments}")
else:
print(_message.content)
if not _message.tool_calls or len(_message.tool_calls) == 0:
raise Exception("VALIDATION FAILED: tool-call - no tool calls in response")
print("VALIDATION: tool-call SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
],
reasoning_effort="medium",
stream=False,
)
_usage = getattr(response, "usage", None)
_reasoning_detected = False
_choices = getattr(response, "choices", None)
if _choices and len(_choices) > 0:
_message = getattr(_choices[0], "message", None)
else:
_message = None
if _message and getattr(_message, "content", None) is not None:
print(_message.content)
if _usage is not None:
_output_token_details = getattr(_usage, "completion_tokens_details", None)
if _output_token_details and getattr(_output_token_details, "reasoning_tokens", 0) > 0:
_reasoning_detected = True
elif getattr(_usage, "reasoning", None) is not None:
_reasoning_detected = True
if getattr(_message, "reasoning_content", None) is not None:
_reasoning_detected = True
elif getattr(_message, "reasoning", None) is not None:
_reasoning_detected = True
if not _reasoning_detected:
print("Response: ", response)
raise Exception("VALIDATION FAILED: reasoning - no reasoning information in response")
print("VALIDATION: reasoning SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-vertex/google-gemini-robotics-er-2-preview-info",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
],
max_tokens=256,
temperature=0.7,
stream=False,
)
print(response.choices[0].message.content)
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="What is the capital of France?")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant.",
max_output_tokens=256,
temperature=0.7,
)
_chunks = []
for chunk in client.models.generate_content_stream(
model=_model_id,
contents=contents,
config=config,
):
_chunks.append(chunk)
if chunk.text:
print(chunk.text, end="", flush=True)
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
get_weather = types.FunctionDeclaration(
name="get_weather",
description="Get the current weather for a location.",
parameters_json_schema={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
)
tool = types.Tool(function_declarations=[get_weather])
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text.")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available.",
tools=[tool],
)
_chunks = []
for chunk in client.models.generate_content_stream(
model=_model_id,
contents=contents,
config=config,
):
_chunks.append(chunk)
if chunk.candidates and chunk.candidates[0].content and chunk.candidates[0].content.parts:
for part in chunk.candidates[0].content.parts:
if part.function_call:
print(f"Tool: {part.function_call.name}", flush=True)
print(f"Args: {part.function_call.args}", flush=True)
elif part.text:
print(part.text, end="", flush=True)
_tool_use_detected = False
for _chunk in _chunks:
if not _chunk.candidates or not _chunk.candidates[0].content:
continue
for _part in _chunk.candidates[0].content.parts:
if _part.function_call:
_tool_use_detected = True
if not _tool_use_detected:
raise Exception("VALIDATION FAILED: tool-call stream - no function calls in GenAI stream")
print("\nVALIDATION: tool-call stream SUCCESS")
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
response_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"date": {"type": "string"},
"participants": {
"type": "array",
"items": {"type": "string"},
},
},
"required": ["name", "date", "participants"],
}
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="Alice and Bob are going to a science fair on Friday.")]),
]
config = types.GenerateContentConfig(
system_instruction="Extract the event information as a structured CalendarEvent JSON object.",
response_mime_type="application/json",
response_json_schema=response_schema,
)
response = client.models.generate_content(
model=_model_id,
contents=contents,
config=config,
)
print(response.text)
import json as _json
_text = response.text
if not _text:
raise Exception("VALIDATION FAILED: structured-output - GenAI response text is empty")
_parsed = _json.loads(_text)
if "name" not in _parsed or "date" not in _parsed or "participants" not in _parsed:
raise Exception("VALIDATION FAILED: structured-output - missing expected fields (name, date, participants)")
if not isinstance(_parsed.get("participants"), list):
raise Exception("VALIDATION FAILED: structured-output - 'participants' is not a list, schema not enforced")
print("VALIDATION: structured-output SUCCESS")
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="How to calculate 3^3^3^3? Think step by step and show all reasoning.")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps.",
thinking_config=types.ThinkingConfig(
include_thoughts=True,
thinking_budget=5000,
),
)
_chunks = []
for chunk in client.models.generate_content_stream(
model=_model_id,
contents=contents,
config=config,
):
_chunks.append(chunk)
if chunk.candidates and chunk.candidates[0].content and chunk.candidates[0].content.parts:
for part in chunk.candidates[0].content.parts:
if not part.text:
continue
if part.thought:
print(f"[Thinking] {part.text}", end="", flush=True)
else:
print(part.text, end="", flush=True)
_thought_detected = False
for _chunk in _chunks:
if not _chunk.candidates or not _chunk.candidates[0].content:
continue
for _part in _chunk.candidates[0].content.parts:
if _part.text and _part.thought:
_thought_detected = True
if not _thought_detected:
_usage = getattr(_chunks[-1], "usage_metadata", None) if _chunks else None
if _usage and getattr(_usage, "thoughts_token_count", 0):
_thought_detected = True
if not _thought_detected:
raise Exception("VALIDATION FAILED: reasoning stream - no thinking information in GenAI stream")
print("\nVALIDATION: reasoning stream SUCCESS")
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="How to calculate 3^3^3^3? Think step by step and show all reasoning.")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps.",
thinking_config=types.ThinkingConfig(
include_thoughts=True,
thinking_budget=5000,
),
)
response = client.models.generate_content(
model=_model_id,
contents=contents,
config=config,
)
for part in response.candidates[0].content.parts:
if not part.text:
continue
if part.thought:
print(f"[Thinking] {part.text}")
else:
print(part.text)
_parts = response.candidates[0].content.parts
_thought_detected = False
for _part in _parts:
if _part.text and _part.thought:
_thought_detected = True
_usage = getattr(response, "usage_metadata", None)
if _usage and getattr(_usage, "thoughts_token_count", 0):
_thought_detected = True
if not _thought_detected:
print("Response: ", response)
raise Exception("VALIDATION FAILED: reasoning - no thinking information in GenAI response")
print("VALIDATION: reasoning SUCCESS")
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
response_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"date": {"type": "string"},
"participants": {
"type": "array",
"items": {"type": "string"},
},
},
"required": ["name", "date", "participants"],
}
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="Alice and Bob are going to a science fair on Friday.")]),
]
config = types.GenerateContentConfig(
system_instruction="Extract the event information as a structured CalendarEvent JSON object.",
response_mime_type="application/json",
response_json_schema=response_schema,
)
_chunks = []
for chunk in client.models.generate_content_stream(
model=_model_id,
contents=contents,
config=config,
):
_chunks.append(chunk)
if chunk.text:
print(chunk.text, end="", flush=True)
import json as _json
_accumulated = ""
for _chunk in _chunks:
if _chunk.text:
_accumulated += _chunk.text
if not _accumulated:
raise Exception("VALIDATION FAILED: structured-output stream - no content received from GenAI stream")
_parsed = _json.loads(_accumulated)
if "name" not in _parsed or "date" not in _parsed or "participants" not in _parsed:
raise Exception("VALIDATION FAILED: structured-output stream - missing expected fields (name, date, participants)")
if not isinstance(_parsed.get("participants"), list):
raise Exception("VALIDATION FAILED: structured-output stream - 'participants' is not a list, schema not enforced")
print("\nVALIDATION: structured-output stream SUCCESS")
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="What is the capital of France?")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant.",
max_output_tokens=256,
temperature=0.7,
)
response = client.models.generate_content(
model=_model_id,
contents=contents,
config=config,
)
for part in response.candidates[0].content.parts:
if part.text:
print(part.text)
ErrorCode snippetfrom google import genai
from google.genai import types
_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_full_model = "test-v2-vertex/google/gemini-robotics-er-2-preview-info"
_parts = _full_model.split("/")
_provider_account = _parts[0]
_model_id = "/".join(_parts[1:])
if "/" in _model_id:
_model_id = _model_id.rsplit("/", 1)[-1]
_base_url = f"{_endpoint}/gemini/{_provider_account}/proxy"
client = genai.Client(
api_key=_api_key,
http_options=types.HttpOptions(base_url=_base_url),
)
get_weather = types.FunctionDeclaration(
name="get_weather",
description="Get the current weather for a location.",
parameters_json_schema={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
)
tool = types.Tool(function_declarations=[get_weather])
contents = [
types.Content(role="user", parts=[types.Part.from_text(text="Hi")]),
types.Content(role="model", parts=[types.Part.from_text(text="Hi, how can I help you")]),
types.Content(role="user", parts=[types.Part.from_text(text="Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text.")]),
]
config = types.GenerateContentConfig(
system_instruction="You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available.",
tools=[tool],
)
response = client.models.generate_content(
model=_model_id,
contents=contents,
config=config,
)
for part in response.candidates[0].content.parts:
if part.function_call:
print(f"Tool: {part.function_call.name}")
print(f"Args: {part.function_call.args}")
elif part.text:
print(part.text)
_parts = response.candidates[0].content.parts
_function_calls = [p for p in _parts if p.function_call]
if not _function_calls:
raise Exception("VALIDATION FAILED: tool-call - no function calls in GenAI response")
print("VALIDATION: tool-call SUCCESS") |


Auto-generated by model-addition-agent for
google-vertex/google/gemini-robotics-er-2-preview-info.Note
Low Risk
Metadata-only addition with no application or routing logic changes.
Overview
Adds a new Google Vertex model catalog entry for
google/gemini-robotics-er-2-preview-info, a preview chat model aimed at robotics/embodied reasoning use cases.The YAML defines global token pricing (including batch and prompt-cache rates), 131k context / 65k max output, multimodal text, image, video, and audio inputs, and capabilities such as function calling, structured output, code execution, and thinking. Status is preview with serverless provisioning and links to Google’s robotics docs and model card.
Reviewed by Cursor Bugbot for commit 3cb371d. Bugbot is set up for automated code reviews on this repo. Configure here.