{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/philschmid-de/2025-03-14-google-gemma-3-function-calling-example/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "March 14, 2025 8 minute read [View Code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb)\n\nGoogle Gemma 3 27B It is an open, multilingual, multimodal Vision-Language model. It handles context windows up to 128k tokens, understands over 140 languages, and offers improved math, reasoning, and chat capabilities, including structured outputs and function calling.\n\nGemma 3 can be used for agentic workflows and has very strong instruction following capabilities. While there are no dedicated tool/function calling special tokens, you can prompt it to do function calling through careful instruction. Gemma 3 27B is available via [AI Studio](https://aistudio.google.com/prompts/new_chat?model=gemma-3-27b-it) and the Gen AI API. Get your API key from [AI Studio](https://aistudio.google.com/apikey).\n\nFunction calling is the capability to connect LLMs to external tools and to interact with your code and APIs in a structured way. Instead of generating text responses, LLMs understand when to call specific functions and provide the necessary parameters to execute real-world actions.\n\n![Function calling](https://www.philschmid.de/static/blog/gemini-function-calling/function-calling.png)\n\nFunction Calling follows these steps:\n\n1. Your application sends a prompt to the LLM along with function definitions\n2. The LLM analyzes the prompt and decides whether to respond directly or use defined functions\n3. If using functions, the LLM generates structured arguments for the function call\n4. Your application receives the function call details and executes the actual function\n5. The function results are sent back to the LLM\n6. The LLM provides a final response incorporating the function results\n\n## Raw Text Example of how function calling can be implement with Gemma 3\n\nBelow is an textual example of how to use function calling with Gemma 3 27B It. In this example the first user message includes the general instruction how and when to use function calling and example flow. The prompt with the Gemma 3 template would look like this:\n\n1. Send user message with instructions and function definitons and first user message.\n\n````plaintext\n<bos><start_of_turn>user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \n \nUser: What is $200,000 in EUR?<end_of_turn>\n<start_of_turn>model\n````\n\n*Note: The \\`\\`\\` should not be escaped when you use it, but my blog cannot render \\`\\`\\` inside a code block. See [code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb).*\n\n3. Handle Model response when a tool/function is used.\n\n```plaintext\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n\\`\\`\\`\n```\n\n4. Execute local function and create tool output string\n\n```plaintext\n\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`\n```\n\n5. Send the tool output as new request to the model\n\n````plaintext\n<bos><start_of_turn>user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \nUser: What is $200,000 in EUR?<end_of_turn>\n<start_of_turn>model\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n\\`\\`\\`<end_of_turn>\n<start_of_turn>user\n\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`<end_of_turn>\n<start_of_turn>model\n````\n\n6. Final Response: `$200,000 is approximately €180,000`\n\n## Function Calling Example with Gemma 3 27B and Python.\n\nNow, let's test this using the GenAI API. If you want to do this locally, e.g. ollama. You can just use the prompts and simulate the function execution. So first install the `google-genai` SDK.\n\nPython\n\n```python\n%pip install google-genai\n```\n\nThen we create our `client`, define Gemma as model id and create a helper method `extract_tool_call`. This method parses the model responses and checks if there is a \\`\\`\\`tool\\_code\\`\\`\\`. If there is one it uses the `eval` method to run it, extract the result and create a \\`\\`\\`tool\\_output\\`\\`\\`.\n\n*Note: We use `eval` only for demonstration purposes if you plan to use this in production you should add more security and safety as it will execute model generated code in your environment.*\n\nPython\n\n````python\nimport os\nfrom google import genai\nimport re \n# create client\napi_key = os.getenv(\"GEMINI_API_KEY\",\"xxx\")\nclient = genai.Client(api_key=api_key)\n \n# speicfy the model id\nmodel_id = \"gemma-3-27b-it\"\n \n# extract the tool call from the response\ndef extract_tool_call(text):\n    import io\n    from contextlib import redirect_stdout\n \n    pattern = r\"```tool_code\\s*(.*?)\\s*```\"\n    match = re.search(pattern, text, re.DOTALL)\n    if match:\n        code = match.group(1).strip()\n        # Capture stdout in a string buffer\n        f = io.StringIO()\n        with redirect_stdout(f):\n            result = eval(code)\n        output = f.getvalue()\n        r = result if output == '' else output\n        return f'```tool_output\\n{r}\\n```'''\n    return None\n \n````\n\nNext, we define a simple example for a function we want to use. Here is is a `convert` method that simulates the conversion calcuation of currencies. Since we use `eval` the method we want to use for function calling needs to be available in the environment.\n\nWe define our first user prompt including our instructions and function signature with a docstring and args and a template string for our user message.\n\nPython\n\n````python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n  # demo implementation\n  return amount * 0.9\n \n \ninstruction_prompt_with_function_calling = '''At each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n \ndef get_exchange_rate(currency: str, new_currency: str) -> float:\n    \"\"\"Get the latest exchange rate for the currency pair\n \n    Args:\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \nUser: \\{user_message\\}'''\n````\n\n*Note: The \\`\\`\\` should not be escaped when you use it, but my blog cannot render \\`\\`\\` inside a code block. See [code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb).*\n\nThe `genai` SDK supports stateful chat session, which makes it quite easy to test our example as we can easily append the different messages. First, we start with a simple greeting to see what Gemma does.\n\nPython\n\n```python\nchat = client.chats.create(model=model_id)\n \nresponse = chat.send_message(instruction_prompt_with_function_calling.format(user_message=\"hello\"))\nprint(response.text)\n# Hello! How can I help you today? Do you want to convert some currency, or get an exchange rate?\n```\n\nNice! it greeted us back and didn't use any function call. Okay now lets ask it to convert some currency.\n\nPython\n\n````python\nresponse = chat.send_message(\"What is $200,000 in EUR?\")\nprint(response.text)\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n# ```tool_code\n# convert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n# ```\n````\n\nGreat! it generated out \\`\\`\\`tool\\_code\\`\\`\\`, which we can now use and extract and to cool our method.\n\nPython\n\n````python\ncall_response = extract_tool_call(response.text)\nprint(call_response)\n# ```tool_output\n# 180000.0\n# ```\n````\n\nAfter we have the response from our tool call we send a final message to generate a user friendly output.\n\nPython\n\n```python\nresponse = chat.send_message(call_response)\nprint(response.text)\n# $200,000 is equivalent to €180,000. Is there anything else I can help you with?\n```\n\n## Conclusion\n\nFunction calling enables us to build powerful AI assistants that can access real-time data, perform actions, handle complex interactions, and provide natural language interfaces to APIs and tools, making it an increasingly important capability for practical AI applications that interact with the real world.\n\nThis is a simplified example on how you could implement function calling with Gemma 3. I didn't run detailed evaluation or benchmarks. Gemma 3 is an open model with strong reasoning and instruction following capabilities. This allows you to further optimize the prompt used to match your use case and data or further fine-tune on data with similar format to customize its agentic capabilities.\n\n* * *\n\nThanks for reading! If you have any questions or feedback, please let me know on [Twitter](https://twitter.com/_philschmid) or [LinkedIn](https://www.linkedin.com/in/philipp-schmid-a6a2bb196/).\n",
  "authors": [],
  "captured_at": "2026-09-27T19:29:15.293681927+00:00",
  "category": "programming",
  "content_html": "<p>March 14, 2025 8 minute read <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb\">View Code</a></p>\n<p>Google Gemma 3 27B It is an open, multilingual, multimodal Vision-Language model. It handles context windows up to 128k tokens, understands over 140 languages, and offers improved math, reasoning, and chat capabilities, including structured outputs and function calling.</p>\n<p>Gemma 3 can be used for agentic workflows and has very strong instruction following capabilities. While there are no dedicated tool/function calling special tokens, you can prompt it to do function calling through careful instruction. Gemma 3 27B is available via <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://aistudio.google.com/prompts/new_chat?model=gemma-3-27b-it\">AI Studio</a> and the Gen AI API. Get your API key from <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://aistudio.google.com/apikey\">AI Studio</a>.</p>\n<p>Function calling is the capability to connect LLMs to external tools and to interact with your code and APIs in a structured way. Instead of generating text responses, LLMs understand when to call specific functions and provide the necessary parameters to execute real-world actions.</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://www.philschmid.de/static/blog/gemini-function-calling/function-calling.png\" alt=\"Function calling\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Function Calling follows these steps:</p>\n<ol>\n<li>Your application sends a prompt to the LLM along with function definitions</li>\n<li>The LLM analyzes the prompt and decides whether to respond directly or use defined functions</li>\n<li>If using functions, the LLM generates structured arguments for the function call</li>\n<li>Your application receives the function call details and executes the actual function</li>\n<li>The function results are sent back to the LLM</li>\n<li>The LLM provides a final response incorporating the function results</li>\n</ol>\n<h2>Raw Text Example of how function calling can be implement with Gemma 3</h2>\n<p>Below is an textual example of how to use function calling with Gemma 3 27B It. In this example the first user message includes the general instruction how and when to use function calling and example flow. The prompt with the Gemma 3 template would look like this:</p>\n<ol>\n<li>Send user message with instructions and function definitons and first user message.</li>\n</ol>\n<pre><code class=\"language-plaintext\"><span class=\"code-snippet\">&lt;bos&gt;&lt;start_of_turn&gt;user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -&gt; float:\n    &quot;&quot;&quot;Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    &quot;&quot;&quot;\n\\`\\`\\`\n \n \nUser: What is $200,000 in EUR?&lt;end_of_turn&gt;\n&lt;start_of_turn&gt;model\n</span></code></pre>\n<p><em>Note: The ``` should not be escaped when you use it, but my blog cannot render ``` inside a code block. See <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb\">code</a>.</em></p>\n<ol start=\"3\">\n<li>Handle Model response when a tool/function is used.</li>\n</ol>\n<pre><code class=\"language-plaintext\"><span class=\"code-snippet\">Okay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=&quot;USD&quot;, new_currency=&quot;EUR&quot;)\n\\`\\`\\`\n</span></code></pre>\n<ol start=\"4\">\n<li>Execute local function and create tool output string</li>\n</ol>\n<pre><code class=\"language-plaintext\"><span class=\"code-snippet\">\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`\n</span></code></pre>\n<ol start=\"5\">\n<li>Send the tool output as new request to the model</li>\n</ol>\n<pre><code class=\"language-plaintext\"><span class=\"code-snippet\">&lt;bos&gt;&lt;start_of_turn&gt;user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -&gt; float:\n    &quot;&quot;&quot;Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    &quot;&quot;&quot;\n\\`\\`\\`\n \nUser: What is $200,000 in EUR?&lt;end_of_turn&gt;\n&lt;start_of_turn&gt;model\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=&quot;USD&quot;, new_currency=&quot;EUR&quot;)\n\\`\\`\\`&lt;end_of_turn&gt;\n&lt;start_of_turn&gt;user\n\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`&lt;end_of_turn&gt;\n&lt;start_of_turn&gt;model\n</span></code></pre>\n<ol start=\"6\">\n<li>Final Response: <code>$200,000 is approximately €180,000</code></li>\n</ol>\n<h2>Function Calling Example with Gemma 3 27B and Python.</h2>\n<p>Now, let's test this using the GenAI API. If you want to do this locally, e.g. ollama. You can just use the prompts and simulate the function execution. So first install the <code>google-genai</code> SDK.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-keyword syntax-operator syntax-arithmetic syntax-python\">%</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">pip</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">install</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">google</span></span><span class=\"syntax-keyword syntax-operator syntax-arithmetic syntax-python\">-</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">genai</span></span>\n</span></span></code></pre>\n<p>Then we create our <code>client</code>, define Gemma as model id and create a helper method <code>extract_tool_call</code>. This method parses the model responses and checks if there is a ```tool_code```. If there is one it uses the <code>eval</code> method to run it, extract the result and create a ```tool_output```.</p>\n<p><em>Note: We use <code>eval</code> only for demonstration purposes if you plan to use this in production you should add more security and safety as it will execute model generated code in your environment.</em></p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">os</span></span></span>\n<span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">google</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">genai</span></span>\n<span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">re</span></span></span> \n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> create client\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">api_key</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">os</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">getenv</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">GEMINI_API_KEY<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">xxx<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">client</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">genai</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">Client</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">api_key</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">api_key</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n \n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> speicfy the model id\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model_id</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">gemma-3-27b-it<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n \n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> extract the tool call from the response\n</span><span class=\"syntax-meta syntax-function syntax-python\"><span class=\"syntax-storage syntax-type syntax-function syntax-python\">def</span> <span class=\"syntax-entity syntax-name syntax-function syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">extract_tool_call</span></span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-parameters syntax-begin syntax-python\">(</span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">text</span><span class=\"syntax-punctuation syntax-section syntax-parameters syntax-end syntax-python\">)</span></span><span class=\"syntax-meta syntax-function syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-function syntax-begin syntax-python\">:</span></span>\n    <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">io</span></span></span>\n    <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">contextlib</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">redirect_stdout</span></span>\n \n    <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">pattern</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-storage syntax-type syntax-string syntax-python\">r</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-source syntax-regexp syntax-python\">```tool_code<span class=\"syntax-constant syntax-character syntax-character-class syntax-regexp\">\\s</span><span class=\"syntax-keyword syntax-operator syntax-quantifier syntax-regexp\">*</span><span class=\"syntax-meta syntax-group syntax-regexp\"><span class=\"syntax-punctuation syntax-definition syntax-group syntax-begin syntax-regexp\">(</span><span class=\"syntax-constant syntax-character syntax-character-class syntax-regexp\">.</span><span class=\"syntax-keyword syntax-operator syntax-quantifier syntax-regexp\">*?</span><span class=\"syntax-punctuation syntax-definition syntax-group syntax-end syntax-regexp\">)</span></span><span class=\"syntax-constant syntax-character syntax-character-class syntax-regexp\">\\s</span><span class=\"syntax-keyword syntax-operator syntax-quantifier syntax-regexp\">*</span>```</span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n    <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">match</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">re</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">search</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">pattern</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">re</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-variable syntax-other syntax-constant syntax-python\">DOTALL</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n    <span class=\"syntax-meta syntax-statement syntax-if syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-conditional syntax-python\">if</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">match</span></span><span class=\"syntax-punctuation syntax-section syntax-block syntax-conditional syntax-python\">:</span></span>\n        <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">code</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">match</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">group</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">1</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">strip</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n        <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Capture stdout in a string buffer\n</span>        <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">f</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">io</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">StringIO</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n        <span class=\"syntax-meta syntax-statement syntax-with syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-with syntax-python\">with</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">redirect_stdout</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">f</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span><span class=\"syntax-punctuation syntax-section syntax-block syntax-with syntax-python\">:</span></span>\n            <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">result</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">eval</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">code</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n        <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">output</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">f</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">getvalue</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n        <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">r</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">result</span></span> <span class=\"syntax-meta syntax-statement syntax-if syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-conditional syntax-python\">if</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">output</span></span> <span class=\"syntax-keyword syntax-operator syntax-comparison syntax-python\">==</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span> <span class=\"syntax-keyword syntax-control syntax-flow syntax-else syntax-inline syntax-python\">else</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">output</span></span></span>\n        <span class=\"syntax-keyword syntax-control syntax-flow syntax-return syntax-python\">return</span> <span class=\"syntax-storage syntax-type syntax-string syntax-python\">f</span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">```tool_output<span class=\"syntax-constant syntax-character syntax-escape syntax-python\">\\n</span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">r</span></span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-constant syntax-character syntax-escape syntax-python\">\\n</span>```<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span>\n    <span class=\"syntax-keyword syntax-control syntax-flow syntax-return syntax-python\">return</span> <span class=\"syntax-constant syntax-language syntax-python\">None</span>\n \n</span></span></code></pre>\n<p>Next, we define a simple example for a function we want to use. Here is is a <code>convert</code> method that simulates the conversion calcuation of currencies. Since we use <code>eval</code> the method we want to use for function calling needs to be available in the environment.</p>\n<p>We define our first user prompt including our instructions and function signature with a docstring and args and a template string for our user message.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-function syntax-python\"><span class=\"syntax-storage syntax-type syntax-function syntax-python\">def</span> <span class=\"syntax-entity syntax-name syntax-function syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">convert</span></span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-parameters syntax-begin syntax-python\">(</span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">amount</span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-annotation syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-annotation syntax-parameter syntax-python\">:</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-type syntax-python\">float</span></span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-parameters syntax-python\">,</span> <span class=\"syntax-variable syntax-parameter syntax-python\">currency</span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-annotation syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-annotation syntax-parameter syntax-python\">:</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-type syntax-python\">str</span></span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-parameters syntax-python\">,</span> <span class=\"syntax-variable syntax-parameter syntax-python\">new_currency</span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-annotation syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-annotation syntax-parameter syntax-python\">:</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-type syntax-python\">str</span></span></span><span class=\"syntax-meta syntax-function syntax-parameters syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-parameters syntax-end syntax-python\">)</span></span><span class=\"syntax-meta syntax-function syntax-python\"> </span><span class=\"syntax-meta syntax-function syntax-annotation syntax-return syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-annotation syntax-return syntax-python\">-&gt;</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-type syntax-python\">float</span></span></span><span class=\"syntax-meta syntax-function syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-function syntax-begin syntax-python\">:</span></span>\n  <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> demo implementation\n</span>  <span class=\"syntax-keyword syntax-control syntax-flow syntax-return syntax-python\">return</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">amount</span></span> <span class=\"syntax-keyword syntax-operator syntax-arithmetic syntax-python\">*</span> <span class=\"syntax-constant syntax-numeric syntax-float syntax-python\">0<span class=\"syntax-punctuation syntax-separator syntax-decimal syntax-python\">.</span>9</span>\n \n \n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">instruction_prompt_with_function_calling</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-block syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;&#39;&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-block syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"></span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-block syntax-python\">At each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n<span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span><span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span><span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span>python\ndef convert(amount: float, currency: str, new_currency: str) -&gt; float:\n    &quot;&quot;&quot;Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    &quot;&quot;&quot;\n \ndef get_exchange_rate(currency: str, new_currency: str) -&gt; float:\n    &quot;&quot;&quot;Get the latest exchange rate for the currency pair\n \n    Args:\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    &quot;&quot;&quot;\n<span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span><span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span><span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\`</span>\n \nUser: <span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\{</span>user_message<span class=\"syntax-invalid syntax-deprecated syntax-character syntax-escape syntax-python\">\\}</span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;&#39;&#39;</span></span></span>\n</span></span></code></pre>\n<p><em>Note: The ``` should not be escaped when you use it, but my blog cannot render ``` inside a code block. See <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb\">code</a>.</em></p>\n<p>The <code>genai</code> SDK supports stateful chat session, which makes it quite easy to test our example as we can easily append the different messages. First, we start with a simple greeting to see what Gemma does.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">chat</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">client</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">chats</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">create</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">model</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model_id</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n \n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">chat</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">send_message</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">instruction_prompt_with_function_calling</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">format</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">user_message</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">hello<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">text</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Hello! How can I help you today? Do you want to convert some currency, or get an exchange rate?\n</span></span></span></code></pre>\n<p>Nice! it greeted us back and didn't use any function call. Okay now lets ask it to convert some currency.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">chat</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">send_message</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">What is $200,000 in EUR?<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">text</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">Okay</span></span>, <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">I</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">need</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">to</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">convert</span></span> $<span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">200</span>,<span class=\"syntax-constant syntax-numeric syntax-integer syntax-octal syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-numeric syntax-octal syntax-python\">0</span>00</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">to</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-other syntax-constant syntax-python\">EUR</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span> <span class=\"syntax-variable syntax-other syntax-constant syntax-python\">I</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">will</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">use</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">the</span></span> `<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">convert</span></span>` <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">function</span></span> <span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">this</span>.</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> ```tool_code\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> convert(amount=200000.0, currency=&quot;USD&quot;, new_currency=&quot;EUR&quot;)\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> ```\n</span></span></span></code></pre>\n<p>Great! it generated out ```tool_code```, which we can now use and extract and to cool our method.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">call_response</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">extract_tool_call</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">text</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">call_response</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> ```tool_output\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> 180000.0\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> ```\n</span></span></span></code></pre>\n<p>After we have the response from our tool call we send a final message to generate a user friendly output.</p>\n<p>Python</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">chat</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">send_message</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">call_response</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">response</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">text</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> $200,000 is equivalent to €180,000. Is there anything else I can help you with?\n</span></span></span></code></pre>\n<h2>Conclusion</h2>\n<p>Function calling enables us to build powerful AI assistants that can access real-time data, perform actions, handle complex interactions, and provide natural language interfaces to APIs and tools, making it an increasingly important capability for practical AI applications that interact with the real world.</p>\n<p>This is a simplified example on how you could implement function calling with Gemma 3. I didn't run detailed evaluation or benchmarks. Gemma 3 is an open model with strong reasoning and instruction following capabilities. This allows you to further optimize the prompt used to match your use case and data or further fine-tune on data with similar format to customize its agentic capabilities.</p>\n<hr />\n<p>Thanks for reading! If you have any questions or feedback, please let me know on <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://twitter.com/_philschmid\">Twitter</a> or <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.linkedin.com/in/philipp-schmid-a6a2bb196/\">LinkedIn</a>.</p>\n",
  "content_markdown": "March 14, 2025 8 minute read [View Code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb)\n\nGoogle Gemma 3 27B It is an open, multilingual, multimodal Vision-Language model. It handles context windows up to 128k tokens, understands over 140 languages, and offers improved math, reasoning, and chat capabilities, including structured outputs and function calling.\n\nGemma 3 can be used for agentic workflows and has very strong instruction following capabilities. While there are no dedicated tool/function calling special tokens, you can prompt it to do function calling through careful instruction. Gemma 3 27B is available via [AI Studio](https://aistudio.google.com/prompts/new_chat?model=gemma-3-27b-it) and the Gen AI API. Get your API key from [AI Studio](https://aistudio.google.com/apikey).\n\nFunction calling is the capability to connect LLMs to external tools and to interact with your code and APIs in a structured way. Instead of generating text responses, LLMs understand when to call specific functions and provide the necessary parameters to execute real-world actions.\n\n![Function calling](https://www.philschmid.de/static/blog/gemini-function-calling/function-calling.png)\n\nFunction Calling follows these steps:\n\n1. Your application sends a prompt to the LLM along with function definitions\n2. The LLM analyzes the prompt and decides whether to respond directly or use defined functions\n3. If using functions, the LLM generates structured arguments for the function call\n4. Your application receives the function call details and executes the actual function\n5. The function results are sent back to the LLM\n6. The LLM provides a final response incorporating the function results\n\n## Raw Text Example of how function calling can be implement with Gemma 3\n\nBelow is an textual example of how to use function calling with Gemma 3 27B It. In this example the first user message includes the general instruction how and when to use function calling and example flow. The prompt with the Gemma 3 template would look like this:\n\n1. Send user message with instructions and function definitons and first user message.\n\n````plaintext\n<bos><start_of_turn>user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \n \nUser: What is $200,000 in EUR?<end_of_turn>\n<start_of_turn>model\n````\n\n*Note: The \\`\\`\\` should not be escaped when you use it, but my blog cannot render \\`\\`\\` inside a code block. See [code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb).*\n\n3. Handle Model response when a tool/function is used.\n\n```plaintext\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n\\`\\`\\`\n```\n\n4. Execute local function and create tool output string\n\n```plaintext\n\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`\n```\n\n5. Send the tool output as new request to the model\n\n````plaintext\n<bos><start_of_turn>user\nAt each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \nUser: What is $200,000 in EUR?<end_of_turn>\n<start_of_turn>model\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n\\`\\`\\`tool_code\nconvert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n\\`\\`\\`<end_of_turn>\n<start_of_turn>user\n\\`\\`\\`tool_output\n180000.0\n\\`\\`\\`<end_of_turn>\n<start_of_turn>model\n````\n\n6. Final Response: `$200,000 is approximately €180,000`\n\n## Function Calling Example with Gemma 3 27B and Python.\n\nNow, let's test this using the GenAI API. If you want to do this locally, e.g. ollama. You can just use the prompts and simulate the function execution. So first install the `google-genai` SDK.\n\nPython\n\n```python\n%pip install google-genai\n```\n\nThen we create our `client`, define Gemma as model id and create a helper method `extract_tool_call`. This method parses the model responses and checks if there is a \\`\\`\\`tool\\_code\\`\\`\\`. If there is one it uses the `eval` method to run it, extract the result and create a \\`\\`\\`tool\\_output\\`\\`\\`.\n\n*Note: We use `eval` only for demonstration purposes if you plan to use this in production you should add more security and safety as it will execute model generated code in your environment.*\n\nPython\n\n````python\nimport os\nfrom google import genai\nimport re \n# create client\napi_key = os.getenv(\"GEMINI_API_KEY\",\"xxx\")\nclient = genai.Client(api_key=api_key)\n \n# speicfy the model id\nmodel_id = \"gemma-3-27b-it\"\n \n# extract the tool call from the response\ndef extract_tool_call(text):\n    import io\n    from contextlib import redirect_stdout\n \n    pattern = r\"```tool_code\\s*(.*?)\\s*```\"\n    match = re.search(pattern, text, re.DOTALL)\n    if match:\n        code = match.group(1).strip()\n        # Capture stdout in a string buffer\n        f = io.StringIO()\n        with redirect_stdout(f):\n            result = eval(code)\n        output = f.getvalue()\n        r = result if output == '' else output\n        return f'```tool_output\\n{r}\\n```'''\n    return None\n \n````\n\nNext, we define a simple example for a function we want to use. Here is is a `convert` method that simulates the conversion calcuation of currencies. Since we use `eval` the method we want to use for function calling needs to be available in the environment.\n\nWe define our first user prompt including our instructions and function signature with a docstring and args and a template string for our user message.\n\nPython\n\n````python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n  # demo implementation\n  return amount * 0.9\n \n \ninstruction_prompt_with_function_calling = '''At each turn, if you decide to invoke any of the function(s), it should be wrapped with ```tool_code```. The python methods described below are imported and available, you can only use defined methods. The generated code should be readable and efficient. The response to a method will be wrapped in ```tool_output``` use it to call more tools or generate a helpful, friendly response. When using a ```tool_call``` think step by step why and how it should be used.\n \nThe following Python methods are available:\n \n\\`\\`\\`python\ndef convert(amount: float, currency: str, new_currency: str) -> float:\n    \"\"\"Convert the currency with the latest exchange rate\n \n    Args:\n      amount: The amount of currency to convert\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n \ndef get_exchange_rate(currency: str, new_currency: str) -> float:\n    \"\"\"Get the latest exchange rate for the currency pair\n \n    Args:\n      currency: The currency to convert from\n      new_currency: The currency to convert to\n    \"\"\"\n\\`\\`\\`\n \nUser: \\{user_message\\}'''\n````\n\n*Note: The \\`\\`\\` should not be escaped when you use it, but my blog cannot render \\`\\`\\` inside a code block. See [code](https://github.com/philschmid/gemini-samples/blob/main/examples/gemma-function-calling.ipynb).*\n\nThe `genai` SDK supports stateful chat session, which makes it quite easy to test our example as we can easily append the different messages. First, we start with a simple greeting to see what Gemma does.\n\nPython\n\n```python\nchat = client.chats.create(model=model_id)\n \nresponse = chat.send_message(instruction_prompt_with_function_calling.format(user_message=\"hello\"))\nprint(response.text)\n# Hello! How can I help you today? Do you want to convert some currency, or get an exchange rate?\n```\n\nNice! it greeted us back and didn't use any function call. Okay now lets ask it to convert some currency.\n\nPython\n\n````python\nresponse = chat.send_message(\"What is $200,000 in EUR?\")\nprint(response.text)\nOkay, I need to convert $200,000 to EUR. I will use the `convert` function for this.\n# ```tool_code\n# convert(amount=200000.0, currency=\"USD\", new_currency=\"EUR\")\n# ```\n````\n\nGreat! it generated out \\`\\`\\`tool\\_code\\`\\`\\`, which we can now use and extract and to cool our method.\n\nPython\n\n````python\ncall_response = extract_tool_call(response.text)\nprint(call_response)\n# ```tool_output\n# 180000.0\n# ```\n````\n\nAfter we have the response from our tool call we send a final message to generate a user friendly output.\n\nPython\n\n```python\nresponse = chat.send_message(call_response)\nprint(response.text)\n# $200,000 is equivalent to €180,000. Is there anything else I can help you with?\n```\n\n## Conclusion\n\nFunction calling enables us to build powerful AI assistants that can access real-time data, perform actions, handle complex interactions, and provide natural language interfaces to APIs and tools, making it an increasingly important capability for practical AI applications that interact with the real world.\n\nThis is a simplified example on how you could implement function calling with Gemma 3. I didn't run detailed evaluation or benchmarks. Gemma 3 is an open model with strong reasoning and instruction following capabilities. This allows you to further optimize the prompt used to match your use case and data or further fine-tune on data with similar format to customize its agentic capabilities.\n\n* * *\n\nThanks for reading! If you have any questions or feedback, please let me know on [Twitter](https://twitter.com/_philschmid) or [LinkedIn](https://www.linkedin.com/in/philipp-schmid-a6a2bb196/).\n",
  "dateCreated": "2026-09-27T19:29:15.293681927+00:00",
  "date_created": "2025-03-14T00:00:00+00:00",
  "date_modified": "2025-03-14T00:00:00+00:00",
  "date_published": "2025-03-14T00:00:00+00:00",
  "description": "Learn how to use function calling with Google DeepMind Gemma 3 27B It",
  "external_url": "https://www.philschmid.de/gemma-function-calling",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/philschmid-de/2025/03/2025-03-14-google-gemma-3-function-calling-example.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/philschmid-de/2025/03/2025-03-14-google-gemma-3-function-calling-example.md"
  },
  "id": "urn:aggr:item:88f060a5ad3bac4442ad198e066d3595b7ea9122",
  "isBasedOn": {
    "@id": "https://www.philschmid.de/gemma-function-calling"
  },
  "mainEntity": {
    "@id": "https://www.philschmid.de/gemma-function-calling",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/philschmid-de/2025-03-14-google-gemma-3-function-calling-example/#webpage"
    },
    "dateModified": "2025-03-14T00:00:00+00:00",
    "datePublished": "2025-03-14T00:00:00+00:00",
    "headline": "Google Gemma 3 Function Calling Example",
    "timeRequired": "PT7M",
    "url": "https://www.philschmid.de/gemma-function-calling",
    "wordCount": 1475
  },
  "name": "Archived snapshot: Google Gemma 3 Function Calling Example",
  "preview": null,
  "reading_minutes": 7,
  "replicated_at": null,
  "source": "philschmid-de",
  "source_name": "philschmid.de - RSS feed",
  "summary": "Learn how to use function calling with Google DeepMind Gemma 3 27B It",
  "tags": [],
  "temporalCoverage": "2026-09-27T19:29:15.293681927+00:00",
  "title": "Google Gemma 3 Function Calling Example",
  "url": "https://aggr.aymericbeaumet.com/items/philschmid-de/2025-03-14-google-gemma-3-function-calling-example/",
  "word_count": 1475
}