Skip to content
Google logo

Gemini 3.7 Flash

Text Generation • Google

View as MarkdownAgent setup
  • Third-party

Gemini 3.7 Flash is a highly capable, natively multimodal reasoning model optimized for agentic workflows and real-world tasks.

Model Info
Context Window1,048,576 tokens
Terms and Licenselink
More informationlink
Request formatsChat Completions
PricingView pricing in the Cloudflare dashboard

Usage

const response = await env.AI.run(
  'google/gemini-3.7-flash',
  { contents: [{ parts: [{ text: 'What are the three laws of thermodynamics?' }], role: 'user' }] },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "google/gemini-3.7-flash",
  "input": {
    "contents": [
      {
        "parts": [
          {
            "text": "What are the three laws of thermodynamics?"
          }
        ],
        "role": "user"
      }
    ]
  }
}'
The **laws of thermodynamics** define fundamental physical quantities (like temperature, energy, and entropy) and describe how they behave under various circumstances. 

While there are historically **three** main laws, scientists later added a foundational law called the **Zeroth Law**. Here are all four, clearly explained:

---

### **1. The First Law (Law of Conservation of Energy)**
> **"Energy cannot be created or destroyed; it can only change forms."**

* **What it means:** The total amount of energy in an isolated system (like the universe) remains constant. When heat is added to a system, it either increases the system's internal energy or does work on the surroundings.
* **Equation:** $\Delta U = Q - W$ 
  *(Change in internal energy = Heat added to the system $-$ Work done by the system)*
* **Everyday Example:** A car engine converts the *chemical energy* stored in gasoline into *thermal energy* (heat) and *mechanical energy* (motion). No new energy is created.

---

### **2. The Second Law (Law of Entropy)**
> **"The entropy of an isolated system always increases over time."**

* **What it means:** Natural processes are irreversible. Heat will spontaneously flow from hotter objects to colder objects, but never the reverse on its own. **Entropy** is a measure of disorder or unusable energy; because some energy is always lost as heat in any transfer, the universe becomes increasingly disordered.
* **Consequence:** It is impossible to build a machine that is 100% efficient (a perpetual motion machine).
* **Everyday Example:** If you drop an ice cube into a cup of hot coffee, the heat moves from the coffee to the ice, melting it. You will never see a cup of warm coffee spontaneously separate into boiling coffee and an ice cube.

---

### **3. The Third Law (Absolute Zero)**
> **"The entropy of a pure crystalline substance approaches zero as the temperature approaches absolute zero."**

* **What it means:** **Absolute zero** (0 Kelvin, or $-273.15^\circ\text{C} / -459.67^\circ\text{F}$) is the point where all atomic motion stops. At this temperature, a perfect crystal would have zero disorder (zero entropy). 
* **Consequence:** It is physically impossible to cool any object down to absolute zero in a finite number of steps, though scientists can get within billionths of a degree close.

---

### *Bonus: The Zeroth Law (Thermal Equilibrium)*
*(Formulated after the first two, but deemed so fundamental it was placed before them.)*

> **"If System A is in thermal equilibrium with System B, and System B is in thermal equilibrium with System C, then System A is also in thermal equilibrium with System C."**

* **What it means:** "Thermal equilibrium" simply means no heat flows between two objects because they are the same temperature. This law defines the concept of **temperature** and allows us to use **thermometers**.

---

### **A Common Memory Trick (Ginsberg’s Analogy)**
A humorous way physicists summarize the laws of thermodynamics:
1. **First Law:** You can't win; you can only break even (energy is conserved).
2. **Second Law:** You can't break even (entropy always increases, so energy is lost as unusable heat).
3. **Third Law:** You can't get out of the game (you can never reach absolute zero).
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "The **laws of thermodynamics** define fundamental physical quantities (like temperature, energy, and entropy) and describe how they behave under various circumstances. \n\nWhile there are historically **three** main laws, scientists later added a foundational law called the **Zeroth Law**. Here are all four, clearly explained:\n\n---\n\n### **1. The First Law (Law of Conservation of Energy)**\n> **\"Energy cannot be created or destroyed; it can only change forms.\"**\n\n* **What it means:** The total amount of energy in an isolated system (like the universe) remains constant. When heat is added to a system, it either increases the system's internal energy or does work on the surroundings.\n* **Equation:** $\\Delta U = Q - W$ \n  *(Change in internal energy = Heat added to the system $-$ Work done by the system)*\n* **Everyday Example:** A car engine converts the *chemical energy* stored in gasoline into *thermal energy* (heat) and *mechanical energy* (motion). No new energy is created.\n\n---\n\n### **2. The Second Law (Law of Entropy)**\n> **\"The entropy of an isolated system always increases over time.\"**\n\n* **What it means:** Natural processes are irreversible. Heat will spontaneously flow from hotter objects to colder objects, but never the reverse on its own. **Entropy** is a measure of disorder or unusable energy; because some energy is always lost as heat in any transfer, the universe becomes increasingly disordered.\n* **Consequence:** It is impossible to build a machine that is 100% efficient (a perpetual motion machine).\n* **Everyday Example:** If you drop an ice cube into a cup of hot coffee, the heat moves from the coffee to the ice, melting it. You will never see a cup of warm coffee spontaneously separate into boiling coffee and an ice cube.\n\n---\n\n### **3. The Third Law (Absolute Zero)**\n> **\"The entropy of a pure crystalline substance approaches zero as the temperature approaches absolute zero.\"**\n\n* **What it means:** **Absolute zero** (0 Kelvin, or $-273.15^\\circ\\text{C} / -459.67^\\circ\\text{F}$) is the point where all atomic motion stops. At this temperature, a perfect crystal would have zero disorder (zero entropy). \n* **Consequence:** It is physically impossible to cool any object down to absolute zero in a finite number of steps, though scientists can get within billionths of a degree close.\n\n---\n\n### *Bonus: The Zeroth Law (Thermal Equilibrium)*\n*(Formulated after the first two, but deemed so fundamental it was placed before them.)*\n\n> **\"If System A is in thermal equilibrium with System B, and System B is in thermal equilibrium with System C, then System A is also in thermal equilibrium with System C.\"**\n\n* **What it means:** \"Thermal equilibrium\" simply means no heat flows between two objects because they are the same temperature. This law defines the concept of **temperature** and allows us to use **thermometers**.\n\n---\n\n### **A Common Memory Trick (Ginsberg’s Analogy)**\nA humorous way physicists summarize the laws of thermodynamics:\n1. **First Law:** You can't win; you can only break even (energy is conserved).\n2. **Second Law:** You can't break even (entropy always increases, so energy is lost as unusable heat).\n3. **Third Law:** You can't get out of the game (you can never reach absolute zero).",
            "thoughtSignature": "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"
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 8,
    "candidatesTokenCount": 752,
    "totalTokenCount": 1433,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 8
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 752
      }
    ],
    "thoughtsTokenCount": 673
  },
  "modelVersion": "gemini-3.7-flash",
  "createTime": "2026-08-13T18:07:02.084997Z",
  "responseId": "xgd-aoWYBeumrb8Pht-PuQw"
}

Examples

With System Instruction — Using a system instruction to set an agentic coding persona
const response = await env.AI.run(
  'google/gemini-3.7-flash',
  {
    contents: [
      {
        parts: [
          { text: 'Write a Python function that merges two sorted lists into one sorted list.' },
        ],
        role: 'user',
      },
    ],
    generationConfig: { temperature: 0.2 },
    systemInstruction: {
      parts: [
        {
          text: 'You are an expert software engineering agent. Write concise, correct, well-documented code.',
        },
      ],
    },
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "google/gemini-3.7-flash",
  "input": {
    "contents": [
      {
        "parts": [
          {
            "text": "Write a Python function that merges two sorted lists into one sorted list."
          }
        ],
        "role": "user"
      }
    ],
    "generationConfig": {
      "temperature": 0.2
    },
    "systemInstruction": {
      "parts": [
        {
          "text": "You are an expert software engineering agent. Write concise, correct, well-documented code."
        }
      ]
    }
  }
}'
Here is a clean, efficient Python function using the two-pointer approach, running in $O(n + m)$ time and space complexity:

```python
from typing import TypeVar

T = TypeVar("T")


def merge_sorted_lists(list1: list[T], list2: list[T]) -> list[T]:
    """Merges two pre-sorted lists into a single sorted list.

    Args:
        list1: A sorted list of elements.
        list2: Another sorted list of elements (same comparable type).

    Returns:
        A new sorted list containing all elements from both lists.

    Complexity:
        Time: O(n + m) where n and m are lengths of list1 and list2.
        Space: O(n + m) for the resulting merged list.
    """
    merged: list[T] = []
    i, j = 0, 0
    len1, len2 = len(list1), len(list2)

    # Compare elements from both lists and append the smaller one
    while i < len1 and j < len2:
        if list1[i] <= list2[j]:
            merged.append(list1[i])
            i += 1
        else:
            merged.append(list2[j])
            j += 1

    # Append any remaining elements
    merged.extend(list1[i:])
    merged.extend(list2[j:])

    return merged


# Example usage:
if __name__ == "__main__":
    a = [1, 3, 5, 8]
    b = [2, 4, 6, 7, 9, 10]
    print(merge_sorted_lists(a, b))
    # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```

### Alternative: Standard Library (`heapq.merge`)
If you prefer a built-in generator approach that handles large streams without loading everything into memory upfront:

```python
import heapq


def merge_sorted_lists_lazy(list1: list, list2: list) -> list:
    return list(heapq.merge(list1, list2))
```
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "Here is a clean, efficient Python function using the two-pointer approach, running in $O(n + m)$ time and space complexity:\n\n```python\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\ndef merge_sorted_lists(list1: list[T], list2: list[T]) -> list[T]:\n    \"\"\"Merges two pre-sorted lists into a single sorted list.\n\n    Args:\n        list1: A sorted list of elements.\n        list2: Another sorted list of elements (same comparable type).\n\n    Returns:\n        A new sorted list containing all elements from both lists.\n\n    Complexity:\n        Time: O(n + m) where n and m are lengths of list1 and list2.\n        Space: O(n + m) for the resulting merged list.\n    \"\"\"\n    merged: list[T] = []\n    i, j = 0, 0\n    len1, len2 = len(list1), len(list2)\n\n    # Compare elements from both lists and append the smaller one\n    while i < len1 and j < len2:\n        if list1[i] <= list2[j]:\n            merged.append(list1[i])\n            i += 1\n        else:\n            merged.append(list2[j])\n            j += 1\n\n    # Append any remaining elements\n    merged.extend(list1[i:])\n    merged.extend(list2[j:])\n\n    return merged\n\n\n# Example usage:\nif __name__ == \"__main__\":\n    a = [1, 3, 5, 8]\n    b = [2, 4, 6, 7, 9, 10]\n    print(merge_sorted_lists(a, b))\n    # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n```\n\n### Alternative: Standard Library (`heapq.merge`)\nIf you prefer a built-in generator approach that handles large streams without loading everything into memory upfront:\n\n```python\nimport heapq\n\n\ndef merge_sorted_lists_lazy(list1: list, list2: list) -> list:\n    return list(heapq.merge(list1, list2))\n```",
            "thoughtSignature": "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"
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 32,
    "candidatesTokenCount": 517,
    "totalTokenCount": 1114,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 32
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 517
      }
    ],
    "thoughtsTokenCount": 565
  },
  "modelVersion": "gemini-3.7-flash",
  "createTime": "2026-08-13T19:07:35.820040Z",
  "responseId": "9xV-asiGMqyo3dAP3oHS-Qw"
}
Multi-turn Conversation — Continuing a multi-step coding conversation, typical of an agentic loop
const response = await env.AI.run(
  'google/gemini-3.7-flash',
  {
    contents: [
      {
        parts: [{ text: 'I have a bug where my recursive fibonacci function is too slow for n=40.' }],
        role: 'user',
      },
      {
        parts: [
          {
            text: "That's expected with naive recursion since it recomputes overlapping subproblems exponentially. You can fix it with memoization or an iterative approach. Which would you like to see?",
          },
        ],
        role: 'model',
      },
      { parts: [{ text: 'Show me the memoized version.' }], role: 'user' },
    ],
    generationConfig: { maxOutputTokens: 2048 },
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "google/gemini-3.7-flash",
  "input": {
    "contents": [
      {
        "parts": [
          {
            "text": "I have a bug where my recursive fibonacci function is too slow for n=40."
          }
        ],
        "role": "user"
      },
      {
        "parts": [
          {
            "text": "That'\''s expected with naive recursion since it recomputes overlapping subproblems exponentially. You can fix it with memoization or an iterative approach. Which would you like to see?"
          }
        ],
        "role": "model"
      },
      {
        "parts": [
          {
            "text": "Show me the memoized version."
          }
        ],
        "role": "user"
      }
    ],
    "generationConfig": {
      "maxOutputTokens": 2048
    }
  }
}'
Here is how to memoize the recursive Fibonacci function.

### 1. Using a Dictionary / Cache (Explicit)

You store results of previous calculations in a dictionary and look them up before computing:

```python
def fib(n, memo=None):
    if memo is None:
        memo = {}

    # Check if already computed
    if n in memo:
        return memo[n]

    # Base cases
    if n <= 0:
        return 0
    elif n == 1:
        return 1

    # Store result in memo dictionary
    memo[n] = fib(n - 1, memo) + fib(n - 2, memo)
    return memo[n]


# Test
print(fib(40))  # Returns 102334155 instantly
```

---

### 2. Using Python's Built-in `@lru_cache` (Idiomatic Python)

Python has a built-in decorator that handles memoization automatically:

```python
from functools import lru_cache


@lru_cache(maxsize=None)
def fib(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    return fib(n - 1) + fib(n - 2)


# Test
print(fib(40))  # Returns 102334155 instantly
```

---

### Why this fixes the issue:
* **Naive recursion:** Time complexity is $O(2^n)$ because it recomputes identical values millions of times.
* **Memoized recursion:** Time complexity drops to $O(n)$ because each Fibonacci number from $0$ to $n$ is calculated only once. Space complexity is $O(n)$ to store the cache and recursion stack.
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "Here is how to memoize the recursive Fibonacci function.\n\n### 1. Using a Dictionary / Cache (Explicit)\n\nYou store results of previous calculations in a dictionary and look them up before computing:\n\n```python\ndef fib(n, memo=None):\n    if memo is None:\n        memo = {}\n\n    # Check if already computed\n    if n in memo:\n        return memo[n]\n\n    # Base cases\n    if n <= 0:\n        return 0\n    elif n == 1:\n        return 1\n\n    # Store result in memo dictionary\n    memo[n] = fib(n - 1, memo) + fib(n - 2, memo)\n    return memo[n]\n\n\n# Test\nprint(fib(40))  # Returns 102334155 instantly\n```\n\n---\n\n### 2. Using Python's Built-in `@lru_cache` (Idiomatic Python)\n\nPython has a built-in decorator that handles memoization automatically:\n\n```python\nfrom functools import lru_cache\n\n\n@lru_cache(maxsize=None)\ndef fib(n):\n    if n <= 0:\n        return 0\n    elif n == 1:\n        return 1\n    return fib(n - 1) + fib(n - 2)\n\n\n# Test\nprint(fib(40))  # Returns 102334155 instantly\n```\n\n---\n\n### Why this fixes the issue:\n* **Naive recursion:** Time complexity is $O(2^n)$ because it recomputes identical values millions of times.\n* **Memoized recursion:** Time complexity drops to $O(n)$ because each Fibonacci number from $0$ to $n$ is calculated only once. Space complexity is $O(n)$ to store the cache and recursion stack.",
            "thoughtSignature": "AY89a1+Wv/04SFz0MKQY8n+tFyT0cfnQ+6x5+vRQu2MbyVYQqMErpr6OvgnpAYufyK3yG/BXeedOilTz9V1KgVD1QWF0fywd6r7Yw6Hbfwl+RaCf+zGlEOeM7ZuqPAIjIrQEsfaYbR+THgipFCCvNuP//K5ObnatV7hRrDMt7pqltYwg5NWm/O+0H3YvLp55UZlztXfz8t91zLg4pJKMzutMMaupMh5AAHu/pe40KJg2Id/ZH9QCn0ZqrvwJA/vYoQjUNLmbHRQirXIF5W0o5w0yCF6HBkDHBRnu2OWUi7Ne4DIqAmJJYKv0ePurLSaDJLE09M5XS4WOyd7cSH3sBzVTfxYYRN5OeT5UUGZ16JjPcSc3eaT64u1Ng/erd2fT0NfSa5/P2cWGw9KvxOSsU/19OUoonpBQvhoMhioMg1aL2RyVI9ikxm8cl54JZJbmJpmR60vHsdXPFnBSGdG3DQ3MNv+HKZEr6kXQ1FliGJU8qXGcNOAMkgykbgunAecujeN/vpaC3SBNRdc7yMa6cT1T9FVL1l1Cuxx9OuWSQowkhoniTPsV22uOj6drYlKPU6AJJuhNjv/epFySrCJbB9F1rISGL4wYkAD6mDEmaT0rG15OxjEb97C/8OufUirZpcDDC1jR0sWj7FlS4KCQUsNzdhc5AJhLQPtA3IGgAZzDH3PHvQYhUo29VP6jMhOE5S3fmLa2TSiuKtoYwMaAIzkGdp0xKohPrVFtn9Zajb+7Y6I6TsA0WL7Pg/DTIiooTZBG+dGk49Tt6eFfW/ypKXDy9YErzQF6FTK/V9rgPHEpZdSVvFnOunGZ3I+o02B9esYSqSNQlaBI7Y0/5hpCfgf0Ap9G1sh1WMkuCL40d0jRevBbEZAKqrdG1Gr5whRbjNtWbD/Cx17clPpGT5K3dNq5NJY16xqzPwJyNgj7H9xgNFiJGh5xYzx4PBTN0NsgE1bK6t3BrPkWxG0vB7B4Flyj3HRzGHj43qkT2cRKEoNjsiTGIvvyBaa6QQOYZ5yu2hC6h7mpNntCeU5iaDtQA/NC010PqvELJpqmiGyYM9D9uazoHrelc5STEOyUH6Eei7cfhezFCB0ibUm795StAgZt4WvWpYXif4PMRc/gdsNoWZr9Wo0WhlCm4ivwwoiG71oPbzam8IRp+2PP8evgPm4AogOToIHUQMZFz2OnGXXX8E0I25wMe5D+q9zpLO+st7kOFLl1vITCPvDkjw=="
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 62,
    "candidatesTokenCount": 412,
    "totalTokenCount": 698,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 62
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 412
      }
    ],
    "thoughtsTokenCount": 224
  },
  "modelVersion": "gemini-3.7-flash",
  "createTime": "2026-08-13T19:07:41.574572Z",
  "responseId": "_RV-auyII6ip3dAP16iw4Qw"
}
Spatial Reasoning — Higher thinking budget for a spatial reasoning task
const response = await env.AI.run(
  'google/gemini-3.7-flash',
  {
    contents: [
      {
        parts: [
          {
            text: 'A cube is painted red on all faces, then cut into 27 equal smaller cubes. How many of the smaller cubes have exactly two red faces?',
          },
        ],
        role: 'user',
      },
    ],
    generationConfig: { maxOutputTokens: 4096 },
  },
)
console.log(response)
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
  "model": "google/gemini-3.7-flash",
  "input": {
    "contents": [
      {
        "parts": [
          {
            "text": "A cube is painted red on all faces, then cut into 27 equal smaller cubes. How many of the smaller cubes have exactly two red faces?"
          }
        ],
        "role": "user"
      }
    ],
    "generationConfig": {
      "maxOutputTokens": 4096
    }
  }
}'
To find the number of smaller cubes with **exactly two red faces**, we can analyze how the $3 \times 3 \times 3$ cube is structured:

1. **Corner cubes (3 painted faces):** There are **8** corners in a cube.
2. **Edge cubes (excluding corners, 2 painted faces):** A cube has 12 edges. With a $3 \times 3 \times 3$ cut, each edge has 1 middle cube with 2 painted faces:
   $$\text{Number of cubes} = 12 \times (3 - 2) = 12$$
3. **Face-center cubes (1 painted face):** There is 1 in the center of each of the 6 faces = **6**.
4. **Interior cube (0 painted faces):** There is **1** cube completely inside.

*(Check: $8 + 12 + 6 + 1 = 27$ total cubes)*

Therefore, there are **12** smaller cubes with exactly two red faces.
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "To find the number of smaller cubes with **exactly two red faces**, we can analyze how the $3 \\times 3 \\times 3$ cube is structured:\n\n1. **Corner cubes (3 painted faces):** There are **8** corners in a cube.\n2. **Edge cubes (excluding corners, 2 painted faces):** A cube has 12 edges. With a $3 \\times 3 \\times 3$ cut, each edge has 1 middle cube with 2 painted faces:\n   $$\\text{Number of cubes} = 12 \\times (3 - 2) = 12$$\n3. **Face-center cubes (1 painted face):** There is 1 in the center of each of the 6 faces = **6**.\n4. **Interior cube (0 painted faces):** There is **1** cube completely inside.\n\n*(Check: $8 + 12 + 6 + 1 = 27$ total cubes)*\n\nTherefore, there are **12** smaller cubes with exactly two red faces.",
            "thoughtSignature": "AY89a18GhPrAzwD4+OG6wmLOGj2YZE0gv9PY76IqT4vccoHQerNJubk8VCyX0atC0qHPy/28tlQG5WlMvbqfovvGqrSJeNHSVC6RoyKD7SMGVnSOw83d5XDYxirhMa5XgVbtEF6O5t03QYpIyB/ice00yWw9US/osp4NOYRDYTPA6uekMJkCjFH8lNuYP4RnEFmEXHyxBtnlrcXvB2fy9bWxZEw3ck69faKWfJF/Ia0oy27SOdIaQTzcczJum9F+AnjliMkpY4EdIm+5KvOwrZCgcz+QWfNGQBu9SOK9qalhHHiI7diBhU8f4Dans3S1a1A9jKV8mOelXtaNDOXOKSk45muOSxds5JF/wb/2XAdTpgLt2cLE/vOuF4c4WBA+vpV9lvwlHKGMklvwFz7kSwnVOLnxglQwQl9ykyfdcInHzlaWAzfzEu7tq/Zkmp67DBtN7ZeG/teVlPIqm63uwBrQT8MOWVB27Ah59QI57TzclfNs0scwjmTlzFIzrzEKx+uz4Z4ekistTu8yGW12Gk8ypl5HEwZnOS8JpRR/ln20XV95oMb27LA6qnnW71S5SUva8+PdQsRw3NmeIp1FDmjxmuLE43UBcsGn/rj8KymrDRHkC1PHyOU+6je4J+/fma44zwfp4G2YJOit3f8btPUVsjrXH011krTONlK47hfKp08WJO7nCVaw7+gphzRrUMugxl8g7D3kVd5uym1c+lQstrs+FaaXj1VZwM5UUX3p/6ex+gso45qJ+h1OFhmZeOHKF8KTUw86RMdtFC+r1ULthumOSJHmb0nkQKnBqqV7qXdzNVep0rwZHk6rfULTPUQ0XaKAy9dtk8YOeeX7ULaTOHRe044Q9EcZk5eFCF5ktauTBwOG4+7B3R84/TS6DYOKQZSdYukuAQpq9SzlNnZaa1DHc9YLPP0CyPkEJ6yyZjEN78TiLvb+eXW06pPNC/wXVUdx47dq6w8MI16w4CiA8e8r/C7sqKSkD2j0Ksufr+mAq5gwSgOMRQx8vR+SfWp+3i1RvkRHpONZGftNyBuXfPLq1t/Hk6Wci4xkE8k8grwopKdghzHBpknmkz9783YjkeIFQMcoruEgfvzpElGERWmXKg7UqrMaOhY/HNcZ4auUoj8mUMBj+ejiCV/v+YrO6y3TAifJPYJEn4tiV3smbXTIA+UpilF4POrVSoeJkNhb6EVOrDK/UsjP2NNKNclL6F19JurykzmBrQZZs8vVn5KWLxkBXkdkdGMAjtPRdtX9ggfr+hhTNjBYSpo2sxVDjNhOs977Aie8wsRBejfR3a+OUVwyK9PptIaRqpJVQ9YTu0iUe3PcWUSo6YH+6gsOVSRjFrqj+1Ayq0SXfKisu9hF2HOp/vC03Bx0Weqw6XqYMnNvDSjIKEWTImfuGJyx0MK0VS4bvQm/T7T3OmbGnSsqHPx83n10xw=="
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 31,
    "candidatesTokenCount": 228,
    "totalTokenCount": 602,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 31
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 228
      }
    ],
    "thoughtsTokenCount": 343
  },
  "modelVersion": "gemini-3.7-flash",
  "createTime": "2026-08-13T19:07:45.456897Z",
  "responseId": "ARZ-asHxG6mp3dAP9fHcoQ0"
}

Parameters

Schema variant
toolConfig
modelVersion
string

API Schemas (Raw)

Input
Output

Was this helpful?