CVision-assitant commited on
Commit
220e103
路
verified 路
1 Parent(s): 9b00715

Update modules/langchain_assistant/cvision_forge_v9.py

Browse files
modules/langchain_assistant/cvision_forge_v9.py CHANGED
@@ -93,27 +93,46 @@ def ejecutar_forja_3d(imagen_generada_flux: str):
93
  print(f"[TRELLIS] Ciclo de pooling {ciclo_progreso}/45...")
94
  ciclo_progreso += 1
95
 
96
- elif msg_tipo == "process_completed":
97
- print("馃幆 [TRELLIS Engine] 隆Procesamiento completado con 茅xito detectado en el flujo!")
98
 
99
  output = json_evento.get("output", {})
100
- array_salida = output.get("data", [])
101
 
102
- if array_salida and isinstance(array_salida, list):
103
- primer_nodo = array_salida[0]
104
- nombre_archivo_glb = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
106
- if isinstance(primer_nodo, dict):
107
- nombre_archivo_glb = primer_nodo.get("name") or primer_nodo.get("url")
108
- elif isinstance(primer_nodo, str):
109
- nombre_archivo_glb = primer_nodo
110
-
111
- if nombre_archivo_glb:
112
- if nombre_archivo_glb.startswith("http"):
113
- return nombre_archivo_glb
114
- return f"https://trellis-community-trellis.hf.space/gradio_api/file={nombre_archivo_glb}"
 
 
 
 
115
 
116
- raise Exception("El flujo de salida no conten铆a las claves de archivo esperadas.")
117
 
118
  elif msg_tipo == "process_error" or "event: error" in linea_decodificada:
119
  raise Exception("El cl煤ster remoto report贸 una falla interna en las matrices de difusi贸n.")
 
93
  print(f"[TRELLIS] Ciclo de pooling {ciclo_progreso}/45...")
94
  ciclo_progreso += 1
95
 
96
+ elif msg_tipo == "process_completed" or "output" in json_evento:
97
+ print("馃幆 [TRELLIS Engine] 隆Procesamiento completado detectado en el flujo!")
98
 
99
  output = json_evento.get("output", {})
 
100
 
101
+ # --- EXTRACTOR UNIVERSAL ULTRA-FLEXIBLE ---
102
+ # Convertimos todo el bloque 'output' a texto plano para rastrear el archivo sin importar las llaves
103
+ output_str = json.dumps(output)
104
+ nombre_archivo_glb = None
105
+
106
+ # Si el output contiene un .glb, lo cazamos quir煤rgicamente
107
+ if ".glb" in output_str:
108
+ # Opci贸n 1: Validar si viene en la lista cl谩sica de 'data'
109
+ array_salida = output.get("data", [])
110
+ if array_salida and isinstance(array_salida, list):
111
+ primer_nodo = array_salida[0]
112
+ if isinstance(primer_nodo, dict):
113
+ # Intentamos extraer de cualquier llave com煤n de Gradio (name, url, value, path)
114
+ nombre_archivo_glb = (primer_nodo.get("name") or
115
+ primer_nodo.get("url") or
116
+ primer_nodo.get("value") or
117
+ primer_nodo.get("path"))
118
+ elif isinstance(primer_nodo, str):
119
+ nombre_archivo_glb = primer_nodo
120
 
121
+ # Opci贸n 2: Si el parseo estructurado fall贸 pero el String est谩 ah铆, lo extraemos a la fuerza
122
+ if not nombre_archivo_glb:
123
+ import re
124
+ # Busca cualquier patr贸n de texto que termine en .glb dentro del JSON
125
+ coincidencias = re.findall(r'([^"\s]+\.glb)', output_str)
126
+ if coincidencias:
127
+ nombre_archivo_glb = coincidencias[0]
128
+
129
+ if nombre_archivo_glb:
130
+ print(f"[TRELLIS Engine] Malla .glb localizada con 茅xito: {nombre_archivo_glb}")
131
+ if nombre_archivo_glb.startswith("http"):
132
+ return nombre_archivo_glb
133
+ return f"https://trellis-community-trellis.hf.space/gradio_api/file={nombre_archivo_glb}"
134
 
135
+ raise Exception("El flujo de salida concluy贸 pero no se encontr贸 ning煤n archivo .glb en el payload.")
136
 
137
  elif msg_tipo == "process_error" or "event: error" in linea_decodificada:
138
  raise Exception("El cl煤ster remoto report贸 una falla interna en las matrices de difusi贸n.")