Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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 |
-
# ---
|
| 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 |
-
|
|
|
|
|
|
|
| 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 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
| 212 |
|
| 213 |
except Exception as e:
|
| 214 |
-
|
|
|
|
| 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.
|
| 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 |
-
#
|
| 263 |
generate_button.click(
|
| 264 |
generate_text,
|
| 265 |
inputs=prompt,
|
| 266 |
-
outputs=[output_box, version_and_status],
|
| 267 |
)
|
| 268 |
|
| 269 |
-
#
|
| 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 |
|