> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/blocks/blocks/run-a-model/google-gemma.md).

# Google Gemma

Run Google's Gemma model with vision capabilities via OpenRouter.

Ask a question to Google's Gemma model with vision capabilities.

You can specify arbitrary text prompts or predefined ones, the block supports the following types of prompt:

* **Open Prompt** (`unconstrained`) - Use any prompt to generate a raw response
* **Text Recognition (OCR)** (`ocr`) - Model recognizes text in the image
* **Visual Question Answering** (`visual-question-answering`) - Model answers the question you submit in the prompt
* **Captioning (short)** (`caption`) - Model provides a short description of the image
* **Captioning** (`detailed-caption`) - Model provides a long description of the image
* **Single-Label Classification** (`classification`) - Model classifies the image content as one of the provided classes
* **Multi-Label Classification** (`multi-label-classification`) - Model classifies the image content as one or more of the provided classes
* **Unprompted Object Detection** (`object-detection`) - Model detects and returns the bounding boxes for prominent objects in the image
* **Structured Output Generation** (`structured-answering`) - Model returns a JSON response with the specified fields

#### 🛠️ API providers and model variants

Gemma is exposed via [OpenRouter](https://openrouter.ai/). By default this block uses the **Roboflow-managed OpenRouter key** and bills your Roboflow credits - no extra setup needed. To bypass Roboflow billing, paste your own `sk-or-...` key into the `api_key` field.

The `privacy_level` field controls which OpenRouter providers may serve the request:

* **No data collection** *(default)* – providers may not train on your inputs.
* **Allow data collection** – broader provider pool, including providers that train on inputs.
* **Zero data retention** – strictest, restricts to providers that retain nothing.

#### 💡 Further reading and Acceptable Use Policy

{% hint style="warning" %}
**Model license**

Check the [Gemma Terms of Use](https://ai.google.dev/gemma/terms) before use.
{% endhint %}

### Type identifier

Use the following identifier in step `"type"` field: `roboflow_core/google_gemma@v2` to add the block as a step in your workflow.

### Properties

| **Name**                  | **Type**         | **Description**                                                                                                                                                                  | Refs |
| ------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
| `name`                    | `str`            | Enter a unique identifier for this step..                                                                                                                                        | ❌    |
| `api_key`                 | `str`            | OpenRouter API key. Defaults to Roboflow's managed key, billed in credits via Roboflow. Provide your own `sk-or-...` key to call OpenRouter directly without Roboflow billing..  | ✅    |
| `privacy_level`           | `str`            | Provider privacy filter. Stricter levels reduce the pool of providers and may increase per-call cost on the managed key..                                                        | ❌    |
| `max_tokens`              | `int`            | Maximum number of tokens the model can generate in its response..                                                                                                                | ❌    |
| `temperature`             | `float`          | Temperature to sample from the model - value in range 0.0-2.0, the higher - the more random / "creative" the generations are..                                                   | ✅    |
| `max_concurrent_requests` | `int`            | Number of concurrent requests for batches of images. If not given - block defaults to value configured globally in Workflows Execution Engine. Restrict if you hit rate limits.. | ❌    |
| `task_type`               | `str`            | Task type to be performed by model. Value determines required parameters and output response..                                                                                   | ❌    |
| `prompt`                  | `str`            | Text prompt to the Gemma model.                                                                                                                                                  | ✅    |
| `output_structure`        | `Dict[str, str]` | Dictionary with structure of expected JSON response.                                                                                                                             | ❌    |
| `classes`                 | `List[str]`      | List of classes to be used.                                                                                                                                                      | ✅    |
| `model_version`           | `str`            | Model to be used.                                                                                                                                                                | ✅    |

The **Refs** column marks possibility to parametrise the property with dynamic values available in `workflow` runtime. See *Bindings* for more info.

### Runtime compatibility

`requires_internet` - air-gapped / offline deployments : This block depends on a service that is not reachable from fully offline / air-gapped deployments.

### Input and Output Bindings

The available connections depend on its binding kinds. Check what binding kinds `Google Gemma` in version `v2` has.

<details>

<summary>Input and output bindings</summary>

* input
  * `api_key` (*Union\[*[*`ROBOFLOW_MANAGED_KEY`*](/workflows/developer-guide/developer-guide/kinds/roboflow-managed-key.md)*,* [*`secret`*](/workflows/developer-guide/developer-guide/kinds/secret.md)*,* [*`string`*](/workflows/developer-guide/developer-guide/kinds/string.md)*]*): OpenRouter API key. Defaults to Roboflow's managed key, billed in credits via Roboflow. Provide your own `sk-or-...` key to call OpenRouter directly without Roboflow billing..
  * `temperature` ([*`float`*](/workflows/developer-guide/developer-guide/kinds/float.md)): Temperature to sample from the model - value in range 0.0-2.0, the higher - the more random / "creative" the generations are..
  * `images` ([*`image`*](/workflows/developer-guide/developer-guide/kinds/image.md)): The image to infer on..
  * `prompt` ([*`string`*](/workflows/developer-guide/developer-guide/kinds/string.md)): Text prompt to the Gemma model.
  * `classes` ([*`list_of_values`*](/workflows/developer-guide/developer-guide/kinds/list-of-values.md)): List of classes to be used.
  * `model_version` ([*`string`*](/workflows/developer-guide/developer-guide/kinds/string.md)): Model to be used.
* output
  * `output` (*Union\[*[*`string`*](/workflows/developer-guide/developer-guide/kinds/string.md)*,* [*`language_model_output`*](/workflows/developer-guide/developer-guide/kinds/language-model-output.md)*]*): String value if `string` or LLM / VLM output if `language_model_output`.
  * `classes` ([`list_of_values`](/workflows/developer-guide/developer-guide/kinds/list-of-values.md)): List of values of any type.

</details>

<details>

<summary>Example JSON definition</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/google_gemma@v2",
	    "api_key": "rf_key:account",
	    "privacy_level": "<block_does_not_provide_example>",
	    "max_tokens": "<block_does_not_provide_example>",
	    "temperature": "<block_does_not_provide_example>",
	    "max_concurrent_requests": "<block_does_not_provide_example>",
	    "images": "$inputs.image",
	    "task_type": "<block_does_not_provide_example>",
	    "prompt": "my prompt",
	    "output_structure": {
	        "my_key": "description"
	    },
	    "classes": [
	        "class-a",
	        "class-b"
	    ],
	    "model_version": "Gemma 4 31B - OpenRouter"
	}
```

</details>
