• bitcoinBitcoin(BTC)$76,957.00-4.73%
  • ethereumEthereum(ETH)$2,235.69-4.39%
  • tetherTether(USDT)$1.000.01%
  • binancecoinBNB(BNB)$699.03-6.09%
  • rippleXRP(XRP)$1.24-4.11%
  • usd-coinUSDC(USDC)$1.000.01%
  • solanaSolana(SOL)$94.13-6.75%
  • tronTRON(TRX)$0.3335210.72%
  • Figure HelocFigure Heloc(FIGR_HELOC)$1.03-3.31%
  • HyperliquidHyperliquid(HYPE)$90.28-4.62%
  • zcashZcash(ZEC)$1,227.05-7.46%
  • dogecoinDogecoin(DOGE)$0.075146-5.43%
  • moneroMonero(XMR)$595.52-1.89%
  • USDSUSDS(USDS)$1.000.08%
  • whitebitWhiteBIT Coin(WBT)$73.90-4.63%
  • leo-tokenLEO Token(LEO)$9.40-0.71%
  • chainlinkChainlink(LINK)$11.16-4.88%
  • cardanoCardano(ADA)$0.192029-5.49%
  • stellarStellar(XLM)$0.167452-1.66%
  • bitcoin-cashBitcoin Cash(BCH)$287.27-0.67%
  • nearNEAR Protocol(NEAR)$4.27-4.61%
  • RainRain(RAIN)$0.006396-0.92%
  • daiDai(DAI)$1.00-0.02%
  • Ethena USDeEthena USDe(USDE)$1.00-0.07%
  • uniswapUniswap(UNI)$6.93-4.31%
  • litecoinLitecoin(LTC)$55.21-4.36%
  • USD1USD1(USD1)$1.00-0.08%
  • CantonCanton(CC)$0.095064-6.26%
  • avalanche-2Avalanche(AVAX)$8.41-5.17%
  • suiSui(SUI)$0.89-4.98%
  • the-open-networkGram (prev. Toncoin)(GRAM)$1.15-5.19%
  • hedera-hashgraphHedera(HBAR)$0.071110-3.18%
  • tether-goldTether Gold(XAUT)$3,879.99-3.15%
  • Global DollarGlobal Dollar(USDG)$1.000.03%
  • paypal-usdPayPal USD(PYUSD)$1.000.06%
  • shiba-inuShiba Inu(SHIB)$0.000005-5.09%
  • quant-networkQuant(QNT)$190.40-0.92%
  • BittensorBittensor(TAO)$232.07-8.48%
  • crypto-com-chainCronos(CRO)$0.051010-3.92%
  • Ripple USDRipple USD(RLUSD)$1.00-0.01%
  • EthenaEthena(ENA)$0.186209-11.84%
  • Ondo US Dollar YieldOndo US Dollar Yield(USDY)$1.150.04%
  • Circle USYCCircle USYC(USYC)$1.140.03%
  • okbOKB(OKB)$111.08-1.73%
  • MemeCoreMemeCore(M)$0.95-7.44%
  • pepePepe(PEPE)$0.000005-4.70%
  • BlackRock USD Institutional Digital Liquidity FundBlackRock USD Institutional Digital Liquidity Fund(BUIDL)$1.000.00%
  • aaveAave(AAVE)$126.06-5.86%
  • OndoOndo(ONDO)$0.397688-5.20%
  • Falcon USDFalcon USD(USDF)$0.99-0.40%
TradePoint.io
  • Main
  • AI & Technology
  • Stock Charts
  • Market & News
  • Business
  • Finance Tips
  • Trade Tube
  • Blog
  • Shop
No Result
View All Result
TradePoint.io
No Result
View All Result

How to Combine Google Search, Google Maps, and Custom Functions in a Single Gemini API Call With Context Circulation, Parallel Tool IDs, and Multi-Step Agentic Chains

April 8, 2026
in AI & Technology
Reading Time: 3 mins read
A A
How to Combine Google Search, Google Maps, and Custom Functions in a Single Gemini API Call With Context Circulation, Parallel Tool IDs, and Multi-Step Agentic Chains
ShareShareShareShareShare
import subprocess, sys


subprocess.check_call(
   [sys.executable, "-m", "pip", "install", "-qU", "google-genai"],
   stdout=subprocess.DEVNULL,
   stderr=subprocess.DEVNULL,
)


import getpass, json, textwrap, os, time
from google import genai
from google.genai import types


if "GOOGLE_API_KEY" not in os.environ:
   os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Gemini API key: ")


client = genai.Client(api_key=os.environ["GOOGLE_API_KEY"])


TOOL_COMBO_MODEL = "gemini-3-flash-preview"
MAPS_MODEL       = "gemini-2.5-flash"


DIVIDER = "=" * 72


def heading(title: str):
   print(f"\n{DIVIDER}")
   print(f"  {title}")
   print(DIVIDER)


def wrap(text: str, width: int = 80):
   for line in text.splitlines():
       print(textwrap.fill(line, width=width) if line.strip() else "")


def describe_parts(response):
   parts = response.candidates[0].content.parts
   fc_ids = {}
   for i, part in enumerate(parts):
       prefix = f"   Part {i:2d}:"
       if hasattr(part, "tool_call") and part.tool_call:
           tc = part.tool_call
           print(f"{prefix} [toolCall]        type={tc.tool_type}  id={tc.id}")
       if hasattr(part, "tool_response") and part.tool_response:
           tr = part.tool_response
           print(f"{prefix} [toolResponse]    type={tr.tool_type}  id={tr.id}")
       if hasattr(part, "executable_code") and part.executable_code:
           code = part.executable_code.code[:90].replace("\n", " ↵ ")
           print(f"{prefix} [executableCode]  {code}...")
       if hasattr(part, "code_execution_result") and part.code_execution_result:
           out = (part.code_execution_result.output or "")[:90]
           print(f"{prefix} [codeExecResult]  {out}")
       if hasattr(part, "function_call") and part.function_call:
           fc = part.function_call
           fc_ids[fc.name] = fc.id
           print(f"{prefix} [functionCall]    name={fc.name}  id={fc.id}")
           print(f"              └─ args: {dict(fc.args)}")
       if hasattr(part, "text") and part.text:
           snippet = part.text[:110].replace("\n", " ")
           print(f"{prefix} [text]            {snippet}...")
       if hasattr(part, "thought_signature") and part.thought_signature:
           print(f"              └─ thought_signature present ✓")
   return fc_ids




heading("DEMO 1: Combine Google Search + Custom Function in One Request")


print("""
This demo shows the flagship new feature: passing BOTH a built-in tool
(Google Search) and a custom function declaration in a single API call.


Gemini will:
 Turn 1 → Search the web for real-time info, then request our custom
          function to get weather data.
 Turn 2 → We supply the function response; Gemini synthesizes everything.


Key points:
 • google_search and function_declarations go in the SAME Tool object
 • include_server_side_tool_invocations must be True (on ToolConfig)
 • Return ALL parts (incl. thought_signatures) in subsequent turns
""")


get_weather_func = types.FunctionDeclaration(
   name="getWeather",
   description="Gets the current weather for a requested city.",
   parameters=types.Schema(
       type="OBJECT",
       properties={
           "city": types.Schema(
               type="STRING",
               description="The city and state, e.g. Utqiagvik, Alaska",
           ),
       },
       required=["city"],
   ),
)


print("▶  Turn 1: Sending prompt with Google Search + getWeather tools...\n")


response_1 = client.models.generate_content(
   model=TOOL_COMBO_MODEL,
   contents=(
       "What is the northernmost city in the United States? "
       "What's the weather like there today?"
   ),
   config=types.GenerateContentConfig(
       tools=[
           types.Tool(
               google_search=types.GoogleSearch(),
               function_declarations=[get_weather_func],
           ),
       ],
       tool_config=types.ToolConfig(
           include_server_side_tool_invocations=True,
       ),
   ),
)


print("   Parts returned by the model:\n")
fc_ids = describe_parts(response_1)


function_call_id = fc_ids.get("getWeather")
print(f"\n   ✅ Captured function_call id for getWeather: {function_call_id}")


print("\n▶  Turn 2: Returning function result & requesting final synthesis...\n")


history = [
   types.Content(
       role="user",
       parts=[
           types.Part(
               text=(
                   "What is the northernmost city in the United States? "
                   "What's the weather like there today?"
               )
           )
       ],
   ),
   response_1.candidates[0].content,
   types.Content(
       role="user",
       parts=[
           types.Part(
               function_response=types.FunctionResponse(
                   name="getWeather",
                   response={"response": "Very cold. 22°F / -5.5°C with strong Arctic winds."},
                   id=function_call_id,
               )
           )
       ],
   ),
]


response_2 = client.models.generate_content(
   model=TOOL_COMBO_MODEL,
   contents=history,
   config=types.GenerateContentConfig(
       tools=[
           types.Tool(
               google_search=types.GoogleSearch(),
               function_declarations=[get_weather_func],
           ),
       ],
       tool_config=types.ToolConfig(
           include_server_side_tool_invocations=True,
       ),
   ),
)


print("   ✅ Final synthesized response:\n")
for part in response_2.candidates[0].content.parts:
   if hasattr(part, "text") and part.text:
       wrap(part.text)

Credit: Source link

YOU MAY ALSO LIKE

Project Suncatcher’s Orbiting TPU Delivers Its First AI-Generated Haiku – Unite.AI

New tvOS 27.2 Features To Try For An Upgraded Apple TV Experience

ShareTweetSendSharePin

Related Posts

Project Suncatcher’s Orbiting TPU Delivers Its First AI-Generated Haiku – Unite.AI
AI & Technology

Project Suncatcher’s Orbiting TPU Delivers Its First AI-Generated Haiku – Unite.AI

October 30, 2026
New tvOS 27.2 Features To Try For An Upgraded Apple TV Experience
AI & Technology

New tvOS 27.2 Features To Try For An Upgraded Apple TV Experience

October 30, 2026
Pope Leo XIV Calls to “Disarm” AI, Urges Ban on Lethal Autonomous Weapons – Unite.AI
AI & Technology

Pope Leo XIV Calls to “Disarm” AI, Urges Ban on Lethal Autonomous Weapons – Unite.AI

October 30, 2026
The Death Stranding Anime’s First Teaser Trailer Arrives Ahead Of Its Disney+ Debut
AI & Technology

The Death Stranding Anime’s First Teaser Trailer Arrives Ahead Of Its Disney+ Debut

October 30, 2026
Next Post
NCAA director reveals how sports betting can be manipulated

NCAA director reveals how sports betting can be manipulated

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Search

No Result
View All Result
Xona Raises 0 Million to Remake 50-Year-Old GPS

Xona Raises $250 Million to Remake 50-Year-Old GPS

October 25, 2026
Storied Wall Street law firm Weil Gotshal moves to shut down after mass exodus of top partners

Storied Wall Street law firm Weil Gotshal moves to shut down after mass exodus of top partners

October 28, 2026
Power On: Apple’s iPhone Duo Is Here — But Good Luck Finding One

Power On: Apple’s iPhone Duo Is Here — But Good Luck Finding One

October 25, 2026

About

Learn more

Our Services

Legal

Privacy Policy

Terms of Use

Bloggers

Learn more

Article Links

Contact

Advertise

Ask us anything

©2020- TradePoint.io - All rights reserved!

Tradepoint.io, being just a publishing and technology platform, is not a registered broker-dealer or investment adviser. So we do not provide investment advice. Rather, brokerage services are provided to clients of Tradepoint.io by independent SEC-registered broker-dealers and members of FINRA/SIPC. Every form of investing carries some risk and past performance is not a guarantee of future results. “Tradepoint.io“, “Instant Investing” and “My Trading Tools” are registered trademarks of Apperbuild, LLC.

This website is operated by Apperbuild, LLC. We have no link to any brokerage firm and we do not provide investment advice. Every information and resource we provide is solely for the education of our readers. © 2020 Apperbuild, LLC. All rights reserved.

No Result
View All Result
  • Main
  • AI & Technology
  • Stock Charts
  • Market & News
  • Business
  • Finance Tips
  • Trade Tube
  • Blog
  • Shop

© 2023 - TradePoint.io - All Rights Reserved!