Combine Built-in Tools and Function Calling in the Gemini Interactions API

Source: original

Combine Built-in Tools and Function Calling in the Gemini Interactions API

March 24, 20263 minute read

Most useful agents need several tools at once. A DevOps agent that spots a CVE also needs to file a ticket for it. Until recently, you had orchestrate those handoffs yourself or only use custom tools without built-in tools.

Tool combination in the Gemini API now lets you combine built-in tools with custom function declarations in a single request. Gemini decides which tools to call, in what order, and circulates context between them automatically.

Below are two examples of tool combination.

Example 1: Tool Combination with Function Calling

Combine Google Search, URL Context, and a custom function in one request. The model searches the web, reads a page, and calls your function without you specifying the order.

Get a Gemini API key and install the SDK:

pip install google-genai

Define a custom function and pass it alongside built-in tools:

Python

from google import genai

client = genai.Client()

file_incident = { "type": "function", "name": "file_incident", "description": "Files a security incident in the internal tracking system.", "parameters": { "type": "object", "properties": { "cve_id": {"type": "string", "description": "CVE identifier"}, "severity": {"type": "string", "description": "Critical, High, Medium, or Low"}, "summary": {"type": "string", "description": "Brief description of the vulnerability"}, }, "required": ["cve_id", "severity", "summary"], }, }

interaction = client.interactions.create( model="gemini-3-flash-preview", input="Search for the latest critical CVE affecting react, read the full advisory page, and file an incident for it.", tools=[ {"type": "google_search"}, {"type": "url_context"}, {"type": "function", "name": "file_incident", "parameters": ...}, ], )

for output in interaction.outputs: print(f"{output.type}...") if output.type == "function_call": print(f"Function: {output.name}") print(f"Arguments: {output.arguments}")

google_search_call...

google_search_result...

google_search_call...

google_search_result...

thought...

function_call...

Function: file_incident

Arguments:

Example 2: Cross-Turn Context Circulation

Context circulation preserves built-in tool results across turns. Pass previous_interaction_id and follow-up questions can reason over earlier results without re-executing tools. The model can still make new tool calls if it needs fresh data or thinks it needs to.

Python

from google import genai

client = genai.Client()

Turn 1: URL Context reads Philipp's about page

turn1 = client.interactions.create( model="gemini-3-flash-preview", input="Who is Philipp Schmid? https://www.philschmid.de/philipp-schmid", tools=[{"type": "url_context"}], ) print(turn1.outputs[-1].text)

Turn 2: Follow-up uses context from turn 1

turn2 = client.interactions.create( model="gemini-3-flash-preview", input="What is his twitter handle?", tools=[{"type": "url_context"}], previous_interaction_id=turn1.id, ) print(turn2.outputs[-1].text) Thanks for reading! If you have any questions or feedback, please let me know on Twitter or LinkedIn.