Um agente de IA avançado para execução interativa de código Jupyter com interface web moderna, sistema multiusuário completo e integração PostgreSQL para alta performance.
- 🤖 Múltiplos Provedores de IA: OpenAI, Anthropic, Google AI, Cohere, Ollama, Azure OpenAI e Hugging Face
- 📓 Jupyter Integrado: Execução de código Python em ambiente isolado com visualizações interativas
- 👥 Sistema Multiusuário: Autenticação segura, workspaces individuais e sessões persistentes
- 🔐 Gerenciamento de Credenciais: Armazenamento seguro de API keys por usuário com interface web
- 🐘 PostgreSQL Backend: Performance superior com transações ACID e escalabilidade enterprise
- 🎨 Interface Moderna: UI responsiva construída com Gradio e navegação otimizada
- 📊 Visualizações Avançadas: Suporte completo a matplotlib, plotly, seaborn e mais
- 🐳 Docker Ready: Containerização completa com orquestração automática
- ⚡ Performance Otimizada: Cache inteligente, consultas indexadas e connection pooling
jupyter-agent-2/ # 📂 Root do Repositório
├─ 🐳 ORQUESTRAÇÃO
│ ├── docker-compose.yml # Produção (PostgreSQL + App)
│ ├── docker-compose.dev.yml # Desenvolvimento com hot-reload
│ ├── start-docker.sh # Script de inicialização interativo
│ └── test_postgresql.sh # Script de teste da integração
│
├─ 🐘 BANCO DE DADOS
│ └── db/init/ # Scripts SQL de inicialização
│ ├── 01_init_schema.sql # Schema principal com tabelas e índices
│ └── 02_development_data.sql # Dados de desenvolvimento
│
├─ 📦 SERVIÇO (jupyter-agent/)
│ ├── Dockerfile # Container otimizado Python 3.10
│ ├── .env.example # Configurações de ambiente
│ │
│ ├─ 🐍 CÓDIGO PYTHON
│ ├── app.py # Aplicação principal Gradio
│ ├── config.py # Configuração dinâmica de IA providers
│ ├── user_manager.py # Sistema de usuários (PostgreSQL)
│ ├── database.py # Database Manager com SQLAlchemy
│ ├── models.py # Modelos de dados PostgreSQL
│ ├── jupyter_handler.py # Handler para execução Jupyter
│ ├── migrate_json_to_db.py # Script de migração JSON → PostgreSQL
│ ├── requirements.txt # Dependências Python + PostgreSQL
│ └── utils.py # Utilitários diversos
│ │
│ └─ 📄 ASSETS & TEMPLATES
│ ├── llama3_template.jinja # Templates de prompts
│ ├── ds-system-prompt.txt # System prompt para data science
│ └── *.png # Assets e imagens
│
├─ 💾 DADOS PERSISTENTES
│ ├── user_data/ # Dados legados JSON (para migração)
│ ├── tmp/ # Notebooks temporários
│ └── postgres_data/ # Volume PostgreSQL (Docker)
│
└─ 📖 DOCUMENTAÇÃO
└── README.md # Este arquivo (documentação completa)
users sessions workspaces
├─ id (UUID, PK) ├─ id (UUID, PK) ├─ id (UUID, PK)
├─ username (UNIQUE) ├─ session_token ├─ name
├─ password_hash ├─ user_id (FK) ├─ description
├─ created_at ├─ username ├─ owner_id (FK)
├─ last_login ├─ created_at ├─ owner_username
├─ is_active ├─ expires_at ├─ created_at
└─ updated_at └─ last_activity └─ updated_at
notebooks user_credentials
├─ id (UUID, PK) ├─ id (UUID, PK)
├─ name ├─ user_id (FK)
├─ workspace_id (FK) ├─ name
├─ file_path ├─ provider
├─ created_at ├─ api_key
├─ updated_at ├─ base_url
└─ last_accessed ├─ is_default
├─ created_at
└─ updated_at🔗 Relacionamentos:
- User → Sessions (1:N), Workspaces (1:N), UserCredentials (1:N)
- Workspace → Notebooks (1:N)
⚡ Performance Features:
- Índices otimizados para todas as consultas frequentes
- Connection pooling automático
- Transações ACID para consistência
- Auto-cleanup de sessões expiradas
# 1. Clone o repositório
git clone <repository-url>
cd jupyter-agent-2
# 2. Execute o script de inicialização
./start-docker.sh
# Escolha opção 1 (Produção) ou 2 (Desenvolvimento)
# 3. Acesse a aplicação
http://localhost:7860# Produção (PostgreSQL + App)
docker-compose up -d
# Desenvolvimento (com hot-reload)
docker-compose -f docker-compose.dev.yml up -d
# Ver logs em tempo real
docker-compose logs -f
# Parar serviços
docker-compose down# 1. Configurar ambiente
cd jupyter-agent/
cp .env.example .env
# Edite .env com suas configurações
# 2. Instalar dependências
pip install -r requirements.txt
# 3. Iniciar PostgreSQL
docker-compose up postgres -d
# 4. Executar aplicação
python app.py# Executa teste completo da stack PostgreSQL
./test_postgresql.sh
# Inclui:
# - Verificação de pré-requisitos
# - Teste do PostgreSQL
# - Teste de migração de dados
# - Teste da aplicação completa
# - Verificação de operações de bancoArquivo: jupyter-agent/.env
# === SERVIDOR ===
GRADIO_SERVER_NAME=0.0.0.0
GRADIO_SERVER_PORT=7860
# === BANCO DE DADOS ===
DATABASE_URL=postgresql://jupyter_user:jupyter_password@postgres:5432/jupyter_agent
DB_HOST=postgres
DB_PORT=5432
DB_NAME=jupyter_agent
DB_USER=jupyter_user
DB_PASSWORD=jupyter_password
DB_DEBUG=false
# === IA PROVIDERS (Opcional - gerenciar via UI) ===
DEFAULT_PROVIDER=openai
DEFAULT_MODEL=gpt-4o-mini
# API Keys
OPENAI_API_KEY=sk-your-openai-key-here
ANTHROPIC_API_KEY=your-anthropic-key-here
GOOGLE_API_KEY=your-google-ai-key-here
COHERE_API_KEY=your-cohere-key-here
HF_TOKEN=your-huggingface-token-here
# Azure OpenAI
AZURE_OPENAI_API_KEY=your-azure-key-here
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_VERSION=2024-02-15-preview
# Ollama (Local LLM)
OLLAMA_BASE_URL=http://localhost:11434| Provider | Modelos Principais | Configuração |
|---|---|---|
| OpenAI | GPT-4o, GPT-4o-mini, GPT-4-turbo, o1-preview | API Key via OpenAI |
| Anthropic | Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku | API Key via Anthropic |
| Google AI | Gemini 1.5 Pro, Gemini 1.5 Flash | API Key via Google AI Studio |
| Cohere | Command R+, Command R | API Key via Cohere |
| Ollama | Llama 3.2, CodeLlama, Mistral, Phi-3 | Local installation |
| Azure OpenAI | Todos os modelos OpenAI | Azure subscription |
| Hugging Face | Modelos via Inference API | HF Token |
Se você tem dados existentes em JSON, a migração é automática:
# 1. Backup automático dos dados JSON
python migrate_json_to_db.py --backup
# 2. Dry run (teste sem modificar)
python migrate_json_to_db.py --dry-run
# 3. Migração completa
python migrate_json_to_db.py
# 4. Verificar migração
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "SELECT count(*) FROM users;"Dados migrados:
- ✅ Usuários (senhas, perfis, status)
- ✅ Sessões (tokens, expiração)
- ✅ Workspaces (nomes, descrições, ownership)
- ✅ Notebooks (arquivos, paths, acessos)
- ✅ Credenciais (API keys, providers, configurações)
- ✅ Autenticação Segura: Hash SHA-256, sessões com expiração
- ✅ Workspaces Isolados: Cada usuário tem seus próprios projetos
- ✅ Sessões Persistentes: Login automático entre acessos
- ✅ Gerenciamento Completo: CRUD de usuários, workspaces e notebooks
- ✅ Armazenamento Seguro: API keys criptografadas no PostgreSQL
- ✅ Múltiplas Credenciais: Várias keys por provider por usuário
- ✅ Credencial Padrão: Seleção automática da key preferida
- ✅ Interface Web: Modal intuitivo para gerenciar credenciais
- ✅ Validação: Verificação de keys antes do armazenamento
- ✅ Ambiente Isolado: Cada notebook roda em ambiente próprio
- ✅ Bibliotecas Científicas: NumPy, Pandas, Matplotlib, Plotly, Seaborn
- ✅ Visualizações Interativas: Gráficos embedded na interface
- ✅ Download de Notebooks: Export completo com resultados
- ✅ Histórico de Execução: Preservação do estado entre sessões
- ✅ Design Responsivo: Funciona em desktop, tablet e mobile
- ✅ Navegação Intuitiva: Dashboard → Workspace → Notebook → AI Agent
- ✅ Modals Profissionais: Credenciais, notebooks, configurações
- ✅ Feedback Visual: Status, loading, success/error messages
- ✅ Chat Interface: Conversação natural com contexto do notebook
docker-compose up -d
# Features:
# - PostgreSQL persistente
# - Container otimizado
# - Health checks
# - Restart automático
# - Volumes externos
# - Rede isoladadocker-compose -f docker-compose.dev.yml up -d
# Features:
# - Hot reload automático
# - Bind mount do código
# - Debug habilitado
# - PostgreSQL dev (porta 5433)
# - Logs verbosos# === GERENCIAMENTO BÁSICO ===
docker-compose ps # Status dos serviços
docker-compose logs -f # Logs em tempo real
docker-compose restart jupyter-agent # Restart apenas da app
docker-compose down -v # Parar e limpar volumes
# === POSTGRESQL ===
# Conectar ao banco
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent
# Backup
docker-compose exec postgres pg_dump -U jupyter_user jupyter_agent > backup.sql
# Restaurar
cat backup.sql | docker-compose exec -T postgres psql -U jupyter_user -d jupyter_agent
# Ver tabelas
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "\dt"
# === APLICAÇÃO ===
# Shell do container
docker-compose exec jupyter-agent bash
# Ver configuração
docker-compose config
# Rebuild
docker-compose build --no-cache
# Stats de recursos
docker stats# Health checks
curl -f http://localhost:7860/
# PostgreSQL health
docker-compose exec postgres pg_isready -U jupyter_user -d jupyter_agent
# Métricas de uso
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "
SELECT
schemaname,
tablename,
n_tup_ins as inserts,
n_tup_upd as updates,
n_tup_del as deletes
FROM pg_stat_user_tables;
"
# Sessões ativas
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "
SELECT count(*) as active_sessions
FROM sessions
WHERE expires_at > NOW();
"# === BACKUP ===
# Backup completo dos dados
tar -czf backup-$(date +%Y%m%d).tar.gz user_data/
# Backup do PostgreSQL
docker-compose exec postgres pg_dump -U jupyter_user jupyter_agent > db_backup_$(date +%Y%m%d).sql
# === SEGURANÇA ===
# Container roda como usuário não-root (uid 1000)
# Volumes limitados aos diretórios necessários
# Rede isolada para comunicação entre serviços
# Health checks para verificação contínua
# Senhas hasheadas com SHA-256
# Sessões com expiração automática| Arquivo | Responsabilidade | Tecnologia |
|---|---|---|
app.py |
Interface Gradio, navegação, chat UI | Gradio, JavaScript |
config.py |
Gerenciamento de IA providers, modelos dinâmicos | LiteLLM |
user_manager.py |
Autenticação, sessões, CRUD de usuários | PostgreSQL |
database.py |
Database Manager, transações, queries | SQLAlchemy |
models.py |
Modelos de dados, relacionamentos | SQLAlchemy ORM |
jupyter_handler.py |
Execução de código, notebooks | Jupyter, IPython |
migrate_json_to_db.py |
Migração de dados legados | Scripts SQL |
# SQLAlchemy Models com relacionamentos
class User(Base):
sessions = relationship("Session", back_populates="user")
workspaces = relationship("Workspace", back_populates="owner")
credentials = relationship("UserCredential", back_populates="user")
# Database Manager com context managers
with db_manager.get_session() as session:
user = session.create_user(username, password)# Interface compatível com código legacy
user_manager = UserManager() # Agora usa PostgreSQL
success = user_manager.authenticate_user(username, password)
workspaces = user_manager.get_user_workspaces(username)# Configuração dinâmica com LiteLLM
config_manager.get_dynamic_models("openai") # Fetch from API
models = config_manager.get_all_models_for_provider(provider)# Page-based navigation with visibility control
with gr.Column(visible=False) as ai_agent_page:
# AI Agent components
# JavaScript bridge for dynamic interactions
def handle_workspace_click(workspace_id):
return update_page_visibility(ai_agent_page=True)# 1. config.py - Adicionar enum
class AIProvider(Enum):
NEW_PROVIDER = "new_provider"
# 2. Configurar provider
PROVIDER_CONFIGS = {
AIProvider.NEW_PROVIDER: ProviderConfig(
name="new_provider",
display_name="New Provider",
models=["model1", "model2"]
)
}
# 3. Testar integração
valid_models = get_valid_models(custom_llm_provider="new_provider")# 1. Adicionar componente Gradio
new_feature_btn = gr.Button("New Feature")
# 2. Implementar handler
def handle_new_feature(session_token):
# Lógica da nova funcionalidade
return update_components()
# 3. Bind event
new_feature_btn.click(
fn=handle_new_feature,
inputs=[session_token],
outputs=[relevant_components]
)# Container não inicia
docker-compose logs jupyter-agent
# PostgreSQL não conecta
docker-compose logs postgres
docker-compose exec postgres pg_isready -U jupyter_user
# Problemas de permissão (resolvido automaticamente)
# O entrypoint.sh cuida das permissões automaticamente
# Mas se necessário:
sudo chown -R 1000:1000 user_data tmp
# Erro específico: "Permission denied: './tmp/jupyter-agent.ipynb'"
# SOLUÇÃO: Rebuild o container (correção implementada)
docker-compose down
docker-compose build --no-cache jupyter-agent
docker-compose up -d
# Porta em uso
# Alterar no docker-compose.yml:
ports:
- "8080:7860" # Usar porta 8080
# Limpar tudo e recomeçar
docker-compose down -v
docker system prune -f
docker-compose up -d# Verificar conexão
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "SELECT version();"
# Reset do banco
docker-compose down -v
docker volume rm jupyter-agent-2_postgres_data
docker-compose up -d
# Migração falhou
python migrate_json_to_db.py --dry-run # Testar primeiro
python migrate_json_to_db.py --backup # Com backup
# Problemas de encoding
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "SHOW client_encoding;"# Erro de dependências
cd jupyter-agent/
pip install -r requirements.txt --upgrade
# Problemas de imports
python -c "import models, database, user_manager; print('OK')"
# Jupyter não executa
# Verificar se ipykernel está instalado no container
docker-compose exec jupyter-agent pip show ipykernel
# Sessões expiradas
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "SELECT clean_expired_sessions();"
# Credenciais não funcionam
# Verificar se API key está correta na UI de gerenciamento
# Testar provider específico no config_manager# Ver uso de recursos
docker stats
# Limpar sessões antigas
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "DELETE FROM sessions WHERE expires_at < NOW();"
# Otimizar PostgreSQL
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "VACUUM ANALYZE;"
# Ver queries lentas
docker-compose exec postgres psql -U jupyter_user -d jupyter_agent -c "SELECT query, mean_time FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"- 10x mais rápido que JSON files
- Consultas indexadas com sub-segundo response time
- Connection pooling para centenas de usuários simultâneos
- Cache em memória para sessões ativas
- Transações otimizadas com batch operations
# Read replicas para PostgreSQL
# Load balancer para múltiplos containers da app
# Redis para cache distribuído (futuro)
# Kubernetes deployment ready- Fork o repositório
- Clone sua fork:
git clone https://github.com/seu-usuario/jupyter-agent-2.git - Branch para feature:
git checkout -b feature/nova-funcionalidade - Commit suas mudanças:
git commit -m "Add: nova funcionalidade incrível" - Push para branch:
git push origin feature/nova-funcionalidade - Pull Request com descrição detalhada
- Code Style: Follow PEP 8 para Python
- Documentation: Docstrings em todos os métodos
- Testing: Teste suas mudanças com
./test_postgresql.sh - Commits: Mensagens claras e atômicas
- Issues: Use templates para bug reports e feature requests
# Teste completo da integração
./test_postgresql.sh
# Teste de componentes específicos
cd jupyter-agent/
python -c "from database import get_db_manager; print('DB OK')"
python -c "from user_manager import get_user_manager; print('UM OK')"
# Teste do Docker build
docker-compose build --no-cache- Redis Cache: Cache distribuído para session management
- WebSocket Real-time: Colaboração em tempo real
- Advanced Analytics: Métricas de uso e performance dashboard
- Plugin System: Extensões customizáveis
- API REST: Acesso programático ao sistema
- SSO Integration: LDAP, OAuth2, SAML
- Kubernetes Deployment: Manifests e Helm charts
- Advanced Security: 2FA, audit logs, encryption at rest
- Async Support: AsyncIO para melhor performance
- GraphQL API: Query flexível para frontend
- Microservices: Decomposição em serviços especializados
- Event Sourcing: Auditoria completa de ações
- CI/CD Pipeline: GitHub Actions completo
- Issues: Para bugs e feature requests
- Discussions: Para dúvidas e ideias
- Wiki: Documentação detalhada
- Discord: Comunidade de desenvolvedores (em breve)
- Gradio Documentation: Framework de UI
- LiteLLM Documentation: AI Provider Integration
- PostgreSQL Documentation: Database
- Docker Documentation: Containerization
✅ PRODUCTION READY - Arquitetura enterprise com PostgreSQL, Docker e todas as funcionalidades implementadas!
git clone <repository-url>
cd jupyter-agent-2
./start-docker.sh
# Acesse: http://localhost:7860Desenvolvido com ❤️ usando Gradio, PostgreSQL, Docker e muito ☕
Jupyter Agent 2 - Transformando a execução de código em uma experiência colaborativa e inteligente 🚀