skyp
Aplicação web com interface moderna + API Node.js para chat com modelos Gemini, enriquecimento por upload de arquivos e scraping de páginas.
O projeto combina:
- Frontend web (chat estilo GPT, histórico local, tema claro/escuro);
- Backend Express com:
- fallback automático entre modelos Gemini;
- upload e extração de contexto por IP;
- scraping básico;
- limpeza de uploads.
Também inclui um launcher em Python (launcher.py) para facilitar a inicialização e encerramento do ambiente.
- Chat com fallback automático de modelos
- Prioridade atual:
gemini-2.5-flashgemini-2.0-flash-001gemini-2.0-flashgemini-flash-latestgemini-1.5-flash-latest
- Até 3 ciclos completos de tentativa.
- Prioridade atual:
- Rate limit por IP
- 10 requisições/minuto no endpoint
/api/chat.
- 10 requisições/minuto no endpoint
- Upload com extração de contexto
- Até 5 arquivos por requisição.
- Suporta:
.xlsx,.xls,.csv,.txt,.pdf. - Contexto consolidado por IP (memória), com limite aproximado de 120.000 chars.
- Scraping de páginas
- Remove elementos não essenciais e retorna título + conteúdo resumido.
- Porta dinâmica
process.env.PORT || 3000.
- Info do usuário
/api/user-infocom nome formatado baseado no ambiente.
- Multi-chat com histórico persistido em
localStorage; - Alternância de tema claro/escuro;
- Botões de ação rápida;
- Renderização Markdown nas respostas;
- Ações na mensagem da IA: copiar, regenerar, feedback 👍/👎;
- Indicador de digitação e aviso de lentidão.
Node.js / API
- express, dotenv, cors, node-fetch, multer, axios, cheerio, xlsx, pdf-parse
Frontend
- HTML, CSS, JavaScript vanilla
Launcher
- Python 3 +
psutil
.
├── server.js
├── launcher.py
├── package.json
├── package-lock.json
├── .gitignore
├── README.md
├── public/
│ ├── index.html
│ ├── script.js
│ └── style.css
├── testdata/
│ ├── broken.pdf
│ ├── chat.json
│ ├── sample.csv
│ ├── sample.txt
│ └── scrape.json
├── test-chat.json
└── test-scrape.json
- Node.js 18+
- npm
- (Opcional, para launcher) Python 3.10+
Crie o arquivo .env na raiz:
GEMINI_API_KEY=sua_chave_aqui
# opcional
# PORT=4010Se PORT não for definida, a aplicação usa 3000.
npm install
npm startexecutar.batpip install psutil
python launcher.pyO launcher.py automatiza a execução local:
- inicia o servidor com
npm start; - aguarda ~3 segundos;
- abre
public/index.htmlno navegador padrão; - mantém monitoramento do processo Node;
- ao encerrar, finaliza processo pai e filhos com
psutil.
- Usa
shell=Truepara localizarnpmno ambiente Windows. - Abre o arquivo local
public/index.htmlviafile://. - Requer
psutilinstalado no Python em uso.
pip install psutil- O launcher abre o HTML local, não uma URL HTTP diretamente.
- O tempo fixo de espera (3s) pode variar conforme máquina/ambiente.
Retorna a interface web.
Retorna nome do usuário formatado.
Lista modelos Gemini disponíveis.
Envia prompt para geração com fallback de modelos.
Exemplo body:
{
"prompt": "Resumo da fatura anexada",
"model": "gemini-2.5-flash",
"temperature": 0.7
}Upload de até 5 arquivos em files (form-data) para gerar contexto.
Exemplo body:
{ "url": "https://example.com" }Limpa a pasta uploads/.
PowerShell:
$env:PORT=4010; npm start
curl.exe -i http://localhost:4010/api/user-info- Contexto de upload fica em memória por IP (não persistente).
- Reiniciar servidor limpa contextos.
- Frontend tenta
DELETE /api/memoryao limpar chat, mas esse endpoint não existe no backend atual. - PDFs escaneados podem não ter texto extraível.
- 429 / quota Gemini: validar billing/limites da chave.
- Porta em uso: definir outra porta em
PORT. - Sem resposta útil: confirmar upload/contexto antes do chat.
- Erro no launcher:
- verificar Python e
psutil; - validar que
npm startfunciona manualmente no terminal.
- verificar Python e