File size: 4,046 Bytes
89020aa f653755 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
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)
|