Documentation > 
              
                  AI Actions > 
              
                  Install AI Actions 
           
          
          
          Install AI Actions 
AI Actions are available as an LTS update to Ibexa DXP in version v4.6.x or higher, regardless of its edition.
To use this feature you must first install the packages and configure them.
Install packages 
Run the following commands to install the packages:
composer  require  ibexa/connector-ai
composer  require  ibexa/connector-openai
 
This command adds the framework code, a service connector with the OpenAI service, service handlers, Twig templates, and configurations required for using AI Actions.
It also modifies the permission system to account for the new functionality.
Once the packages are installed, before you can start using AI Actions, you must enable them by following these instructions.
Create an OpenAI account, get an API key , and make sure that you set up a billing method .
Then, in the root folder of your project, modify the .env file: find the OPENAI_API_KEY variable and replace a placeholder value with the API key that you got from the AI service.
###> ibexa/connector-openai ### 
OPENAI_API_KEY = sk-svcacct-AFCrCt1h2s3i4s5i6s7t8h9e0a1p2i3c4o5d6e
###< ibexa/connector-openai ### 
 
Modify the database schema 
Create the add_ai_actions.sql file that contains the following code.
MySQL PostgreSQL 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 CREATE   TABLE   ibexa_action_configuration 
( 
     id                          INT   auto_increment   PRIMARY   KEY , 
     identifier                  VARCHAR ( 64 )   NOT   NULL , 
     type                        VARCHAR ( 32 )   NOT   NULL , 
     enabled                     TINYINT ( 1 )   NOT   NULL , 
     action_type_options         JSON   NULL , 
     action_handler_options      JSON   NULL , 
     action_handler_identifier   VARCHAR ( 64 )   NULL , 
     created_at                  DATETIME   NULL   COMMENT   '(DC2Type:datetime_immutable)' , 
     updated_at                  DATETIME   NULL   COMMENT   '(DC2Type:datetime_immutable)' , 
     CONSTRAINT   ibexa_action_configuration_identifier_uc 
         UNIQUE   ( identifier ) 
)   COLLATE   =   utf8mb4_unicode_520_ci ; 
CREATE   INDEX   ibexa_action_configuration_enabled_idx 
     ON   ibexa_action_configuration   ( enabled ); 
CREATE   INDEX   ibexa_action_configuration_identifier_idx 
     ON   ibexa_action_configuration   ( identifier ); 
CREATE   TABLE   ibexa_action_configuration_ml 
( 
     id                        INT   auto_increment   PRIMARY   KEY , 
     action_configuration_id   INT            NOT   NULL , 
     language_id               BIGINT         NOT   NULL , 
     name                      VARCHAR ( 190 )   NOT   NULL , 
     description               LONGTEXT   NULL , 
     CONSTRAINT   ibexa_action_configuration_ml_uidx 
         UNIQUE   ( action_configuration_id ,   language_id ), 
     CONSTRAINT   ibexa_action_configuration_ml_to_action_configuration_fk 
         FOREIGN   KEY   ( action_configuration_id )   REFERENCES   ibexa_action_configuration   ( id ) 
             ON   UPDATE   CASCADE   ON   DELETE   CASCADE , 
     CONSTRAINT   ibexa_action_configuration_ml_to_language_fk 
         FOREIGN   KEY   ( language_id )   REFERENCES   ezcontent_language   ( id ) 
             ON   UPDATE   CASCADE   ON   DELETE   CASCADE 
)   COLLATE   =   utf8mb4_unicode_520_ci ; 
CREATE   INDEX   ibexa_action_configuration_ml_action_configuration_idx 
     ON   ibexa_action_configuration_ml   ( action_configuration_id ); 
CREATE   INDEX   ibexa_action_configuration_ml_language_idx 
     ON   ibexa_action_configuration_ml   ( language_id ); 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 CREATE   TABLE   ibexa_action_configuration   ( id   SERIAL   NOT   NULL ,   identifier   VARCHAR ( 64 )   NOT   NULL ,   type   VARCHAR ( 32 )   NOT   NULL ,   enabled   BOOLEAN   NOT   NULL ,   action_type_options   JSON   DEFAULT   NULL ,   action_handler_options   JSON   DEFAULT   NULL ,   action_handler_identifier   VARCHAR ( 64 )   DEFAULT   NULL ,   created_at   TIMESTAMP ( 0 )   WITHOUT   TIME   ZONE   NOT   NULL ,   updated_at   TIMESTAMP ( 0 )   WITHOUT   TIME   ZONE   NOT   NULL ,   PRIMARY   KEY ( id )); 
CREATE   INDEX   ibexa_action_configuration_identifier_idx   ON   ibexa_action_configuration   ( identifier ); 
CREATE   INDEX   ibexa_action_configuration_enabled_idx   ON   ibexa_action_configuration   ( enabled ); 
CREATE   UNIQUE   INDEX   ibexa_action_configuration_identifier_uc   ON   ibexa_action_configuration   ( identifier ); 
COMMENT   ON   COLUMN   ibexa_action_configuration . created_at   IS   '(DC2Type:datetime_immutable)' ; 
COMMENT   ON   COLUMN   ibexa_action_configuration . updated_at   IS   '(DC2Type:datetime_immutable)' ; 
CREATE   TABLE   ibexa_action_configuration_ml   ( id   SERIAL   NOT   NULL ,   action_configuration_id   INT   NOT   NULL ,   language_id   BIGINT   NOT   NULL ,   name   VARCHAR ( 190 )   NOT   NULL ,   description   TEXT   DEFAULT   NULL ,   PRIMARY   KEY ( id )); 
CREATE   INDEX   ibexa_action_configuration_ml_name_idx   ON   ibexa_action_configuration_ml   ( name ); 
CREATE   INDEX   ibexa_action_configuration_ml_language_idx   ON   ibexa_action_configuration_ml   ( language_id ); 
CREATE   INDEX   ibexa_action_configuration_ml_action_configuration_idx   ON   ibexa_action_configuration_ml   ( action_configuration_id ); 
CREATE   UNIQUE   INDEX   ibexa_action_configuration_ml_uidx   ON   ibexa_action_configuration_ml   ( action_configuration_id ,   language_id ); 
ALTER   TABLE   ibexa_action_configuration_ml   ADD   CONSTRAINT   ibexa_action_configuration_ml_to_language_fk   FOREIGN   KEY   ( language_id )   REFERENCES   ezcontent_language   ( id )   ON   UPDATE   CASCADE   ON   DELETE   CASCADE   NOT   DEFERRABLE   INITIALLY   IMMEDIATE ; 
ALTER   TABLE   ibexa_action_configuration_ml   ADD   CONSTRAINT   ibexa_action_configuration_ml_to_action_configuration_fk   FOREIGN   KEY   ( action_configuration_id )   REFERENCES   ibexa_action_configuration   ( id )   ON   UPDATE   CASCADE   ON   DELETE   CASCADE   NOT   DEFERRABLE   INITIALLY   IMMEDIATE ; 
 
 
 
 
Run the following command, where <database_name> is the same name that you defined when you installed Ibexa DXP .
This command modifies the existing database schema by adding database configuration required for using AI Actions.
You can now restart you application and start working with the AI Actions feature .
Install sample AI action configurations (optional) 
By installing a collection of sample AI action configurations you can quickly start using the feature.
You do it by following a standard data migration  procedure:
php  bin/console  ibexa:migrations:import  vendor/ibexa/connector-openai/src/bundle/Resources/migrations/action_configurations.yaml
php  bin/console  ibexa:migrations:migrate
 
Based on these examples, which reflect the most common use cases, you can learn to configure your own AI actions with greater ease.