File size: 6,416 Bytes
1b63e6c
44922b3
 
1b63e6c
947bfcc
1b63e6c
44922b3
947bfcc
44922b3
 
 
 
 
 
 
947bfcc
 
 
 
 
1b63e6c
947bfcc
 
1b63e6c
947bfcc
44922b3
947bfcc
 
 
1b63e6c
947bfcc
44922b3
1b63e6c
947bfcc
44922b3
 
1b63e6c
947bfcc
 
 
2ec8f56
 
947bfcc
 
 
2ec8f56
 
1b63e6c
2ec8f56
947bfcc
 
 
2ec8f56
 
 
947bfcc
2ec8f56
947bfcc
2ec8f56
947bfcc
 
 
2ec8f56
947bfcc
 
 
2ec8f56
947bfcc
 
 
 
2ec8f56
f2660e3
947bfcc
2ec8f56
 
 
 
 
 
947bfcc
2ec8f56
947bfcc
2ec8f56
 
 
 
947bfcc
2ec8f56
947bfcc
2ec8f56
 
947bfcc
2ec8f56
 
 
 
947bfcc
 
 
2ec8f56
 
947bfcc
 
 
 
2ec8f56
 
 
947bfcc
 
2ec8f56
947bfcc
2ec8f56
 
947bfcc
 
2ec8f56
 
 
 
947bfcc
2ec8f56
 
947bfcc
2ec8f56
 
947bfcc
 
 
2ec8f56
 
 
 
947bfcc
 
2ec8f56
 
 
 
947bfcc
 
 
 
 
 
2ec8f56
 
947bfcc
2ec8f56
 
947bfcc
 
2ec8f56
947bfcc
 
2ec8f56
 
 
947bfcc
2ec8f56
947bfcc
 
 
 
2ec8f56
 
44922b3
1b63e6c
 
947bfcc
2ec8f56
44922b3
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import gradio as gr
import torch
from transformers import pipeline

class GeradorTrilhaAprendizado:
    def __init__(self):
        self.device = 0 if torch.cuda.is_available() else -1
        # Inicializa modelos
        self.transcriber = pipeline("automatic-speech-recognition", 
                                  model="openai/whisper-base",
                                  device=self.device)
        self.generator = pipeline("text-generation", 
                                model="gpt2",
                                device=self.device)

    def processar_audio(self, 
                       audio_path: str, 
                       nome_trilha: str,
                       nivel: str = "intermediário",
                       incluir_recursos: bool = True) -> tuple:
        try:
            # Transcrição do áudio
            transcricao = self.transcriber(audio_path)["text"]
            
            # Geração da trilha
            prompt = f"""
            Com base no seguinte texto, crie uma trilha de aprendizado detalhada 
            para nível {nivel}:
            {transcricao}
            
            Trilha de aprendizado:
            """
            
            analise = self.generator(prompt, 
                                   max_length=300, 
                                   num_return_sequences=1)[0]["generated_text"]
            
            if incluir_recursos:
                recursos = self._gerar_recursos()
                analise += "\n\n" + recursos

            return (
                gr.Textbox.update(value=transcricao, visible=True),
                gr.Textbox.update(value=analise, visible=True),
                gr.Markdown.update(visible=True, value="✅ Trilha gerada com sucesso!"),
                gr.Button.update(interactive=True)
            )
        except Exception as e:
            return (
                gr.Textbox.update(value=f"Erro: {str(e)}", visible=True),
                gr.Textbox.update(value="Não foi possível gerar a análise.", visible=True),
                gr.Markdown.update(visible=True, value="❌ Ocorreu um erro"),
                gr.Button.update(interactive=True)
            )

    def _gerar_recursos(self) -> str:
        return """
        📚 Recursos Recomendados:
        
        1. Livros:
           - "Guia Essencial"
           - "Técnicas Avançadas"
           
        2. Cursos Online:
           - Coursera: "Especialização no Tema"
           - edX: "Curso Avançado"
           
        3. Recursos Práticos:
           - Tutoriais interativos
           - Exercícios práticos
           - Projetos do mundo real
        """

def criar_interface():
    with gr.Blocks(theme=gr.themes.Soft(
        primary_hue="blue",
        secondary_hue="purple",
        neutral_hue="gray"
    )) as app:
        gr.Markdown("""
        # 🎓 Gerador de Trilha de Aprendizado
        
        Grave ou faça upload de um áudio descrevendo seus objetivos e receba uma trilha personalizada!
        """)
        
        with gr.Row():
            with gr.Column(scale=2):
                # Componentes de entrada
                with gr.Group():
                    gr.Markdown("### 📝 Entrada")
                    audio_input = gr.Audio(
                        type="filepath",
                        label="Áudio",
                        sources=["microphone", "upload"],
                    )
                    
                    with gr.Row():
                        nome_trilha = gr.Textbox(
                            label="Nome da Trilha",
                            placeholder="Dê um nome para sua trilha",
                            scale=2
                        )
                        nivel = gr.Dropdown(
                            choices=["iniciante", "intermediário", "avançado"],
                            value="intermediário",
                            label="Nível de Dificuldade",
                            scale=1
                        )
                    
                    incluir_recursos = gr.Checkbox(
                        label="Incluir Recursos Recomendados",
                        value=True,
                        info="Adicionar recursos de aprendizado curados à sua trilha"
                    )
                    
                    processar_btn = gr.Button(
                        "🚀 Gerar Trilha de Aprendizado",
                        variant="primary",
                        scale=2
                    )

            # Componentes de saída
            with gr.Column(scale=2):
                with gr.Group():
                    gr.Markdown("### 📊 Resultado")
                    status = gr.Markdown(visible=False)
                    
                    with gr.Accordion("Transcrição do Áudio", open=False):
                        transcricao = gr.Textbox(
                            label="O que entendemos",
                            lines=4,
                            visible=False
                        )
                    
                    analise = gr.Textbox(
                        label="Sua Trilha de Aprendizado",
                        lines=10,
                        visible=False
                    )
        
        # Manipuladores de eventos
        processar_btn.click(
            fn=GeradorTrilhaAprendizado().processar_audio,
            inputs=[audio_input, nome_trilha, nivel, incluir_recursos],
            outputs=[transcricao, analise, status, processar_btn],
            api_name="gerar_trilha"
        )
        
        # Exemplos
        gr.Examples(
            examples=[
                ["audio_exemplo.mp3", "Programação Python", "iniciante", True],
                ["audio_exemplo2.mp3", "Ciência de Dados", "intermediário", True],
            ],
            inputs=[audio_input, nome_trilha, nivel, incluir_recursos],
            outputs=[transcricao, analise, status, processar_btn],
            cache_examples=True,
        )
        
        # Informações adicionais
        gr.Markdown("""
        ### 📌 Dicas
        - Fale claramente e descreva seus objetivos de aprendizado em detalhes
        - Mencione qualquer experiência prévia no assunto
        - Inclua áreas específicas em que deseja focar
        """)

    return app

if __name__ == "__main__":
    app = criar_interface()
    app.queue()
    app.launch()