MisterAI commited on
Commit
fdecf36
·
verified ·
1 Parent(s): 4e2a7f1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -40
app.py CHANGED
@@ -2,7 +2,6 @@
2
  #app.py_144
3
  #Uniquement Granite 3b instruct
4
 
5
-
6
  import os
7
  import gradio as gr
8
  from transformers import AutoModelForCausalLM, AutoTokenizer
@@ -11,14 +10,6 @@ from pptx.util import Inches, Pt
11
  import torch
12
  import time
13
 
14
- #TEXT_MODELS = {
15
- # "Utter-Project_EuroLLM-1.7B": "utter-project/EuroLLM-1.7B",
16
- # "Mistral Nemo 2407 (GGUF)": "MisterAI/Bartowski_MistralAI_Mistral-Nemo-Instruct-2407-IQ4_XS.gguf",
17
- ## "Mixtral 8x7B": "mistralai/Mixtral-8x7B-v0.1",
18
- # "Lucie 7B": "OpenLLM-France/Lucie-7B"
19
- #}
20
-
21
-
22
  # Configuration du modèle unique
23
  MODEL_PATH = "ibm-granite/granite-3.1-3b-a800m-Instruct"
24
 
@@ -79,16 +70,14 @@ class PresentationGenerator:
79
  self.tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
80
  self.model = AutoModelForCausalLM.from_pretrained(
81
  MODEL_PATH,
82
- torch_dtype=torch.float32, # Utilisation de float32 pour plus de stabilité
83
- device_map="auto" # Laisse le modèle choisir le meilleur device
84
  )
85
- self.model.eval() # Mode évaluation
86
  print("Modèle initialisé avec succès!")
87
 
88
  def generate_text(self, prompt, temperature=0.7, max_tokens=2048):
89
- """Génère le texte de la présentation selon le format Granite"""
90
  try:
91
- # Formatage du chat selon les instructions Granite
92
  chat = [{"role": "user", "content": prompt}]
93
  formatted_prompt = self.tokenizer.apply_chat_template(
94
  chat,
@@ -96,7 +85,6 @@ class PresentationGenerator:
96
  add_generation_prompt=True
97
  )
98
 
99
- # Tokenisation et génération
100
  inputs = self.tokenizer(
101
  formatted_prompt,
102
  return_tensors="pt",
@@ -120,7 +108,6 @@ class PresentationGenerator:
120
  raise
121
 
122
  def parse_presentation_content(self, content):
123
- """Parse le contenu généré en sections pour les diapositives"""
124
  slides = []
125
  current_slide = None
126
 
@@ -143,14 +130,11 @@ class PresentationGenerator:
143
  return slides
144
 
145
  def create_presentation(self, slides):
146
- """Crée la présentation PowerPoint"""
147
  prs = Presentation()
148
 
149
- # Première diapo (titre)
150
  title_slide = prs.slides.add_slide(prs.slide_layouts[0])
151
  title_slide.shapes.title.text = slides[0]['title']
152
 
153
- # Autres diapos
154
  for slide in slides[1:]:
155
  content_slide = prs.slides.add_slide(prs.slide_layouts[1])
156
  content_slide.shapes.title.text = slide['title']
@@ -168,21 +152,19 @@ class PresentationGenerator:
168
  # Timer global pour le suivi du temps
169
  timer = ExecutionTimer()
170
 
171
- def update_status():
172
- return timer.get_status()
173
-
174
- def generate_skeleton(text, temperature, max_tokens, status_output):
175
  """Génère le squelette de la présentation"""
176
  try:
177
  timer.start()
178
  generator = PresentationGenerator()
179
 
180
- # Génération du contenu
181
  full_prompt = PREPROMPT + "\n\n" + text
182
  generated_content = generator.generate_text(full_prompt, temperature, max_tokens)
183
 
 
184
  timer.stop()
185
- return timer.get_status(), generated_content, gr.update(visible=True)
 
186
 
187
  except Exception as e:
188
  timer.stop()
@@ -196,7 +178,6 @@ def create_presentation_file(generated_content):
196
  timer.start()
197
  generator = PresentationGenerator()
198
 
199
- # Création et sauvegarde de la présentation
200
  slides = generator.parse_presentation_content(generated_content)
201
  prs = generator.create_presentation(slides)
202
 
@@ -254,34 +235,25 @@ with gr.Blocks(theme=gr.themes.Glass()) as demo:
254
  status_output = gr.Textbox(
255
  label="Statut",
256
  lines=2,
257
- every=1 # Met à jour toutes les secondes
258
  )
259
  generated_content = gr.Textbox(
260
  label="Contenu généré",
261
  lines=10,
262
  show_copy_button=True
263
  )
264
- create_presentation_btn = gr.Button("Créer La Présentation", visible=False)
265
  output_file = gr.File(
266
  label="Présentation PowerPoint",
267
- type="filepath" # Utilise filepath au lieu de binary
268
  )
269
 
270
- # Mise à jour du statut en temps réel
271
- status_output.change(
272
- fn=update_status,
273
- inputs=[],
274
- outputs=[status_output],
275
- every=1
276
- )
277
-
278
  generate_skeleton_btn.click(
279
  fn=generate_skeleton,
280
  inputs=[
281
  input_text,
282
  temperature,
283
- max_tokens,
284
- status_output
285
  ],
286
  outputs=[
287
  status_output,
@@ -304,4 +276,3 @@ if __name__ == "__main__":
304
 
305
 
306
 
307
-
 
2
  #app.py_144
3
  #Uniquement Granite 3b instruct
4
 
 
5
  import os
6
  import gradio as gr
7
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
10
  import torch
11
  import time
12
 
 
 
 
 
 
 
 
 
13
  # Configuration du modèle unique
14
  MODEL_PATH = "ibm-granite/granite-3.1-3b-a800m-Instruct"
15
 
 
70
  self.tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
71
  self.model = AutoModelForCausalLM.from_pretrained(
72
  MODEL_PATH,
73
+ torch_dtype=torch.float32,
74
+ device_map="auto"
75
  )
76
+ self.model.eval()
77
  print("Modèle initialisé avec succès!")
78
 
79
  def generate_text(self, prompt, temperature=0.7, max_tokens=2048):
 
80
  try:
 
81
  chat = [{"role": "user", "content": prompt}]
82
  formatted_prompt = self.tokenizer.apply_chat_template(
83
  chat,
 
85
  add_generation_prompt=True
86
  )
87
 
 
88
  inputs = self.tokenizer(
89
  formatted_prompt,
90
  return_tensors="pt",
 
108
  raise
109
 
110
  def parse_presentation_content(self, content):
 
111
  slides = []
112
  current_slide = None
113
 
 
130
  return slides
131
 
132
  def create_presentation(self, slides):
 
133
  prs = Presentation()
134
 
 
135
  title_slide = prs.slides.add_slide(prs.slide_layouts[0])
136
  title_slide.shapes.title.text = slides[0]['title']
137
 
 
138
  for slide in slides[1:]:
139
  content_slide = prs.slides.add_slide(prs.slide_layouts[1])
140
  content_slide.shapes.title.text = slide['title']
 
152
  # Timer global pour le suivi du temps
153
  timer = ExecutionTimer()
154
 
155
+ def generate_skeleton(text, temperature, max_tokens):
 
 
 
156
  """Génère le squelette de la présentation"""
157
  try:
158
  timer.start()
159
  generator = PresentationGenerator()
160
 
 
161
  full_prompt = PREPROMPT + "\n\n" + text
162
  generated_content = generator.generate_text(full_prompt, temperature, max_tokens)
163
 
164
+ status = timer.get_status()
165
  timer.stop()
166
+
167
+ return status, generated_content, gr.update(visible=True)
168
 
169
  except Exception as e:
170
  timer.stop()
 
178
  timer.start()
179
  generator = PresentationGenerator()
180
 
 
181
  slides = generator.parse_presentation_content(generated_content)
182
  prs = generator.create_presentation(slides)
183
 
 
235
  status_output = gr.Textbox(
236
  label="Statut",
237
  lines=2,
238
+ value="En attente..."
239
  )
240
  generated_content = gr.Textbox(
241
  label="Contenu généré",
242
  lines=10,
243
  show_copy_button=True
244
  )
245
+ create_presentation_btn = gr.Button("Créer Présentation", visible=False)
246
  output_file = gr.File(
247
  label="Présentation PowerPoint",
248
+ type="filepath"
249
  )
250
 
 
 
 
 
 
 
 
 
251
  generate_skeleton_btn.click(
252
  fn=generate_skeleton,
253
  inputs=[
254
  input_text,
255
  temperature,
256
+ max_tokens
 
257
  ],
258
  outputs=[
259
  status_output,
 
276
 
277
 
278