App: chats¶
Interface de chat, integracao com LangChain/LangGraph, skills/MCPs do aluno e upload de arquivos.
Models¶
ChatSession -- sessao de conversa (aluno x agente).
ChatMessage -- mensagem individual com: - role -- user ou assistant - model_used -- codigo do modelo (ex: gpt-5-mini) - ai_model -- FK para AIModel - token_count, input_token_count, message_cost, estimated_time_saved_minutes - suggested_follow_ups -- lista populada pelo LLM contendo 3 perguntas curtas p/ engajamento.
ChatMessageFeedback -- avaliacao like/dislike do aluno sobre uma mensagem do assistente.
**ChatAttachment** -- arquivo anexado a uma mensagem do usuario:
message-- FK para ChatMessagefile,file_type,original_filename,extracted_text- Tipos suportados: PDF, TXT, MD, CSV, XLSX, SRT + Arquivos de imagem (PNG, JPG, JPEG, GIF, WebP) se o AIModel da assinatura suportar visão computacional.
Engine (chats/engine.py)¶
Usa LangGraph StateGraph para orquestrar: 1. Recuperacao RAG (FAISS similarity search, k=4) 2. Montagem do system prompt com contexto 3. Chamada ao ChatOpenAI com streaming (incluindo imagens base64 se inseridas no ChatAttachment) 4. Execucao de tools (skills + MCPs) quando disponibilizadas 5. Yield de chunks via SSE 6. Geração de sugestões preditivas extraindo o marcador <<<SUGGESTIONS>>> se habilitadas (enable_follow_up_suggestions).
Upload de Arquivos¶
O aluno pode anexar arquivos na mensagem. O fluxo: 1. Arquivo e recebido via multipart/form-data em MessageSendView 2. Texto e extraido via chats/file_processor.py 3. Conteudo extraido e adicionado ao prompt como contexto 4. ChatAttachment e criado vinculado a mensagem do usuario
Verificacoes em MessageSendView¶
- Trial expirado da escola -> erro 403
- Limite de mensagens do plano -> erro 403
- Modelo nao permitido no plano -> erro 403
- Credito do aluno esgotado para o agente especifico -> erro 403 com
credits_exhausted: true
A verificacao de credito usa get_or_create_student_credit(student, school, agent=agent) para checar o StudentMessageCredit do agente em questao.
Integracao com Skills e MCPs¶
Antes de gerar a resposta, MessageSendView chama build_tools_for_agent(agent, student) do agents/skills_engine.py para montar a lista de tools. As tools sao passadas ao generate_streaming_response().
Views do Chat¶
| View | Descricao |
|---|---|
StudentDashboardView | Dashboard do aluno com agentes liberados/bloqueados |
ChatView | Interface de chat com um agente |
SessionCreateView | Criar nova sessao |
SessionDetailView | Carregar mensagens de uma sessao |
MessageSendView | Enviar mensagem com streaming SSE |
SessionRenameView | Renomear sessao |
SessionDeleteView | Excluir sessao |
SessionExportView | Exportar sessao como Markdown |
MessageFeedbackView | Registrar like/dislike |
Views de Skills/MCPs (lado do aluno)¶
| View | Descricao |
|---|---|
AgentSkillsListView | Lista skills e MCPs do agente (retorna JSON com agent_skills, student_skills, agent_mcps, student_mcps) |
StudentSkillToggleView | Ativar/desativar skill do agente via StudentSkillOverride |
StudentSkillAddView | Criar skill personalizada do aluno |
StudentSkillEditView | Editar skill do aluno |
StudentSkillToggleStudentView | Ativar/desativar skill propria do aluno |
StudentSkillRemoveView | Remover skill do aluno |
StudentMCPAddView | Adicionar MCP server personalizado |
StudentMCPEditView | Editar MCP server do aluno |
StudentMCPToggleView | Ativar/desativar MCP server do aluno |
StudentMCPRemoveView | Remover MCP server do aluno |
StudentMCPTestConnectionView | Testar conexao MCP antes de salvar |
Gamificação (chats/gamification.py)¶
Implementa um sistema de Ofensiva (Streak) e Conquistas (Achievements): 1. Model StudentAchievement: Persiste quais conquistas o estudante já desbloqueou, com a data de desbloqueio (unlocked_at). 2. ACHIEVEMENT_DEFINITIONS: Lista de todos os troféus disponíveis com ID, título, categoria (mensagens, ofensiva, tempo, etc.) e raridade (bronze, prata, ouro, platina). 3. calculate_streak(student): Conta a ofensiva atual e a maior ofensiva histórica (dias consecutivos enviando mensagens). 4. check_achievements(student): Verifica o progresso e destrava metas atingidas. Chamado após interações relevantes no Chat. 5. As métricas e troféus desbloqueados são visíveis para o aluno (via /aluno/conquistas/) e para o admin da escola no StudentDetailView e no Dashboard principal.