Backend do assistente multimodal desenvolvido em Python. O presente documento fornece uma visão geral do projeto e o passo a passo completo para qualquer pessoa configurar o ambiente do zero, incluindo a instalação das dependências de IA (torch, diffusers, transformers), com foco em versões estáveis e menores.
Esse projeto implementa a base de um Back-End multimodal e do Front-End capaz de lidar com:
- Processamento de texto (via Transformers)
- Geração e manipulação de imagens (via Diffusers)
- Orquestração multimodal (decisão inteligente entre texto, imagem ou ambos)
- Lógica central da aplicação (validações, filtros, utilitários)
- API REST (via FastAPI)
A arquitetura foi organizada para manter os módulos desacoplados e facilitar expansão, testes e integração com uma API.
O front do projeto está na pasta front/ e foi desenvolvido em React (Vite).
cd front
npm installcd front
npm run devEm breve: link do vídeo demonstrando o site rodando.
backend/
├── api/ # API REST (FastAPI)
├── core/ # Lógica central: validações, filtros, orchestrator
├── text/ # Pipeline de texto (Transformers)
├── image/ # Pipeline de imagem (Diffusers)
├── dtos/ # Data Transfer Objects (Pydantic)
├── tests/ # Testes unitários e manuais
└── .venv/ # Ambiente virtual Python
Cada pasta é independente e possui seu próprio __init__.py para permitir importação modular.
- Python 3.12+
- pip atualizado
- venv habilitado (
python3.12-venvno Ubuntu) - Git
git clone <https://gitlab.com/jala-university1/cohort-2/PT.CSAI-353.GA.T2.25.M2/SB/calangomagia/backend.git>
cd backendpython3 -m venv .venv
source .venv/bin/activateO terminal deve exibir:
(.venv)
pip install -r requirements.txt
⚠️ Nota: O PyTorch no requirements.txt é a versão CPU. Se você tem GPU NVIDIA, veja a seção 3.2.
Se preferir instalar manualmente ou precisar de versões específicas:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpupip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118pip install diffusers transformers acceleratepip install fastapi uvicorn pillow numpy python-dotenv pydantic nltk pytestO módulo de pré-processamento de texto usa NLTK. Na primeira execução, os recursos são baixados automaticamente, mas você pode baixar manualmente:
python -c "import nltk; nltk.download('punkt'); nltk.download('punkt_tab'); nltk.download('stopwords')"python -c "import torch, transformers, diffusers, nltk; print('OK')"Se imprimir OK, o ambiente está configurado.
pytest tests/ -vexport PYTHONPATH=$(pwd)
# Teste do filtro de segurança
python tests/manual/test_safety_filter.py
# Teste do orchestrator multimodal
python tests/manual/test_orchestrator.pyuvicorn api.main:app --reload --port 8008A API estará disponível em: http://localhost:8008
Documentação interativa (Swagger): http://localhost:8008/docs
O projeto possui um módulo de segurança (core/safety.py) que valida prompts antes do processamento. O filtro bloqueia automaticamente conteúdo inadequado.
| Categoria | Descrição |
|---|---|
| Sexual | Nudez, pornografia, conteúdo erótico |
| Violência | Gore, tortura, massacre, conteúdo violento |
| Dados sensíveis | CPF, senhas, dados bancários |
from core.safety import validate_prompt
is_safe, error_msg = validate_prompt(prompt)
if not is_safe:
raise ValueError(error_msg)api/main.py→ rotas/generatee/generate-imageimage/image_generator.py→ métodogenerate_image()
Editar as listas no arquivo core/safety.py:
BLOCKED_SEXUAL = ["nude", "nua", ...]
BLOCKED_VIOLENCE = ["gore", "tortura", ...]
BLOCKED_SENSITIVE = ["cpf", "senha", ...]pytest tests/core/test_safety.py -vO projeto inclui um MultimodalOrchestrator (core/orchestrator.py) que decide automaticamente entre geração de texto, imagem ou ambos.
O orchestrator analisa o prompt e detecta a intenção do usuário:
| Intenção | Exemplos de triggers |
|---|---|
| Texto | "escreva", "explique", "conte", "descreva" |
| Imagem | "imagem", "desenhe", "ilustração", "crie uma imagem" |
| Multimodal | "mostre e explique", "imagem e texto" |
from core.orchestrator import MultimodalOrchestrator, IntentType
# Inicializar (após carregar os geradores)
orchestrator = MultimodalOrchestrator(
text_generator=text_generator,
image_generator=image_generator,
preprocessor=preprocessor
)
# Orquestrar automaticamente
result = orchestrator.orchestrate(prompt="Desenhe um gato")
print(result.intent) # IntentType.IMAGE_ONLY
print(result.image_base64) # Imagem em base64
print(result.text_response) # None (só pediu imagem)Em caso de erro, o orchestrator tenta automaticamente gerar apenas texto como fallback.
👩🏻💻 Gabriela Diniz Santos;
👨🏻💻 Gelsinha da Silva Alves;
👨🏻💻 João do Nascimento.