simpleaudit-studio 0.2.2__tar.gz → 0.2.3__tar.gz
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.
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/PKG-INFO +6 -6
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/README.md +5 -5
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/docs/architecture.md +3 -10
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/docs/deployment.md +11 -14
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/pyproject.toml +1 -1
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/simpleaudit_studio/cli.py +2 -2
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.dockerignore +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.env.example +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.env.local.example +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.github/workflows/ci.yml +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.github/workflows/publish.yml +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/.gitignore +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/Dockerfile +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/LICENSE +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/Makefile +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/admin.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/apps.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/auth_urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/migrations/0002_user_workos_user_id.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/models.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/project_urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/serializers.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/services.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/views.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/accounts/workos_auth.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/admin.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/apps.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/comparison.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/events.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/migrations/0002_add_audit_run_archived.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/migrations/0003_auditrun_updated_at.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/models.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/serializers.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/services.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/views.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/config/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/config/asgi.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/config/settings.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/config/urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/config/wsgi.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/deploy/compose/Dockerfile +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/deploy/e2e_smoke.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/deploy/mock_openai_server.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/deploy/postgres-init.sql +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/deploy/seed_bulk.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/docker-compose.yml +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/docs/domain-model.md +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/e2e/test_ui.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/admin.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/apps.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/context_processors.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/engine.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/exceptions.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/fixtures/demo_audit_results.json +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/hashing.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/health.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/health_api.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/logging.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/bootstrap_platform.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/purge_test_data.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/run_worker.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/seed_demo_audits.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/seed_platform.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/middleware.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/minimal_config.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/permissions.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/readiness.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/seed.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/simpleaudit_package.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/startup_checks.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/factories.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_api_e2e.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_archive.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_clone.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_events.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_poll_results.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_rename.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_run_freeze.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_sse.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_submission.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_timing.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_auth_projects.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_bootstrap.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_comparison.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_engine_integration.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_health.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_health_panel.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_middleware.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_minimal_config.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_model_registry.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_purge_test_data.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_scenario_import_export.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_scenarios.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_seed_platform.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_smoke_all_pages.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_workspaces.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_workspaces_ui.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/ui.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/worker.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/manage.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/admin.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/apps.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/models.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/serializers.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/services.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/views.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/requirements.txt +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/admin.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/apps.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/models.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/serializers.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/services.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/urls.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/scenarios/views.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/simpleaudit_studio/__init__.py +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/favicon-16x16.svg +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/favicon-32x32.svg +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/favicon.svg +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/js/diff.min.js +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/logo.png +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/static/logo.svg +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/404.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/audit_detail.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/auth/login.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/auth/register.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/auth/workos_login.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/auth/workos_verify.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/base.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/compare.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/dashboard.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/health.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/models.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/new_audit.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/scenario_result_detail.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/scenarios.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/templates/workspaces.html +0 -0
- {simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: simpleaudit-studio
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Production AI model audit platform — one-liner demo mode via uvx
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -52,7 +52,7 @@ A self-hostable platform for running reproducible AI model audits using the [Sim
|
|
|
52
52
|
uvx simpleaudit-studio
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
[`uvx`](https://docs.astral.sh/uv/#uvx) installs the [`simpleaudit-studio`](https://pypi.org/project/simpleaudit-studio/) package and runs it in an isolated environment. No Docker, no Postgres, no manual setup. Opens at http://localhost:8000 (login: `
|
|
55
|
+
[`uvx`](https://docs.astral.sh/uv/#uvx) installs the [`simpleaudit-studio`](https://pypi.org/project/simpleaudit-studio/) package and runs it in an isolated environment. No Docker, no Postgres, no manual setup. Opens at http://localhost:8000 (login: `studio` / `admin123`). A mock model server is pre-seeded so you can start exploring audit results immediately.
|
|
56
56
|
|
|
57
57
|
🌐 Or skip the setup entirely — try the live demo: <a href="https://sushantgautam-simpleaudit-studio.hf.space" target="_blank" rel="noopener noreferrer">sushantgautam-simpleaudit-studio.hf.space</a>
|
|
58
58
|
|
|
@@ -63,7 +63,7 @@ The pre-seeded connections point at a built-in mock server. To run real audits,
|
|
|
63
63
|
| Provider | Base URL | Example |
|
|
64
64
|
|----------|----------|---------|
|
|
65
65
|
| Ollama (local) | `http://localhost:11434/v1` | Qwen 3, Llama 3.3, Mistral |
|
|
66
|
-
| vLLM
|
|
66
|
+
| vLLM | `http://your-vllm-server:8000/v1` | Any HF model |
|
|
67
67
|
| OpenAI | `https://api.openai.com/v1` | GPT-4o, o3 |
|
|
68
68
|
| Together AI | `https://api.together.xyz/v1` | Many open models |
|
|
69
69
|
| Groq | `https://api.groq.com/openai/v1` | Fast inference |
|
|
@@ -72,7 +72,7 @@ Set the API key in the connection form (leave blank for local servers that don't
|
|
|
72
72
|
|
|
73
73
|
## 🐳 Self-Hosting
|
|
74
74
|
|
|
75
|
-
For teams
|
|
75
|
+
For teams or multi-user setups, use Docker Compose:
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
78
|
git clone https://github.com/SushantGautam/SimpleAuditStudio
|
|
@@ -84,7 +84,7 @@ docker compose up -d
|
|
|
84
84
|
|
|
85
85
|
Services: Web UI (:8000), PostgreSQL, Hatchet queue (:8888), Worker. Optional profiles: `--profile storage` (MinIO), `--profile mock` (mock model API).
|
|
86
86
|
|
|
87
|
-
See [docs/deployment.md](docs/deployment.md) for production hardening,
|
|
87
|
+
See [docs/deployment.md](docs/deployment.md) for production hardening, backups, and upgrades.
|
|
88
88
|
|
|
89
89
|
## ✨ What You Can Do
|
|
90
90
|
|
|
@@ -111,7 +111,7 @@ Browser → Django/Gunicorn (:7860)
|
|
|
111
111
|
|
|
112
112
|
- [Architecture](docs/architecture.md) — system design, service boundaries, deployment topology
|
|
113
113
|
- [Domain Model](docs/domain-model.md) — scenarios, scenario sets, audit runs, immutability invariants
|
|
114
|
-
- [Deployment](docs/deployment.md) — Docker Compose, production hardening,
|
|
114
|
+
- [Deployment](docs/deployment.md) — Docker Compose, production hardening, upgrades
|
|
115
115
|
|
|
116
116
|
## 🤝 Contributing
|
|
117
117
|
|
|
@@ -25,7 +25,7 @@ A self-hostable platform for running reproducible AI model audits using the [Sim
|
|
|
25
25
|
uvx simpleaudit-studio
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
[`uvx`](https://docs.astral.sh/uv/#uvx) installs the [`simpleaudit-studio`](https://pypi.org/project/simpleaudit-studio/) package and runs it in an isolated environment. No Docker, no Postgres, no manual setup. Opens at http://localhost:8000 (login: `
|
|
28
|
+
[`uvx`](https://docs.astral.sh/uv/#uvx) installs the [`simpleaudit-studio`](https://pypi.org/project/simpleaudit-studio/) package and runs it in an isolated environment. No Docker, no Postgres, no manual setup. Opens at http://localhost:8000 (login: `studio` / `admin123`). A mock model server is pre-seeded so you can start exploring audit results immediately.
|
|
29
29
|
|
|
30
30
|
🌐 Or skip the setup entirely — try the live demo: <a href="https://sushantgautam-simpleaudit-studio.hf.space" target="_blank" rel="noopener noreferrer">sushantgautam-simpleaudit-studio.hf.space</a>
|
|
31
31
|
|
|
@@ -36,7 +36,7 @@ The pre-seeded connections point at a built-in mock server. To run real audits,
|
|
|
36
36
|
| Provider | Base URL | Example |
|
|
37
37
|
|----------|----------|---------|
|
|
38
38
|
| Ollama (local) | `http://localhost:11434/v1` | Qwen 3, Llama 3.3, Mistral |
|
|
39
|
-
| vLLM
|
|
39
|
+
| vLLM | `http://your-vllm-server:8000/v1` | Any HF model |
|
|
40
40
|
| OpenAI | `https://api.openai.com/v1` | GPT-4o, o3 |
|
|
41
41
|
| Together AI | `https://api.together.xyz/v1` | Many open models |
|
|
42
42
|
| Groq | `https://api.groq.com/openai/v1` | Fast inference |
|
|
@@ -45,7 +45,7 @@ Set the API key in the connection form (leave blank for local servers that don't
|
|
|
45
45
|
|
|
46
46
|
## 🐳 Self-Hosting
|
|
47
47
|
|
|
48
|
-
For teams
|
|
48
|
+
For teams or multi-user setups, use Docker Compose:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
51
|
git clone https://github.com/SushantGautam/SimpleAuditStudio
|
|
@@ -57,7 +57,7 @@ docker compose up -d
|
|
|
57
57
|
|
|
58
58
|
Services: Web UI (:8000), PostgreSQL, Hatchet queue (:8888), Worker. Optional profiles: `--profile storage` (MinIO), `--profile mock` (mock model API).
|
|
59
59
|
|
|
60
|
-
See [docs/deployment.md](docs/deployment.md) for production hardening,
|
|
60
|
+
See [docs/deployment.md](docs/deployment.md) for production hardening, backups, and upgrades.
|
|
61
61
|
|
|
62
62
|
## ✨ What You Can Do
|
|
63
63
|
|
|
@@ -84,7 +84,7 @@ Browser → Django/Gunicorn (:7860)
|
|
|
84
84
|
|
|
85
85
|
- [Architecture](docs/architecture.md) — system design, service boundaries, deployment topology
|
|
86
86
|
- [Domain Model](docs/domain-model.md) — scenarios, scenario sets, audit runs, immutability invariants
|
|
87
|
-
- [Deployment](docs/deployment.md) — Docker Compose, production hardening,
|
|
87
|
+
- [Deployment](docs/deployment.md) — Docker Compose, production hardening, upgrades
|
|
88
88
|
|
|
89
89
|
## 🤝 Contributing
|
|
90
90
|
|
|
@@ -9,7 +9,7 @@ The production platform must be:
|
|
|
9
9
|
|
|
10
10
|
- self-hostable with Docker Compose
|
|
11
11
|
- durable across web/API and worker restarts
|
|
12
|
-
- safe for long-running
|
|
12
|
+
- safe for long-running audit jobs
|
|
13
13
|
- observable end to end
|
|
14
14
|
- reproducible at the audit level
|
|
15
15
|
- maintainable by multiple developers
|
|
@@ -39,10 +39,8 @@ flowchart TD
|
|
|
39
39
|
Web --> Obj[(S3/MinIO Object Storage)]
|
|
40
40
|
Web --> WF[Workflow/Queue System]
|
|
41
41
|
WF --> CPU[CPU Workers]
|
|
42
|
-
WF --> GPU[GPU Workers]
|
|
43
42
|
WF --> APIWorkers[External API Workers]
|
|
44
43
|
CPU --> SA[SimpleAudit Engine]
|
|
45
|
-
GPU --> SA
|
|
46
44
|
APIWorkers --> SA
|
|
47
45
|
SA --> Obj
|
|
48
46
|
SA --> PG
|
|
@@ -120,20 +118,16 @@ to credential material inside the worker environment.
|
|
|
120
118
|
Workers register labels/capabilities:
|
|
121
119
|
|
|
122
120
|
- `cpu`
|
|
123
|
-
- `gpu`
|
|
124
|
-
- `h200`
|
|
125
|
-
- `gh200`
|
|
126
121
|
- `external-api`
|
|
127
122
|
- `local-inference`
|
|
128
123
|
|
|
129
|
-
Jobs request required capabilities. The web server never needs
|
|
124
|
+
Jobs request required capabilities. The web server never needs direct model access.
|
|
130
125
|
|
|
131
126
|
Concurrency limits are configured per pool:
|
|
132
127
|
|
|
133
128
|
- global max concurrent audits
|
|
134
129
|
- per-run max concurrent scenarios
|
|
135
130
|
- per-model endpoint rate limit where known
|
|
136
|
-
- GPU worker slot count
|
|
137
131
|
|
|
138
132
|
### 4.4 Idempotency
|
|
139
133
|
|
|
@@ -334,8 +328,7 @@ docker compose
|
|
|
334
328
|
├── postgres
|
|
335
329
|
├── minio
|
|
336
330
|
├── hatchet-server
|
|
337
|
-
├── hatchet-worker
|
|
338
|
-
├── hatchet-worker-gpu # optional, same host or remote
|
|
331
|
+
├── hatchet-worker
|
|
339
332
|
├── web
|
|
340
333
|
└── collector # optional
|
|
341
334
|
```
|
|
@@ -21,21 +21,22 @@ After startup, the user should get:
|
|
|
21
21
|
- PostgreSQL initialized/migrated
|
|
22
22
|
- object storage bucket initialized
|
|
23
23
|
- workflow server available to workers
|
|
24
|
-
-
|
|
25
|
-
- optional GPU worker running if hardware/config present
|
|
24
|
+
- worker running
|
|
26
25
|
- health checks passing
|
|
27
26
|
- documented first-run bootstrap command
|
|
28
27
|
|
|
29
28
|
No undocumented manual database setup is allowed.
|
|
30
29
|
|
|
31
|
-
First-run bootstrap:
|
|
30
|
+
First-run bootstrap (idempotent, runs automatically on container start):
|
|
32
31
|
|
|
33
|
-
1. create
|
|
34
|
-
2. create
|
|
35
|
-
3.
|
|
32
|
+
1. create the platform owner account (`BOOTSTRAP_USERNAME`, default `studio`) with `is_staff=True` — not a Django superuser
|
|
33
|
+
2. create the Default workspace
|
|
34
|
+
3. grant the owner an ADMIN membership in the Default workspace
|
|
36
35
|
4. optionally import a starter scenario pack into that project
|
|
37
36
|
5. print or log next steps for model endpoint registration
|
|
38
37
|
|
|
38
|
+
Configuration via environment variables: `BOOTSTRAP_USERNAME`, `BOOTSTRAP_EMAIL`, `BOOTSTRAP_PASSWORD`, `BOOTSTRAP_PROJECT_NAME`.
|
|
39
|
+
|
|
39
40
|
Bootstrap must be idempotent and must not require hand-editing SQL.
|
|
40
41
|
|
|
41
42
|
## 2. Canonical components
|
|
@@ -46,8 +47,7 @@ Bootstrap must be idempotent and must not require hand-editing SQL.
|
|
|
46
47
|
| PostgreSQL | authoritative state | `postgres` |
|
|
47
48
|
| MinIO/S3 | artifacts | `minio` |
|
|
48
49
|
| Hatchet server | durable workflow/queue | `hatchet-server` |
|
|
49
|
-
|
|
|
50
|
-
| GPU worker | runs local/GPU inference | `worker-gpu` optional |
|
|
50
|
+
| Worker | runs audits (CPU + external API models) | `worker` |
|
|
51
51
|
| OTel collector | traces/logs/metrics | optional |
|
|
52
52
|
| Langfuse | LLM observability | optional |
|
|
53
53
|
|
|
@@ -81,7 +81,7 @@ Requirements:
|
|
|
81
81
|
|
|
82
82
|
- isolated data
|
|
83
83
|
- same migration path as production
|
|
84
|
-
- access to representative
|
|
84
|
+
- access to representative model API endpoints if available
|
|
85
85
|
|
|
86
86
|
### 3.3 Production
|
|
87
87
|
|
|
@@ -345,8 +345,7 @@ Components:
|
|
|
345
345
|
- PostgreSQL
|
|
346
346
|
- MinIO/S3
|
|
347
347
|
- Hatchet server
|
|
348
|
-
-
|
|
349
|
-
- optional GPU worker
|
|
348
|
+
- worker
|
|
350
349
|
- web/API
|
|
351
350
|
- optional OTel collector/Langfuse
|
|
352
351
|
|
|
@@ -358,7 +357,7 @@ Components:
|
|
|
358
357
|
|
|
359
358
|
- PostgreSQL
|
|
360
359
|
- Hatchet server
|
|
361
|
-
-
|
|
360
|
+
- worker
|
|
362
361
|
- web/API
|
|
363
362
|
- local volume or managed object storage compatible with the same artifact interface
|
|
364
363
|
|
|
@@ -371,13 +370,11 @@ PostgreSQL, authentication, and object-storage-compatible artifact persistence.
|
|
|
371
370
|
Single host:
|
|
372
371
|
|
|
373
372
|
- scale worker concurrency within host resources
|
|
374
|
-
- run GPU worker only if GPU available
|
|
375
373
|
|
|
376
374
|
Multi host:
|
|
377
375
|
|
|
378
376
|
- remote workers point to same Postgres/MinIO/Hatchet
|
|
379
377
|
- add labels for capabilities
|
|
380
|
-
- no web server access to GPU required
|
|
381
378
|
- consider separate network segmentation for workers
|
|
382
379
|
|
|
383
380
|
Do not scale horizontally until single-host bottlenecks are measured.
|
|
@@ -100,7 +100,7 @@ def main() -> None:
|
|
|
100
100
|
time.sleep(1)
|
|
101
101
|
|
|
102
102
|
username = os.environ.get("BOOTSTRAP_USERNAME", "studio")
|
|
103
|
-
password = os.environ.get("BOOTSTRAP_PASSWORD", "
|
|
103
|
+
password = os.environ.get("BOOTSTRAP_PASSWORD", "admin123")
|
|
104
104
|
|
|
105
105
|
print("┌─────────────────────────────────────────────────────────┐")
|
|
106
106
|
print("│ │")
|
|
@@ -142,7 +142,7 @@ def _seed_demo_data() -> None:
|
|
|
142
142
|
# Respect env vars (set by Dockerfile for HF Space, or defaults for local)
|
|
143
143
|
username = os.environ.get("BOOTSTRAP_USERNAME", "studio")
|
|
144
144
|
email = os.environ.get("BOOTSTRAP_EMAIL", "admin@localhost")
|
|
145
|
-
password = os.environ.get("BOOTSTRAP_PASSWORD", "
|
|
145
|
+
password = os.environ.get("BOOTSTRAP_PASSWORD", "admin123")
|
|
146
146
|
project_name = os.environ.get("BOOTSTRAP_PROJECT_NAME", "Demo Project")
|
|
147
147
|
|
|
148
148
|
user, project = bootstrap_admin_and_default_project(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/audits/migrations/0003_auditrun_updated_at.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/fixtures/demo_audit_results.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/purge_test_data.py
RENAMED
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/run_worker.py
RENAMED
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/seed_demo_audits.py
RENAMED
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/management/commands/seed_platform.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_audit_poll_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_engine_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/infra/tests/test_scenario_import_export.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simpleaudit_studio-0.2.2 → simpleaudit_studio-0.2.3}/model_registry/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|