Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/ai_actions/ai_actions_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Wherever you look, artificial intelligence becomes more and more important by en
AI Actions is an extensible solution for integrating features provided by AI services into your workflows, all managed through a user-friendly interface.

Out-of-the-box, AI Actions solution includes two essential components: a framework package and an OpenAI connector package.
The Anthropic connector is also available - as an [LTS update](editions.md#lts-updates).
The Anthropic and Gemini connectors are also available - as [LTS updates](editions.md#lts-updates).

AI Actions can integrate with [[[= product_name_connect =]]]([[= connect_doc =]]/general/ibexa_connect/), to give you an opportunity to build complex data transformation workflows without having to rely on custom code.
From the developer's perspective, the integration removes the burden of maintaining third-party AI handlers, and accelerates the deployment of AI-based solutions.
Expand Down
108 changes: 108 additions & 0 deletions docs/ai_actions/configure_ai_actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,114 @@
```
You can now use the Anthropic connector in your project.

## Install Google Gemini connector [[% include 'snippets/lts-update_badge.md' %]]

Run the following command to install the package:

``` bash
composer require ibexa/connector-gemini
```

This command adds the feature code, including basic handlers that let you refine text or generate alternative text for images.

### Get API key

To use the connector with the Gemini services, you need to create an account, set up billing, enable Gemini API and get an API key.

Check warning on line 98 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L98

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 98, "column": 1}}}, "severity": "WARNING"}

#### Create the Google Cloud project

1. Sign in to the [Google Cloud Console](https://console.cloud.google.com/).

Check failure on line 102 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L102

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 102, "column": 76}}}, "severity": "ERROR"}
1. In the top bar, click **Default Gemini Project** to open a project picker.

Check failure on line 103 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L103

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 103, "column": 77}}}, "severity": "ERROR"}
1. Click **New project** and provide project details:
1. Add project name, for example, "My project".

Check failure on line 105 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L105

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 105, "column": 6}}}, "severity": "ERROR"}
1. Modify the automatically generated **Project ID** if necessary.

Check failure on line 106 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L106

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 106, "column": 6}}}, "severity": "ERROR"}
1. Select location: choose your organization.

Check failure on line 107 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L107

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 107, "column": 49}}}, "severity": "ERROR"}
1. Click **Create**.

Check failure on line 108 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L108

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 108, "column": 21}}}, "severity": "ERROR"}

#### Configure billing

1. Navigate to the Google Cloud Console's **Billing** page.

Check failure on line 112 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L112

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 112, "column": 59}}}, "severity": "ERROR"}
1. If you do not have one, click **Add billing account** and add a payment method.

Check failure on line 113 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L113

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 113, "column": 82}}}, "severity": "ERROR"}
1. In **Your projects** tab, locate your project, and in its line, from the **Actions** menu, select **Change billing**.

Check failure on line 114 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L114

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 114, "column": 120}}}, "severity": "ERROR"}
1. Select your active billing account, and click **Set account**.

Check failure on line 115 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L115

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 115, "column": 65}}}, "severity": "ERROR"}

Check warning on line 115 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L115

[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.
Raw output
{"message": "[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 115, "column": 66}}}, "severity": "WARNING"}

#### Enable the Gemini API

Check warning on line 117 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L117

[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.
Raw output
{"message": "[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 117, "column": 27}}}, "severity": "WARNING"}

1. Navigate to the Google Cloud Console's **APIs & Services** page.

Check failure on line 119 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L119

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 119, "column": 67}}}, "severity": "ERROR"}
1. From the left-hand menu, select **Library** and search for the Generative Language API.

Check failure on line 120 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L120

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 120, "column": 90}}}, "severity": "ERROR"}
1. In the API's details page, click **Enable**.

Check failure on line 121 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L121

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 121, "column": 47}}}, "severity": "ERROR"}

#### Generate the API key

1. Go to [Google AI Studio](https://aistudio.google.com/app/api-keys)'s **API keys** page, and click **Create API key**.
1. Provide a name for the API key, select "My project" from a list of projects and click **Create key**.
1. Back in the **API keys** list, in your project's line, copy the API key.

Check failure on line 127 in docs/ai_actions/configure_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/configure_ai_actions.md#L127

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/configure_ai_actions.md", "range": {"start": {"line": 127, "column": 75}}}, "severity": "ERROR"}

### Set API key in configuration

Then, in the root folder of your project, modify the `.env` file: add an `GEMINI_API_KEY` variable and populate its value with the API key that you got from the AI service.

```bash
###> ibexa/connector-gemini ###
GEMINI_API_KEY=<your_api_key>
###< ibexa/connector-gemini ###
```

!!! note "Different API keys for different SiteAccesses"

If there are multiple SiteAccesses in your installation, you can set different API keys for each SiteAccess.
To do it, set the keys under the `ibexa.system.<scope>` [configuration key](configuration.md#configuration-files), like so:

```yaml
ibexa:
system:
default:
connector_gemini:
gemini:
api_key: '%env(GEMINI_API_KEY)%'
base_url: 'https://generativelanguage.googleapis.com/v1beta/' # Google Gemini's API endpoint
```

### Configure default models

By default, when reaching out for responses, the Gemini connector uses the Gemini Pro [model](https://ai.google.dev/gemini-api/docs/models) for text refinement and Gemini Flash model for alternative text generation.
Users can override this setting at runtime when they [edit or create an AI action]([[= user_doc =]]/ai_actions/work_with_ai_actions/#edit-existing-ai-actions).
You can also change the default values globally.
To do it, in `config/packages` folder, create a YAML file similar to this example:

```yaml
ibexa_connector_gemini:
text_to_text:
models:
gemini-pro-latest:
label: 'Gemini Pro Latest'
max_tokens: 4096
gemini-flash-latest:
label: 'Gemini Flash Latest'
max_tokens: 4096
default_model: gemini-pro-latest
default_max_tokens: 4096 # Must be <= the model’s max_tokens
default_temperature: 0.8
image_to_text:
models:
gemini-flash-latest:
label: 'Gemini Flash Latest'
max_tokens: 4096
default_model: gemini-flash-latest
default_max_tokens: 4096
default_temperature: 1.0
```

When setting up models, make sure that you follow these rules:

- `default_model` must reference a configured model
- `default_max_tokens` must not exceed the model’s limit
- If you use the same model for different action types, settings must be consistent

You can now use the Gemini connector in your project.

For more information, see [Extend Gemini connector](extend_ai_actions.md#extend-google-gemini-connector).

## Configure access to [[= product_name_connect =]]

First, get the credentials by contacting [Ibexa Support](https://support.ibexa.co).
Expand Down
61 changes: 61 additions & 0 deletions docs/ai_actions/extend_ai_actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -374,3 +374,64 @@
Your custom Action Type is now fully integrated into the back office UI and can be used by the Editors.

![Transcribe Audio Action Type integrated into the back office](img/transcribe_audio.png "Transcribe Audio Action Type integrated into the back office")

## Extend Google Gemini connector [[% include 'snippets/lts-update_badge.md' %]]

The Gemini connector provides several extension points that allow you to customize available models, behavior, validation, and response handling, while remaining compatible with the AI Actions framework.

The connector builds Gemini requests in an options provider and formats responses through a response formatter.
Both components can be replaced or extended to customize how requests are constructed and how responses are normalized.

### Add or customize models

You can register additional Gemini models or customize existing ones by extending the connector’s model [configuration](configure_ai_actions.md#configure-default-models).

Extend the models map by defining:

- a human-readable label
- a `max_tokens` limit

Optionally, you can set the default model that would be used for the action type that you're modifying, the default allowed tokens limit and the default temperature.
Default values must stay within the limits supported by the [Gemini API](https://ai.google.dev/gemini-api/docs/models).

### Add a custom Action Handler

To introduce a new Gemini-based AI action:

1. Create a handler that extends `Ibexa\Contracts\ConnectorAi\Action\AbstractActionHandler`.

Check failure on line 401 in docs/ai_actions/extend_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/extend_ai_actions.md#L401

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/extend_ai_actions.md", "range": {"start": {"line": 401, "column": 92}}}, "severity": "ERROR"}
1. Register the handler in `services/ai_action_handlers.yaml`.

Check failure on line 402 in docs/ai_actions/extend_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/extend_ai_actions.md#L402

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/extend_ai_actions.md", "range": {"start": {"line": 402, "column": 56}}}, "severity": "ERROR"}
1. Provide supporting components as needed:
- a prompt factory
- a form type for configuration
- validators for action options

This follows the same extension mechanism as other [custom AI actions](#create-custom-action-handler).

### Add custom response formatting

To change how Gemini responses are post-processed or normalized:

1. Implement the `Ibexa\ConnectorGemini\Response\GeminiResponseFormatterInterface` interface.

Check failure on line 414 in docs/ai_actions/extend_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/extend_ai_actions.md#L414

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/extend_ai_actions.md", "range": {"start": {"line": 414, "column": 93}}}, "severity": "ERROR"}
1. Alias your implementation in the service container to override the default formatter.

Check failure on line 415 in docs/ai_actions/extend_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/extend_ai_actions.md#L415

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/extend_ai_actions.md", "range": {"start": {"line": 415, "column": 88}}}, "severity": "ERROR"}

### Add custom validation

Add extra validation rules for Gemini action configuration options by tagging custom validators:

- For `text-to-text` actions:

``` yaml
ibexa.connector_ai.action_configuration.options.validator.gemini_text_to_text
```

- For `image-to-text` actions:

``` yaml
ibexa.connector_ai.action_configuration.options.validator.gemini_image_to_text
```

### Replace the Gemini client implementation

To get full control over the low-level API communication without modifying the connector itself, you can swap the Gemini client implementation entirely with your own:

- Use dependency injection to bind your own implementation to `Ibexa\ConnectorGemini\Client\GeminiClientInterface`.

Check failure on line 437 in docs/ai_actions/extend_ai_actions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai_actions/extend_ai_actions.md#L437

[Ibexa.Lists] Do not put fullstops at the end of bullets
Raw output
{"message": "[Ibexa.Lists] Do not put fullstops at the end of bullets", "location": {"path": "docs/ai_actions/extend_ai_actions.md", "range": {"start": {"line": 437, "column": 115}}}, "severity": "ERROR"}
1 change: 1 addition & 0 deletions docs/ibexa_products/editions.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ The features brought by LTS Updates become standard parts of the next LTS releas
| Feature | [[= product_name_headless =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
|-----------------|-----------------|-----------------|-----------------|
| [Anthropic connector](configure_ai_actions.md#install-anthropic-connector) | &#10004; | &#10004; | &#10004; |
| [Google Gemini connector](configure_ai_actions.md#install-google-gemini-connector) | &#10004; | &#10004; | &#10004; |
| [Integrated help](integrated_help.md) | &#10004; | &#10004; | &#10004; |
10 changes: 10 additions & 0 deletions docs/release_notes/ibexa_dxp_v5.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,16 @@ month_change: false

<div class="release-notes" markdown="1">

[[% set version = 'v5.0.6' %]]

[[= release_note_entry_begin("Google Gemini connector " + version, '2026-02-03', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]

This release introduces a new AI connector that allows you to integrate [AI Actions](ai_actions.md) with [Google Gemini](https://gemini.google/overview/#what-gemini-is).

For more information, see how to [install and configure the Google Gemini connector](configure_ai_actions.md#install-google-gemini-connector).

[[= release_note_entry_end() =]]

[[% set version = 'v5.0.5' %]]

[[= release_note_entry_begin("Ibexa DXP " + version, '2026-01-15', ['Headless', 'Experience', 'Commerce']) =]]
Expand Down