File size: 2,005 Bytes
44e79be
04e26ca
 
1e81f15
 
 
44e79be
1e81f15
 
9956ddc
1e81f15
9956ddc
1e81f15
 
9956ddc
 
 
 
 
 
1e81f15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44e79be
04e26ca
 
1e81f15
 
04e26ca
1e81f15
04e26ca
1e81f15
 
04e26ca
1e81f15
9956ddc
04e26ca
1e81f15
63b1ff5
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import gradio as gr
import requests
import os
import io
from PIL import Image
from dotenv import load_dotenv

load_dotenv()

#Générateur d'images
FLUX1_APIKEY = os.getenv('FLUX1_APIKEY')
#LLM
GEMINI_APIKEY = os.getenv('GEMINI_APIKEY')

# TODO : 
# - Prendre en entrée soit un texte, soit un fichier audio (empecher saisie de l'un si l'autre est rempli)
# - Le LLM résume cette entrée en plusieurs axes avec des mots clés par axes
# - Flux génère une diapo par axé généré par le LLM précédemment 
# - On se retrouve en sortie avec plusieurs diapo et des mots clés les accompagnants

def Main(prompt, inputText):
    return GenerateImageFromText(prompt), GenerateTextLLM(inputText)

def GenerateImageFromText(prompt):
    API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
    headers = {"Authorization": f"Bearer {FLUX1_APIKEY}"}

    def query(payload):
        response = requests.post(API_URL, headers=headers, json=payload)
        return response.content

    image_bytes = query({
        "inputs": prompt,
    })
    image = Image.open(io.BytesIO(image_bytes))

    return image

def GenerateTextLLM(inputText):
    
    url = f'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key={GEMINI_APIKEY}'
    headers = {
        'Content-Type': 'application/json'
    }
    data = {
        "contents": [
            {
                "parts": [
                    {
                        "text": inputText
                    }
                ]
            }
        ]
    }

    response = requests.post(url, headers=headers, json=data)

    try:
        return response.json()['candidates'][0]['content']['parts'][0]['text']
    except:
        return 'Error'


outputs_image = [
    gr.components.Image(type="pil", label="Output Image"),
    "text"
]

interface_image = gr.Interface(
    fn=Main,
    inputs=["text", "text"],
    outputs=outputs_image,
    title="Feur",
) 

interface_image.launch()