@danhachuel/thunderbolt 0.2.30 → 0.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MANUAL-INSTALACAO.md +4 -4
- package/README.md +5 -5
- package/app/modules/niche_finder/data_loader.py +37 -12
- package/package.json +1 -1
package/MANUAL-INSTALACAO.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Este manual descreve a instalação local da UI Thunderbolt, baseada no MoneyPrinterTurbo, utilizando o pacote npm `@danhachuel/thunderbolt`. O fluxo recomendado instala automaticamente o ambiente Python, as dependências da aplicação, as dependências do MoneyPrinterTurbo, o Streamlit e o suporte FFmpeg através de `imageio-ffmpeg`.
|
|
4
4
|
|
|
5
|
-
> **Versão deste manual:** 0.2.
|
|
5
|
+
> **Versão deste manual:** 0.2.31
|
|
6
6
|
> **Pacote npm:** `@danhachuel/thunderbolt`
|
|
7
7
|
> **Porta padrão da UI:** `localhost:3030`
|
|
8
8
|
> **Repositório:** [github.com/DanHachuel/thunderbolt](https://github.com/DanHachuel/thunderbolt)
|
|
@@ -100,13 +100,13 @@ Execute:
|
|
|
100
100
|
Windows PowerShell ou MobaXterm:
|
|
101
101
|
|
|
102
102
|
```powershell
|
|
103
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
103
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
Linux/macOS:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
npx --yes @danhachuel/thunderbolt@0.2.
|
|
109
|
+
npx --yes @danhachuel/thunderbolt@0.2.31 install
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
A instalação normal é **segura para actualizações**: preserva `storage`, Blueprints, Brandings, configurações e artefactos do utilizador. Remove apenas `.venv`, o clone técnico do MoneyPrinterTurbo e dependências que serão recriadas. Uma pasta antiga sem dados do utilizador, como `C:\Users\<utilizador>\AppData\Local\hermes` da tentativa incompleta, pode ser removida; uma pasta antiga que contenha Blueprints, Brandings ou storage é preservada e apenas avisada no terminal. Feche processos Python, Node, Streamlit e MobaXterm que estejam a usar as pastas antes de executar.
|
|
@@ -384,7 +384,7 @@ Ao abrir a página, o Thunderbolt prepara automaticamente os dados públicos atr
|
|
|
384
384
|
|
|
385
385
|
Os parâmetros da UI são número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, engagement, intervalo de datas e tags. O núcleo normaliza os dados, calcula engagement, aplica filtros, faz transformação logarítmica e standardização, executa K-Means e calcula itemsets/regras com FP-Growth. A análise inicial é automática; o botão **Analisar Nichos** recalcula os resultados depois de alterar os filtros. Os resultados são DataFrames de clusters, itemsets frequentes, regras de associação e dados analisados; o gráfico de dispersão é criado nativamente com Plotly.
|
|
386
386
|
|
|
387
|
-
As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
387
|
+
As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install`; o instalador detecta e reutiliza o que já estiver válido.
|
|
388
388
|
|
|
389
389
|
## Pipeline: Criação de Vídeos, Criação de Músicas e Automação
|
|
390
390
|
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ A primeira versão implementa a camada UI independente com:
|
|
|
26
26
|
|
|
27
27
|
Os adaptadores do MoneyPrinterTurbo e de publicação nas plataformas são ligados pelas configurações locais e pelos pontos de integração em `integrations/`. A UI não inventa dados quando um serviço externo ou credencial não está disponível.
|
|
28
28
|
|
|
29
|
-
## Navegação da UI 0.2.
|
|
29
|
+
## Navegação da UI 0.2.31
|
|
30
30
|
|
|
31
31
|
A barra lateral mantém apenas os cinco níveis principais, nesta ordem: **Início**, **Pipeline**, **Automação**, **Niche Finder** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Upload** e **Limpador de Metadados**. **Configurações** é expansível e contém **Canais**, **Blueprints**, **MCP** e **Configurações Técnicas**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
|
|
32
32
|
|
|
@@ -109,9 +109,9 @@ thunderbolt
|
|
|
109
109
|
No Windows PowerShell, se `npx` for bloqueado por `npx.ps1`, use directamente `npx.cmd`:
|
|
110
110
|
|
|
111
111
|
```powershell
|
|
112
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
113
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
114
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
112
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install
|
|
113
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.31 doctor
|
|
114
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.31
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
Como alternativa, pode permitir scripts para o seu utilizador:
|
|
@@ -135,7 +135,7 @@ A página **Niche Finder** integra a lógica do projecto open source [johanfortu
|
|
|
135
135
|
|
|
136
136
|
A interface apresenta directamente os parâmetros da busca: número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, categoria de engagement, intervalo de datas e tags. A análise inicial é executada automaticamente e **Analisar Nichos** permite recalcular os resultados depois de alterar os filtros. O núcleo aplica normalização, filtros, `log1p`, `StandardScaler`, K-Means e FP-Growth. Os resultados aparecem em DataFrames para clusters, itemsets frequentes, regras de associação e dados analisados, acompanhados por uma visualização Plotly nativa e pesquisa de palavras nos clusters.
|
|
137
137
|
|
|
138
|
-
As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
138
|
+
As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install`; o instalador detecta e reutiliza componentes já válidos.
|
|
139
139
|
|
|
140
140
|
## Armazenamento local
|
|
141
141
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import shutil
|
|
4
|
+
import tempfile
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
import pandas as pd
|
|
@@ -61,26 +62,50 @@ def _copy_csv(source: Path, destination: Path) -> Path:
|
|
|
61
62
|
return destination
|
|
62
63
|
|
|
63
64
|
|
|
65
|
+
def _has_usable_cached_dataset() -> bool:
|
|
66
|
+
"""Check only the header so a valid multi-gigabyte cache is not read twice."""
|
|
67
|
+
if not DEFAULT_DATASET_PATH.exists() or DEFAULT_DATASET_PATH.stat().st_size <= 0:
|
|
68
|
+
return False
|
|
69
|
+
try:
|
|
70
|
+
columns = set(pd.read_csv(DEFAULT_DATASET_PATH, nrows=0).columns)
|
|
71
|
+
except (OSError, UnicodeDecodeError, pd.errors.ParserError, pd.errors.EmptyDataError):
|
|
72
|
+
return False
|
|
73
|
+
return set(REQUIRED_COLUMNS).issubset(columns)
|
|
74
|
+
|
|
75
|
+
|
|
64
76
|
def _download_with_kagglehub() -> Path | None:
|
|
65
77
|
if kagglehub is None:
|
|
66
78
|
return None
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
ensure_data_dir()
|
|
80
|
+
# KaggleHub rejects a non-empty output_dir on Windows. Use a new temporary
|
|
81
|
+
# directory for every download, then copy only the validated CSV into the
|
|
82
|
+
# persistent Thunderbolt cache. This also isolates partial downloads.
|
|
83
|
+
with tempfile.TemporaryDirectory(prefix=".niche-kaggle-", dir=str(DATA_DIR.parent)) as temporary_root:
|
|
84
|
+
temporary_path = Path(temporary_root)
|
|
85
|
+
try:
|
|
86
|
+
try:
|
|
87
|
+
downloaded = kagglehub.dataset_download(
|
|
88
|
+
DEFAULT_DATASET_SLUG,
|
|
89
|
+
output_dir=str(temporary_path),
|
|
90
|
+
force_download=True,
|
|
91
|
+
)
|
|
92
|
+
except TypeError: # compatibility with older KaggleHub releases
|
|
93
|
+
downloaded = kagglehub.dataset_download(
|
|
94
|
+
DEFAULT_DATASET_SLUG,
|
|
95
|
+
output_dir=str(temporary_path),
|
|
96
|
+
)
|
|
97
|
+
except Exception as exc: # pragma: no cover - depends on network/provider state
|
|
98
|
+
raise DatasetError(f"O Thunderbolt não conseguiu preparar os dados automáticos: {exc}") from exc
|
|
99
|
+
source = _find_csv(Path(downloaded))
|
|
100
|
+
if source is None:
|
|
101
|
+
raise DatasetError("A preparação automática terminou sem encontrar dados compatíveis.")
|
|
102
|
+
return _copy_csv(source, DEFAULT_DATASET_PATH)
|
|
78
103
|
|
|
79
104
|
|
|
80
105
|
def download_kaggle_dataset() -> Path:
|
|
81
106
|
"""Prepare and cache the public Niche-Finder dataset without user interaction."""
|
|
82
107
|
ensure_data_dir()
|
|
83
|
-
if
|
|
108
|
+
if _has_usable_cached_dataset():
|
|
84
109
|
return DEFAULT_DATASET_PATH
|
|
85
110
|
if kagglehub is None:
|
|
86
111
|
raise DatasetError("O componente automático de dados não está disponível nesta instalação.")
|
package/package.json
CHANGED