• bitcoinBitcoin(BTC)$77,260.00-0.11%
  • ethereumEthereum(ETH)$2,504.14-1.07%
  • tetherTether(USDT)$1.00-0.01%
  • binancecoinBNB(BNB)$720.79-1.51%
  • rippleXRP(XRP)$1.35-1.38%
  • usd-coinUSDC(USDC)$1.000.00%
  • solanaSolana(SOL)$100.79-1.25%
  • tronTRON(TRX)$0.3409950.19%
  • Figure HelocFigure Heloc(FIGR_HELOC)$1.00-0.64%
  • zcashZcash(ZEC)$1,102.62-3.39%
  • HyperliquidHyperliquid(HYPE)$78.44-2.36%
  • dogecoinDogecoin(DOGE)$0.083945-1.28%
  • RainRain(RAIN)$0.0152701.51%
  • moneroMonero(XMR)$536.611.90%
  • USDSUSDS(USDS)$1.000.00%
  • whitebitWhiteBIT Coin(WBT)$80.12-0.34%
  • chainlinkChainlink(LINK)$11.35-1.55%
  • leo-tokenLEO Token(LEO)$9.05-0.63%
  • cardanoCardano(ADA)$0.207291-0.39%
  • stellarStellar(XLM)$0.178796-1.61%
  • Ethena USDeEthena USDe(USDE)$1.00-0.02%
  • daiDai(DAI)$1.000.02%
  • bitcoin-cashBitcoin Cash(BCH)$224.45-1.91%
  • USD1USD1(USD1)$1.00-0.01%
  • litecoinLitecoin(LTC)$54.751.51%
  • uniswapUniswap(UNI)$6.30-1.20%
  • the-open-networkGram (prev. Toncoin)(GRAM)$1.36-1.41%
  • CantonCanton(CC)$0.095462-2.45%
  • hedera-hashgraphHedera(HBAR)$0.0758551.52%
  • Global DollarGlobal Dollar(USDG)$1.000.00%
  • avalanche-2Avalanche(AVAX)$7.39-0.13%
  • shiba-inuShiba Inu(SHIB)$0.000005-1.20%
  • nearNEAR Protocol(NEAR)$2.31-3.93%
  • suiSui(SUI)$0.72-1.53%
  • crypto-com-chainCronos(CRO)$0.058059-1.41%
  • paypal-usdPayPal USD(PYUSD)$1.00-0.01%
  • BlackRock USD Institutional Digital Liquidity FundBlackRock USD Institutional Digital Liquidity Fund(BUIDL)$1.000.00%
  • tether-goldTether Gold(XAUT)$4,349.740.00%
  • Circle USYCCircle USYC(USYC)$1.140.00%
  • MemeCoreMemeCore(M)$1.13-3.65%
  • Ripple USDRipple USD(RLUSD)$1.000.00%
  • okbOKB(OKB)$112.92-0.29%
  • BittensorBittensor(TAO)$234.89-0.10%
  • Ondo US Dollar YieldOndo US Dollar Yield(USDY)$1.140.16%
  • aaveAave(AAVE)$126.540.48%
  • AsterAster(ASTER)$0.700.20%
  • pax-goldPAX Gold(PAXG)$4,353.95-0.03%
  • mantleMantle(MNT)$0.57-0.85%
  • BitwayBitway(BTW)$0.6922.63%
  • World Liberty FinancialWorld Liberty Financial(WLFI)$0.056943-3.47%
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

YOU MAY ALSO LIKE

If Your Laptop Trackpad Is Popping Out, Stop Using It Immediately

How To Get Your Cut Of PlayStation’s $7.85 Million Settlement

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

ShareTweetSendSharePin

Related Posts

If Your Laptop Trackpad Is Popping Out, Stop Using It Immediately
AI & Technology

If Your Laptop Trackpad Is Popping Out, Stop Using It Immediately

September 13, 2026
How To Get Your Cut Of PlayStation’s .85 Million Settlement
AI & Technology

How To Get Your Cut Of PlayStation’s $7.85 Million Settlement

September 13, 2026
What Are Embeddings? How AI Represents Meaning as Numbers – Unite.AI
AI & Technology

What Are Embeddings? How AI Represents Meaning as Numbers – Unite.AI

September 13, 2026
AWS Introduces Pizza Bot: An Open Source Inbox for Background AI Agents
AI & Technology

AWS Introduces Pizza Bot: An Open Source Inbox for Background AI Agents

September 13, 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
Is There Any Benefit To Restarting Your Gaming Handheld Regularly?

Is There Any Benefit To Restarting Your Gaming Handheld Regularly?

September 12, 2026
White House to announce nuclear deal with Saudi Arabia

White House to announce nuclear deal with Saudi Arabia

September 7, 2026
Stocks Under Pressure and Oil Near 0 Kristina Hooper Reveals How to Invest in a Market Pullback

Stocks Under Pressure and Oil Near $100 Kristina Hooper Reveals How to Invest in a Market Pullback

September 8, 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!