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)