Adaptive Feature Flags é uma API de feature flags com rollout determinístico e suporte opcional a machine learning para decisão por usuário, construída com uma base Event-Driven em que eventos de uso alimentam o ciclo de decisão e aprendizado, mantendo fallback seguro no MVP e preparando evolução incremental para capacidades mais robustas de experimentação e teste A/B.
Requisitos:
- Python 3.12+
git clone https://github.com/MariaCarolinass/adaptive-feature-flags.git
cd adaptive-feature-flags
python3 -m venv .venv
source .venv/bin/activate
cp .env.example .env
pip install -r requirements.txtInicie a API:
uvicorn app.main:app --reloadAbra a interface web:
http://localhost:8000/
A tela inicial carrega o painel do produto com navegação lateral para resumo, insights, regras, avaliação, atividades e treinos. A interface usa a própria API para listar regras, carregar eventos, avaliar usuários, registrar atividades e consultar o estado do modelo.
Acesse a documentação interativa da API:
http://localhost:8000/docs
http://localhost:8000/redoc
http://localhost:8000/openapi.json
Essas páginas ficam disponíveis quando ENABLE_DOCS=true no .env.
Teste rápido de disponibilidade:
curl http://localhost:8000/health
curl http://localhost:8000/featuresDepois de instalar e subir a API, você pode escolher 1 de 2 caminhos para popular dados:
O script scripts/seed_demo.py inicializa a base local com dados de exemplo para facilitar testes manuais do fluxo completo.
python3 scripts/seed_demo.pyO script é idempotente: rodar mais de uma vez não duplica registros equivalentes.
O importador oficial é o scripts/import_events_csv.py. Ele importa eventos de CSV para o schema canônico de eventos da API.
Modos suportados:
--adapter ecommerce_dataset: para CSV no formato de dataset e-commerce (timestamp,visitorid,event,itemid).--adapter generic: para CSV customizado com mapeamento via--mapping-json.
Detalhes dos adapters e exemplos completos: docs/operations/csv-import-adapters.md
Exemplos:
python3 scripts/import_events_csv.py \
--adapter ecommerce_dataset \
--csv dataset/events.csv \
--feature-key-mode item \
--limit 10000Se seu CSV for customizado, use --adapter generic com --mapping-json.
O script scripts/test_model.py compara o desempenho do modelo treinado com o baseline de rollout determinístico.
Exemplo:
python3 scripts/test_model.py \
--artifact-path storage/models/v1.joblib \
--rollout-percentage 10Para proteger a API, ative autenticação no .env:
AUTH_ENABLED=true
AUTH_JWT_SECRET=minha-chave-jwt-local
AUTH_ISSUER_KEY=minha-chave-emissora
AUTH_TOKEN_EXPIRE_MINUTES=60Gerar token:
curl -X POST http://localhost:8000/auth/token \
-H "Content-Type: application/json" \
-d '{"issuer_key":"minha-chave-emissora","subject":"dev-local","expires_minutes":60}'Usar token:
curl -H "Authorization: Bearer <token-jwt>" http://localhost:8000/featuresGET /- interface webGET /docs- Swagger UI, quandoENABLE_DOCS=trueGET /redoc- ReDoc, quandoENABLE_DOCS=trueGET /openapi.json- schema OpenAPI, quandoENABLE_DOCS=trueGET /healthPOST|GET|PUT|DELETE /featuresPOST|GET /eventsPOST /ingest/eventsPOST /trainGET /model/statusGET /model/runsPOST /evaluateGET /metricsPOST|GET /experimentsGET /experiments/{id}/result
A documentação completa do projeto está em docs/README.md, incluindo:
- visão de produto MVP,
- arquitetura e fluxos,
- referência de API por endpoint,
- decisões técnicas (ADRs),
- implementações críticas de código,
- guia de operação e desenvolvimento,
- roadmap de evolução.
pytest