DALL·E 3 pour votre entreprise

Introduction

La génération d’images par intelligence artificielle a franchi un nouveau cap avec DALL·E 3, la dernière innovation d’OpenAI. Ce modèle d’IA est capable de créer des images et des illustrations à partir d’une simple description textuelle, ouvrant ainsi de nouvelles perspectives pour les créateurs de contenu, illustrer des slides..

Mise en Place d’une Plateforme Interne DALL·E 3

Dans l’objectif de faire découvrir le potentiel de DALL·E 3 au sein de votre entreprise, nous avons allons mettre en œuvre une plateforme démo conçue avec Flask.

Cette solution interne permet à vos employés de créer des visuels innovants en convertissant simplement leur texte descriptif en images. Une initiative parfaite pour encourager l’usage de DALL·E 3 en interne et garantir la confidentialité des données, tout en évitant l’utilisation de services publics tels que GPT ou DALL·E en dehors de l’environnement contrôlé de l’entreprise.

Création de l’environnement

Pour commencer créer un fichier appellé app.py

from flask import Flask, request, jsonify, render_template
from openai import AzureOpenAI
import os
import requests
import json

# Initialisez l'application Flask
app = Flask(__name__)

# Instanciez le client AzureOpenAI avec vos informations d'identification Azure
client = AzureOpenAI(
    api_version="2024-02-01",
    api_key=os.environ["AZURE_OPENAI_API_KEY"],  # Utilisez le nom de la variable d'environnement
    azure_endpoint=os.environ['AZURE_OPENAI_ENDPOINT']  # Utilisez le nom de la variable d'environnement
)

@app.route('/', methods=['GET'])
def index():
    # Affichez le formulaire HTML où les utilisateurs peuvent saisir leur prompt
    return render_template('index.html')

@app.route('/generate-image', methods=['POST'])
def generate_image():
    # Récupérez le prompt de la requête POST
    prompt = request.json.get('prompt')
    if not prompt:
        return jsonify({"error": "No prompt provided"}), 400

    try:
        # Générez l'image à l'aide de DALL·E sur Azure
        result = client.images.generate(
            model="dalle3",  # Remplacez par le nom de votre modèle DALL-E 3 déployé
            prompt=prompt,
            n=1
        )

        # Chargez la réponse JSON et extrayez l'URL de l'image
        json_response = json.loads(result.model_dump_json())
        image_url = json_response["data"][0]["url"]

        # Renvoyez l'URL de l'image en réponse
        return jsonify({"image_url": image_url}), 200

    except Exception as e:
        # Gérez les erreurs et renvoyez un message d'erreur adéquat
        return jsonify({"error": str(e)}), 500

# Démarrez l'application Flask
if __name__ == '__main__':
    app.run(debug=True)

Puis un fichier appellé Dockerfile

# Utilisez une image de base Python officielle
FROM python:3.8-slim

# Définissez le répertoire de travail dans le conteneur
WORKDIR /app

# Copiez les fichiers de dépendances dans le conteneur et installez-les
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copiez le reste des fichiers de l'application dans le conteneur
COPY . .

# Exposez le port sur lequel Flask s'exécute
EXPOSE 5000

# Définissez la variable d'environnement utilisée par Flask
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0

# Lancez l'application Flask
CMD ["flask", "run"]

Le requirements.txt qui va bien :

Flask
openai
requests

Pour le front un simple index.html

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Générateur d'images DALL·E</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
            display: flex;
            flex-direction: column;
            align-items: center;
        }
        #image-container img {
            max-width: 100%;
            max-height: 500px;
        }
    </style>
</head>
<body>
    <h1>Générateur d'images DALL·E</h1>
    <form id="image-form">
        <input type="text" id="prompt" name="prompt" placeholder="Décrivez l'image que vous souhaitez générer" required>
        <button type="submit">Générer l'image</button>
    </form>
    <div id="image-container"></div>

    <script>
        $(document).ready(function() {
            $('#image-form').on('submit', function(e) {
                e.preventDefault();
                var prompt = $('#prompt').val();
                $.ajax({
                    url: '/generate-image',
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify({ prompt: prompt }),
                    success: function(data) {
                        if (data.image_url) {
                            $('#image-container').html(`<img src="${data.image_url}" alt="Image générée">`);
                        } else {
                            $('#image-container').html('Erreur : Image non générée.');
                        }
                    },
                    error: function(xhr, status, error) {
                        $('#image-container').html('Une erreur est survenue : ' + error);
                    }
                });
            });
        });
    </script>
</body>
</html>

Pour faciliter le lancement et la gestion de votre application DALL·E au sein de votre entreprise, je vous propose de mettre en place un fichier docker-compose.yaml. Ce fichier va permettre de définir et de configurer tous les services nécessaires en utilisant Docker Compose. Voici un exemple de configuration pour démarrer votre application :

version: '3.8'
services:
  web:
    image: myownregistry:5000/dallee-playground:v1.2
    ports:
      - "9170:5000"
    environment:
      - AZURE_OPENAI_API_KEY=SECRETPASSOWRD
      - AZURE_OPENAI_ENDPOINT=https://ravindra-job.openai.azure.com/

Dans ce fichier docker-compose.yaml, le service web est configuré pour utiliser une image Docker spécifique, dallee-playground, qui est hébergée dans votre registre privé à l’adresse myownregistry:5000.

Les ports sont mappés de sorte que le port 9170 sur l’hôte soit relié au port 5000 dans le conteneur, ce qui est le port par défaut pour une application Flask.

Les variables d’environnement AZURE_OPENAI_API_KEY et AZURE_OPENAI_ENDPOINT sont définies pour permettre à votre application de se connecter à l’API Azure OpenAI.

Remplacez SECRETPASSOWRD par votre véritable clé d’API OpenAI, en veillant à sécuriser correctement cette information sensible.

Une fois ce fichier configuré, vous pouvez démarrer votre application en exécutant la commande docker-compose up -d depuis le répertoire où se trouve le fichier docker-compose.yaml.

Usage en production

Le schéma de code présenté ici est destiné à un environnement de développement (DEV) et est conçu dans un but d’illustration simple et épurée. Il n’est pas adapté pour une utilisation directe en production (PROD).

Pour déployer cette application DALL·E 3 en environnement de production, je recommande d’adopter une structure de projet plus robuste, comme celle présentée ci-après :

/dalle_enterprise_app/
|-- /app/
|   |-- __init__.py
|   |-- views.py
|   |-- forms.py
|   |-- models.py
|   |-- /static/
|   |   |-- /css/
|   |   |   |-- main.css
|   |   |-- /js/
|   |   |   |-- main.js
|   |   |-- /images/
|   |       |-- placeholder.png
|   |-- /templates/
|       |-- layout.html
|       |-- index.html
|       |-- generate.html
|       |-- login.html
|-- config.py
|-- run.py
|-- .env
|-- .gitignore
|-- requirements.txt
|-- Dockerfile