Pular para conteúdo

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 ChatMessage
  • file, 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

  1. Trial expirado da escola -> erro 403
  2. Limite de mensagens do plano -> erro 403
  3. Modelo nao permitido no plano -> erro 403
  4. 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.