jcmachicao's picture
Update app.py
f653755 verified
raw
history blame
4.05 kB
import gradio as gr
import json
from llama_cpp import Llama
import spacy
class ProcesadorAutodiagnostico:
def __init__(self):
# Initialize Llama model
self.llm = Llama(
model_path="./models/llama-2-7b-chat.gguf", # We'll need to specify the correct path
n_ctx=2048, # Context window
n_threads=4 # Adjust based on available resources
)
self.nlp = spacy.load("es_core_news_sm")
def generar_prompt(self, texto: str) -> str:
return f"""Analiza el siguiente texto y extrae informaci贸n estructurada para un autodiagn贸stico.
El texto describe un reto o proyecto relacionado con tecnolog铆as cognitivas.
Texto: {texto}
Genera un JSON con la siguiente estructura, manteniendo solo la informaci贸n relevante encontrada en el texto:
{{
"datos_generales": {{
"sector": "",
"ubicacion": ""
}},
"reto": {{
"descripcion": "",
"contexto": "",
"alcance": ""
}},
"conocimientos_cogtech": {{
"terminos_desconocidos": [],
"conceptos_dudosos": [],
"areas_desconfianza": []
}},
"dominio_actual": {{
"aspectos_dominados": [],
"experiencia_previa": [],
"recursos_disponibles": []
}},
"entrampes": {{
"tecnicos": [],
"implementacion": [],
"organizacionales": []
}},
"objetivos": {{
"corto_plazo": [],
"esperados_microtaller": []
}}
}}
Aseg煤rate de:
1. Identificar t茅rminos t茅cnicos que generan dudas
2. Detectar preocupaciones y 谩reas de desconfianza
3. Identificar objetivos expl铆citos e impl铆citos
4. Clasificar correctamente los entrampes
5. Mantener el contexto del sector y ubicaci贸n
JSON:"""
def procesar_texto(self, texto: str) -> dict:
# Generate prompt
prompt = self.generar_prompt(texto)
# Get completion from LLaMa
response = self.llm(
prompt,
max_tokens=2048,
temperature=0.1, # Low temperature for more consistent results
top_p=0.9,
stop=["```"] # Stop at code blocks if any
)
try:
# Parse the response as JSON
resultado = json.loads(response['choices'][0]['text'])
# Post-process with spaCy if needed
doc = self.nlp(texto)
# Add any additional processing here
return resultado
except json.JSONDecodeError:
# Fallback in case of invalid JSON
return {
"error": "No se pudo procesar el texto correctamente",
"texto_original": texto
}
def procesar_con_gradio(texto_input: str) -> str:
"""Wrapper function for Gradio interface"""
procesador = ProcesadorAutodiagnostico()
try:
resultado = procesador.procesar_texto(texto_input)
return json.dumps(resultado, indent=2, ensure_ascii=False)
except Exception as e:
return json.dumps({
"error": f"Error en el procesamiento: {str(e)}",
"texto_original": texto_input
}, indent=2, ensure_ascii=False)
# Create the Gradio interface
with gr.Blocks() as app:
gr.Markdown("# Autodiagn贸stico CogTech")
gr.Markdown("""
## Instrucciones
Describe tu situaci贸n considerando:
- Tu reto o necesidad principal
- Qu茅 conoces y qu茅 dudas tienes sobre tecnolog铆as cognitivas
- Qu茅 obst谩culos o dificultades enfrentas
- Qu茅 esperas lograr
""")
with gr.Row():
texto_input = gr.Textbox(
label="Tu descripci贸n",
placeholder="Describe tu situaci贸n...",
lines=10
)
json_output = gr.JSON(label="Autodiagn贸stico Estructurado")
analizar_btn = gr.Button("Generar Autodiagn贸stico")
analizar_btn.click(
fn=procesar_con_gradio,
inputs=texto_input,
outputs=json_output
)
if __name__ == "__main__":
app.launch(share=True)