Spiny commited on
Commit
f0f9756
·
1 Parent(s): 406bb3f

App finale probablement

Browse files
Files changed (3) hide show
  1. app.py +48 -9
  2. prompt.txt +14 -0
  3. requirements.txt +2 -1
app.py CHANGED
@@ -4,6 +4,8 @@ import os
4
  import io
5
  from PIL import Image
6
  from dotenv import load_dotenv
 
 
7
 
8
  load_dotenv()
9
 
@@ -12,14 +14,36 @@ FLUX1_APIKEY = os.getenv('FLUX1_APIKEY')
12
  #LLM
13
  GEMINI_APIKEY = os.getenv('GEMINI_APIKEY')
14
 
 
 
15
  # TODO :
16
  # - Prendre en entrée soit un texte, soit un fichier audio (empecher saisie de l'un si l'autre est rempli)
17
  # - Le LLM résume cette entrée en plusieurs axes avec des mots clés par axes
18
  # - Flux génère une diapo par axé généré par le LLM précédemment
19
  # - On se retrouve en sortie avec plusieurs diapo et des mots clés les accompagnants
20
 
21
- def Main(prompt, inputText):
22
- return GenerateImageFromText(prompt), GenerateTextLLM(inputText)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
  def GenerateImageFromText(prompt):
25
  API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
@@ -34,7 +58,7 @@ def GenerateImageFromText(prompt):
34
  })
35
  image = Image.open(io.BytesIO(image_bytes))
36
 
37
- return [image]
38
 
39
  def GenerateTextLLM(inputText):
40
 
@@ -59,20 +83,35 @@ def GenerateTextLLM(inputText):
59
  try:
60
  return response.json()['candidates'][0]['content']['parts'][0]['text']
61
  except:
62
- return 'Error'
63
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
  outputs_image = [
66
- gr.components.Gallery(type="pil", label="Output Image"),
67
  "text"
68
  ]
69
 
70
  interface_image = gr.Interface(
71
  fn=Main,
72
- inputs=["text", "text"],
73
  outputs=outputs_image,
74
  title="Feur",
75
  )
76
 
77
- interface_image.launch()
78
-
 
4
  import io
5
  from PIL import Image
6
  from dotenv import load_dotenv
7
+ from groq import Groq
8
+ import json
9
 
10
  load_dotenv()
11
 
 
14
  #LLM
15
  GEMINI_APIKEY = os.getenv('GEMINI_APIKEY')
16
 
17
+ initPrompt = open('prompt.txt', 'r').read()
18
+
19
  # TODO :
20
  # - Prendre en entrée soit un texte, soit un fichier audio (empecher saisie de l'un si l'autre est rempli)
21
  # - Le LLM résume cette entrée en plusieurs axes avec des mots clés par axes
22
  # - Flux génère une diapo par axé généré par le LLM précédemment
23
  # - On se retrouve en sortie avec plusieurs diapo et des mots clés les accompagnants
24
 
25
+ def Main(prompt, inputText, audioFile):
26
+ finalText = ''
27
+ listOfImages = []
28
+
29
+ import json
30
+
31
+ transcribedText = TranscribeAudio(audioFile)
32
+ print(transcribedText)
33
+ fullDiapoTxt = GenerateTextLLM(initPrompt + transcribedText)
34
+ print(fullDiapoTxt)
35
+ fullDiapoJson = json.loads(fullDiapoTxt)
36
+
37
+ for diapo in fullDiapoJson:
38
+ title = diapo['titre']
39
+ content = diapo['contenu']
40
+ imgPrompt = diapo['image_prompt']
41
+
42
+ finalText += 'Titre : ' + title + '\nContenu : ' + content + '\n\n'
43
+
44
+ listOfImages.append(GenerateImageFromText(imgPrompt))
45
+
46
+ return listOfImages, finalText
47
 
48
  def GenerateImageFromText(prompt):
49
  API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
 
58
  })
59
  image = Image.open(io.BytesIO(image_bytes))
60
 
61
+ return image, ''
62
 
63
  def GenerateTextLLM(inputText):
64
 
 
83
  try:
84
  return response.json()['candidates'][0]['content']['parts'][0]['text']
85
  except:
86
+ raise Exception("Error :" + response.json())
87
+
88
+ def TranscribeAudio(filepath):
89
+ client = Groq()
90
+
91
+ with open(filepath, "rb") as file:
92
+ transcription = client.audio.transcriptions.create(
93
+ file=(filepath, file.read()),
94
+ model="whisper-large-v3",
95
+ prompt="Specify context or spelling",
96
+ response_format="json",
97
+ language="fr",
98
+ )
99
+ return transcription.text
100
+
101
+ inputs = [
102
+ gr.Audio(sources='microphone', type='filepath', label="Fichier audio")
103
+ ]
104
 
105
  outputs_image = [
106
+ gr.Gallery(type="pil", label="Output Image"),
107
  "text"
108
  ]
109
 
110
  interface_image = gr.Interface(
111
  fn=Main,
112
+ inputs=inputs,
113
  outputs=outputs_image,
114
  title="Feur",
115
  )
116
 
117
+ interface_image.launch()
 
prompt.txt ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Je vais te fournir un texte, il faut faire un résumé du contenu de celui ci sous forme de 3 points clé, qui seront utilisé pour un powerpoint (Tu génèrera le titre de la diapo, son contenu texuel, ainsi qu'un prompt pour générer une image de contexte approprié). Tu ne doit répondre uniquement en format JSON sans explications suplémentaire.
2
+ Exemple de format de réponse:
3
+ [
4
+ {
5
+ "titre": "*Exemple de titre de la diapo 1*",
6
+ "contenu": "*Exemple de contenu de la diapo 1*",
7
+ "image_prompt": "*Prompt d'exemple pour générer une image de context en lien avec la diapo*"
8
+ },
9
+ {
10
+ *pareil pour diapo 2, ect.*
11
+ }
12
+ ]
13
+ ** VOICI LE TEXT : **
14
+
requirements.txt CHANGED
@@ -46,4 +46,5 @@ thop>=0.1.1 # FLOPs computation
46
  # HUB -----------------------------------------
47
  GitPython>=3.1.24
48
 
49
- python-dotenv
 
 
46
  # HUB -----------------------------------------
47
  GitPython>=3.1.24
48
 
49
+ python-dotenv
50
+ groq