Andro0s commited on
Commit
17d5260
verified
1 Parent(s): 4509f5e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -17
app.py CHANGED
@@ -149,25 +149,32 @@ def autonomous_train_lora(epochs, batch_size, learning_rate):
149
  training_status_message = f"ERROR CR脥TICO durante el entrenamiento aut贸nomo: {e}"
150
  print(f"[AUT脫NOMO] {training_status_message}")
151
 
152
- # --- GENERACI脫N DE C脫DIGO (HOT SWAP IMPLEMENTADO) ---
153
 
154
  def generate_text(prompt_text):
155
  """Genera c贸digo y dispara el ciclo de reentrenamiento aut贸nomo si es necesario."""
156
- global lora_generator, generations_since_last_train, is_trained, version_number
157
 
158
  if not is_trained:
159
- return "ERROR: El modelo LoRA no ha sido entrenado. Por favor, espere mientras la IA se inicializa con el entrenamiento V1.0."
 
 
160
 
161
  # 1. HOT SWAP (Verifica si el modelo necesita recargarse con la nueva versi贸n)
162
  if lora_generator is None:
163
  with global_lock:
164
- # Recarga el modelo solo si est谩 vac铆o
165
- base_model_gen = AutoModelForCausalLM.from_pretrained(BASE_MODEL, device_map="auto")
166
- model_with_lora = PeftModel.from_pretrained(base_model_gen, LORA_PATH)
167
- final_model = model_with_lora.merge_and_unload()
168
- final_model.eval()
169
- lora_generator = pipeline("text-generation", model=final_model, tokenizer=tokenizer)
170
- print(f"[HOT SWAP] 馃攧 Modelo de inferencia V{version_number:.1f} recargado y listo.")
 
 
 
 
 
171
 
172
  # 2. Generaci贸n de texto (L贸gica de inferencia)
173
  try:
@@ -208,10 +215,12 @@ def generate_text(prompt_text):
208
 
209
  notification = f"\n\n--- [AUTONOM脥A] La IA ha iniciado el reentrenamiento V{current_version+0.1:.1f} para mejorar la traducci贸n de tu di谩logo. La pr贸xima generaci贸n cargar谩 la nueva versi贸n. ---"
210
 
211
- return completion + notification
 
212
 
213
  except Exception as e:
214
- return f"Error generando texto: {e}"
 
215
 
216
  # --- FUNCI脫N PARA INICIALIZACI脫N Y ENTRENAMIENTO V1.0 (Obligatorio) ---
217
 
@@ -237,7 +246,7 @@ def update_status():
237
  with gr.Blocks(title="AmorCoderAI - Aprendizaje Continuo") as demo:
238
  gr.Markdown("# 馃挋 AmorCoderAI - Asistente de C贸digo con Aprendizaje Continuo")
239
 
240
- # Muestra la versi贸n y el estado. Ya no se actualiza cada segundo para evitar el error.
241
  version_and_status = gr.Markdown(
242
  f"**Versi贸n de Comprensi贸n:** V{version_number:.1f} | **Estado del Entrenador:** {training_status_message}",
243
  elem_id="status_display"
@@ -259,15 +268,14 @@ with gr.Blocks(title="AmorCoderAI - Aprendizaje Continuo") as demo:
259
  output_box = gr.Textbox(label="C贸digo generado", lines=10)
260
 
261
  # Conexi贸n del bot贸n con la funci贸n principal
262
- # Nota: La funci贸n update_status se llama impl铆citamente al hacer clic en este bot贸n
263
  generate_button.click(
264
  generate_text,
265
  inputs=prompt,
266
- outputs=[output_box, version_and_status], # Aseguramos que la caja de estado se actualice al generar
267
  )
268
 
269
- # CORRECCI脫N: Se elimina 'every=1' para evitar el TypeError.
270
- # El estado se actualizar谩 ahora al cargar la p谩gina y al generar c贸digo.
271
  demo.load(update_status, None, version_and_status)
272
 
273
 
 
149
  training_status_message = f"ERROR CR脥TICO durante el entrenamiento aut贸nomo: {e}"
150
  print(f"[AUT脫NOMO] {training_status_message}")
151
 
152
+ # --- FUNCI脫N DE GENERACI脫N (CORREGIDA PARA RETORNAR 2 VALORES) ---
153
 
154
  def generate_text(prompt_text):
155
  """Genera c贸digo y dispara el ciclo de reentrenamiento aut贸nomo si es necesario."""
156
+ global lora_generator, generations_since_last_train, is_trained, version_number, training_status_message
157
 
158
  if not is_trained:
159
+ # Si el entrenamiento V1.0 no ha terminado, retorna el mensaje de error y el estado actual
160
+ return "ERROR: El modelo LoRA no ha sido entrenado. Por favor, espere mientras la IA se inicializa con el entrenamiento V1.0.", update_status()
161
+
162
 
163
  # 1. HOT SWAP (Verifica si el modelo necesita recargarse con la nueva versi贸n)
164
  if lora_generator is None:
165
  with global_lock:
166
+ try:
167
+ # Recarga el modelo solo si est谩 vac铆o
168
+ base_model_gen = AutoModelForCausalLM.from_pretrained(BASE_MODEL, device_map="auto")
169
+ model_with_lora = PeftModel.from_pretrained(base_model_gen, LORA_PATH)
170
+ final_model = model_with_lora.merge_and_unload()
171
+ final_model.eval()
172
+ lora_generator = pipeline("text-generation", model=final_model, tokenizer=tokenizer)
173
+ print(f"[HOT SWAP] 馃攧 Modelo de inferencia V{version_number:.1f} recargado y listo.")
174
+ except Exception as e:
175
+ # Si la recarga falla, retorna un error
176
+ return f"Error al cargar el modelo V{version_number:.1f} para inferencia: {e}", update_status()
177
+
178
 
179
  # 2. Generaci贸n de texto (L贸gica de inferencia)
180
  try:
 
215
 
216
  notification = f"\n\n--- [AUTONOM脥A] La IA ha iniciado el reentrenamiento V{current_version+0.1:.1f} para mejorar la traducci贸n de tu di谩logo. La pr贸xima generaci贸n cargar谩 la nueva versi贸n. ---"
217
 
218
+ # CORRECCI脫N CLAVE: Retorna el c贸digo Y el estado actualizado
219
+ return completion + notification, update_status()
220
 
221
  except Exception as e:
222
+ # Si falla la generaci贸n, retorna el mensaje de error y el estado actual
223
+ return f"Error generando texto: {e}", update_status()
224
 
225
  # --- FUNCI脫N PARA INICIALIZACI脫N Y ENTRENAMIENTO V1.0 (Obligatorio) ---
226
 
 
246
  with gr.Blocks(title="AmorCoderAI - Aprendizaje Continuo") as demo:
247
  gr.Markdown("# 馃挋 AmorCoderAI - Asistente de C贸digo con Aprendizaje Continuo")
248
 
249
+ # Muestra la versi贸n y el estado.
250
  version_and_status = gr.Markdown(
251
  f"**Versi贸n de Comprensi贸n:** V{version_number:.1f} | **Estado del Entrenador:** {training_status_message}",
252
  elem_id="status_display"
 
268
  output_box = gr.Textbox(label="C贸digo generado", lines=10)
269
 
270
  # Conexi贸n del bot贸n con la funci贸n principal
271
+ # IMPORTANTE: Ahora generate_text retorna DOS valores para coincidir con [output_box, version_and_status]
272
  generate_button.click(
273
  generate_text,
274
  inputs=prompt,
275
+ outputs=[output_box, version_and_status],
276
  )
277
 
278
+ # El estado se actualiza solo al cargar la p谩gina.
 
279
  demo.load(update_status, None, version_and_status)
280
 
281