simpleaudit-studio 0.5.2__tar.gz → 0.5.4__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.
Potentially problematic release.
This version of simpleaudit-studio might be problematic. Click here for more details.
- simpleaudit_studio-0.5.4/.env.dev.example +90 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.env.example +35 -2
- simpleaudit_studio-0.5.4/.github/agents/orchestrator.agent.md +47 -0
- simpleaudit_studio-0.5.4/.github/agents/regression-reviewer.agent.md +21 -0
- simpleaudit_studio-0.5.4/.github/agents/researcher.agent.md +13 -0
- simpleaudit_studio-0.5.4/.github/agents/test-reviewer.agent.md +21 -0
- simpleaudit_studio-0.5.4/.github/agents/verifier.agent.md +25 -0
- simpleaudit_studio-0.5.4/.github/prompts/parallel-orchestrate.prompt.md +21 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.github/workflows/ci.yml +11 -4
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.gitignore +1 -0
- simpleaudit_studio-0.5.4/AGENTS.md +109 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/Dockerfile +23 -10
- simpleaudit_studio-0.5.4/PKG-INFO +102 -0
- simpleaudit_studio-0.5.4/README.md +64 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/apps.py +3 -0
- simpleaudit_studio-0.5.4/accounts/migrations/0003_project_created_by_projectmembership_created_by.py +36 -0
- simpleaudit_studio-0.5.4/accounts/migrations/0004_project_openwebui_admin_group_id_and_more.py +27 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/models.py +18 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/serializers.py +5 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/services.py +31 -5
- simpleaudit_studio-0.5.4/accounts/signals.py +20 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/views.py +7 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/comparison.py +40 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/experiments.py +66 -2
- simpleaudit_studio-0.5.4/audits/migrations/0005_auditrun_trace_config.py +17 -0
- simpleaudit_studio-0.5.4/audits/migrations/0006_alter_monitor_next_run_at.py +19 -0
- simpleaudit_studio-0.5.4/audits/migrations/0007_agent_target.py +30 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/models.py +18 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/monitors.py +34 -24
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/serializers.py +9 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/services.py +67 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/views.py +7 -2
- simpleaudit_studio-0.5.4/chat/__init__.py +6 -0
- simpleaudit_studio-0.5.4/chat/access_sync.py +159 -0
- simpleaudit_studio-0.5.4/chat/api.py +529 -0
- simpleaudit_studio-0.5.4/chat/apps.py +28 -0
- simpleaudit_studio-0.5.4/chat/config.py +183 -0
- simpleaudit_studio-0.5.4/chat/embed.css +106 -0
- simpleaudit_studio-0.5.4/chat/embed_admin.css +68 -0
- simpleaudit_studio-0.5.4/chat/embed_admin.js +201 -0
- simpleaudit_studio-0.5.4/chat/management/commands/chat_knowledge.py +59 -0
- simpleaudit_studio-0.5.4/chat/management/commands/sync_chat_models.py +54 -0
- simpleaudit_studio-0.5.4/chat/proxy.py +805 -0
- simpleaudit_studio-0.5.4/chat/signals.py +33 -0
- simpleaudit_studio-0.5.4/chat/sync.py +149 -0
- simpleaudit_studio-0.5.4/chat/templates/chat/chat.html +333 -0
- simpleaudit_studio-0.5.4/chat/tests/__init__.py +8 -0
- simpleaudit_studio-0.5.4/chat/tests/test_access_sync.py +54 -0
- simpleaudit_studio-0.5.4/chat/tests/test_api.py +312 -0
- simpleaudit_studio-0.5.4/chat/tests/test_chat.py +591 -0
- simpleaudit_studio-0.5.4/chat/tests/test_proxy.py +395 -0
- simpleaudit_studio-0.5.4/chat/tests/test_sync.py +228 -0
- simpleaudit_studio-0.5.4/chat/urls.py +14 -0
- simpleaudit_studio-0.5.4/chat/views.py +295 -0
- simpleaudit_studio-0.5.4/config/runtime.py +193 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/config/settings.py +52 -1
- simpleaudit_studio-0.5.4/config/tests/test_runtime.py +223 -0
- simpleaudit_studio-0.5.4/config/tests/test_settings_sqlite_path.py +59 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/config/urls.py +74 -1
- simpleaudit_studio-0.5.4/conftest.py +31 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/deploy/compose/Dockerfile +4 -1
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/0002-node-build-heap.patch +14 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/Caddyfile.subpath +138 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/DESIGN.md +147 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/README.md +139 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/UPGRADE.md +126 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/build.sh +65 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/subpath-v0.9.6.patch +3808 -0
- simpleaudit_studio-0.5.4/deploy/openwebui-subpath/subpath.patch +4711 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/docker-compose.yml +84 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/docs/architecture.md +1 -1
- simpleaudit_studio-0.5.4/docs/chat.md +373 -0
- simpleaudit_studio-0.5.4/docs/deployment.md +214 -0
- simpleaudit_studio-0.5.4/docs/superpowers/plans/2026-10-03-openwebui-resource-management.md +586 -0
- simpleaudit_studio-0.5.4/docs/superpowers/specs/2026-10-03-openwebui-resource-management-design.md +267 -0
- simpleaudit_studio-0.5.4/docs/superpowers/specs/2026-10-03-run-modes-design.md +241 -0
- simpleaudit_studio-0.5.4/infra/chat_feature.py +18 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/context_processors.py +36 -12
- simpleaudit_studio-0.5.4/infra/demo_audit.py +457 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/engine.py +269 -30
- simpleaudit_studio-0.5.4/infra/fixtures/sample_docs/refunds_and_returns_policy.md +93 -0
- simpleaudit_studio-0.5.4/infra/fixtures/sample_docs/shipping_and_delivery_guide.md +100 -0
- simpleaudit_studio-0.5.4/infra/fixtures/sample_tools/order_lookup.py +75 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/health.py +1 -1
- simpleaudit_studio-0.5.4/infra/management/commands/dev.py +68 -0
- simpleaudit_studio-0.5.4/infra/management/commands/dev_server.py +422 -0
- simpleaudit_studio-0.5.4/infra/management/commands/mode.py +69 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/seed_platform.py +20 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/setup_local.py +1 -1
- simpleaudit_studio-0.5.4/infra/management/commands/wire_demo_audit.py +31 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/middleware.py +47 -3
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/minimal_config.py +44 -3
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/runs_table.py +16 -2
- simpleaudit_studio-0.5.4/infra/seed.py +535 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/seo.py +2 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/templatetags/json_filters.py +8 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/factories.py +41 -1
- simpleaudit_studio-0.5.4/infra/tests/test_admin_page.py +202 -0
- simpleaudit_studio-0.5.4/infra/tests/test_agent_resources.py +226 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_api_e2e.py +2 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_results_live.py +20 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_run_freeze.py +77 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_comparison.py +28 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_connection_sharing.py +52 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_embedded_cleanup.py +41 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_engine_integration.py +75 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_experiments.py +17 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_judges.py +2 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_minimal_config.py +89 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_monitors.py +38 -2
- simpleaudit_studio-0.5.4/infra/tests/test_seed_demo_agent.py +342 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_smoke_all_pages.py +19 -0
- simpleaudit_studio-0.5.4/infra/tests/test_trace_card_view.py +97 -0
- simpleaudit_studio-0.5.4/infra/tests/test_tracing.py +533 -0
- simpleaudit_studio-0.5.4/infra/tests/test_user_project_assignment.py +112 -0
- simpleaudit_studio-0.5.4/infra/tests/test_visualizer.py +216 -0
- simpleaudit_studio-0.5.4/infra/tracing.py +307 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/ui.py +1158 -26
- simpleaudit_studio-0.5.4/infra/visualizer.py +486 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/worker.py +19 -0
- simpleaudit_studio-0.5.4/integrations/openwebui/client.py +403 -0
- simpleaudit_studio-0.5.4/judges/migrations/__init__.py +0 -0
- simpleaudit_studio-0.5.4/manage.py +63 -0
- simpleaudit_studio-0.5.4/model_registry/__init__.py +0 -0
- simpleaudit_studio-0.5.4/model_registry/agent_serializers.py +123 -0
- simpleaudit_studio-0.5.4/model_registry/agent_views.py +222 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0004_otlpcredential.py +39 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0005_alter_otlpcredential_auth_mode_and_more.py +35 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0006_otlpcredential_token_prefix.py +19 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0007_otlpspan.py +50 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0008_agent_domain.py +371 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0009_add_kb_external_id_unique.py +21 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0010_remove_mcp.py +35 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0011_knowledgebase_created_by_registeredmodel_created_by_and_more.py +64 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0012_agent_external_id.py +20 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0013_remove_agent_retrieval_profile_and_more.py +58 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0014_alter_tool_type.py +25 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/0015_knowledgereindex.py +67 -0
- simpleaudit_studio-0.5.4/model_registry/migrations/__init__.py +0 -0
- simpleaudit_studio-0.5.4/model_registry/models.py +481 -0
- simpleaudit_studio-0.5.4/model_registry/otlp_config.py +30 -0
- simpleaudit_studio-0.5.4/model_registry/otlp_services.py +200 -0
- simpleaudit_studio-0.5.4/model_registry/otlp_views.py +373 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/services.py +201 -0
- simpleaudit_studio-0.5.4/model_registry/tests/__init__.py +0 -0
- simpleaudit_studio-0.5.4/model_registry/tests/test_agent_domain.py +676 -0
- simpleaudit_studio-0.5.4/model_registry/tests/test_agent_owui_sync.py +400 -0
- simpleaudit_studio-0.5.4/model_registry/tests/test_otlp_receiver.py +476 -0
- simpleaudit_studio-0.5.4/model_registry/urls.py +15 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/views.py +4 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/pyproject.toml +24 -4
- simpleaudit_studio-0.5.4/pytest.ini +20 -0
- simpleaudit_studio-0.5.4/scenarios/__init__.py +0 -0
- simpleaudit_studio-0.5.4/scenarios/migrations/__init__.py +0 -0
- simpleaudit_studio-0.5.4/simpleaudit_studio/cli.py +567 -0
- simpleaudit_studio-0.5.4/simpleaudit_studio/ports.py +280 -0
- simpleaudit_studio-0.5.4/simpleaudit_studio/process_guard.py +67 -0
- simpleaudit_studio-0.5.4/simpleaudit_studio/tests/__init__.py +0 -0
- simpleaudit_studio-0.5.4/simpleaudit_studio/tests/test_ports.py +243 -0
- simpleaudit_studio-0.5.4/static/scenario_viewer.html +1187 -0
- simpleaudit_studio-0.5.4/static/visualizer.html +2264 -0
- simpleaudit_studio-0.5.4/templates/admin/_rag_checkbox.html +4 -0
- simpleaudit_studio-0.5.4/templates/admin/_rag_number.html +3 -0
- simpleaudit_studio-0.5.4/templates/admin/_rag_text.html +3 -0
- simpleaudit_studio-0.5.4/templates/admin/_tabs.html +5 -0
- simpleaudit_studio-0.5.4/templates/admin/rag_settings.html +144 -0
- simpleaudit_studio-0.5.4/templates/admin/sub_agents.html +39 -0
- simpleaudit_studio-0.5.4/templates/admin/web_search.html +34 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/admin.html +1 -5
- simpleaudit_studio-0.5.4/templates/agents/agent_detail.html +309 -0
- simpleaudit_studio-0.5.4/templates/agents/agents.html +59 -0
- simpleaudit_studio-0.5.4/templates/agents/resources.html +36 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/base.html +102 -15
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/compare.html +12 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/connections.html +98 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/experiment_new.html +9 -4
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/footer.html +2 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/model_pickers.html +39 -2
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/need_help.html +1 -1
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/result_rep_panel.html +55 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/sidebar.html +6 -4
- simpleaudit_studio-0.5.4/templates/partials/visualizer_sidebar.html +52 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/public/landing.html +3 -3
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/run_detail.html +23 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/run_result.html +81 -3
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/uv.lock +283 -6
- simpleaudit_studio-0.5.2/.env.local.example +0 -69
- simpleaudit_studio-0.5.2/PKG-INFO +0 -171
- simpleaudit_studio-0.5.2/README.md +0 -141
- simpleaudit_studio-0.5.2/docs/deployment.md +0 -127
- simpleaudit_studio-0.5.2/infra/management/commands/dev_server.py +0 -166
- simpleaudit_studio-0.5.2/infra/seed.py +0 -186
- simpleaudit_studio-0.5.2/infra/tests/test_admin_page.py +0 -88
- simpleaudit_studio-0.5.2/manage.py +0 -38
- simpleaudit_studio-0.5.2/model_registry/models.py +0 -100
- simpleaudit_studio-0.5.2/model_registry/urls.py +0 -7
- simpleaudit_studio-0.5.2/simpleaudit_studio/cli.py +0 -284
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.dockerignore +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.github/workflows/docker.yml +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/.github/workflows/publish.yml +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/LICENSE +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/admin_urls.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/auth_urls.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/migrations/0002_user_preferences.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/project_urls.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/accounts/workos_auth.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/apps.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/events.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/migrations/0002_strip_api_keys_from_snapshots.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/migrations/0003_judges.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/migrations/0004_judge_model_per_run.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/migrations/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/audits/urls.py +0 -0
- {simpleaudit_studio-0.5.2/infra → simpleaudit_studio-0.5.4/chat/management}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2/infra/management → simpleaudit_studio-0.5.4/chat/management/commands}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/config/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/config/asgi.py +0 -0
- {simpleaudit_studio-0.5.2/infra/management/commands → simpleaudit_studio-0.5.4/config/tests}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/config/wsgi.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/deploy/mock_openai_server.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/deploy/postgres-init.sql +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/docs/domain-model.md +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/e2e/test_ui.py +0 -0
- {simpleaudit_studio-0.5.2/infra/templatetags → simpleaudit_studio-0.5.4/infra}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/apps.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/codegen.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/db.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/exceptions.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/fixtures/demo_audit_results.json +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/hashing.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/health_api.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/logging.py +0 -0
- {simpleaudit_studio-0.5.2/judges → simpleaudit_studio-0.5.4/infra/management}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2/judges/migrations → simpleaudit_studio-0.5.4/infra/management/commands}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/bootstrap_platform.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/purge_test_data.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/run_monitors.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/run_worker.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/management/commands/seed_demo_audits.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/readiness.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/simpleaudit_package.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/startup_checks.py +0 -0
- {simpleaudit_studio-0.5.2/model_registry → simpleaudit_studio-0.5.4/infra/templatetags}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_admin_api.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_archive.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_clone.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_events.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_poll_results.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_rename.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_sse.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_submission.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_audit_timing.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_auth_projects.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_bootstrap.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_codegen.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_connection_delete.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_data_dir.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_db_resilience.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_health.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_health_panel.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_middleware.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_model_registry.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_profile.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_profile_ui.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_purge_test_data.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_runs_table.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_scenario_import_export.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_scenarios.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_seed_demo.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_seed_platform.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_snapshot_secrets.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_workspace_archive.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_workspaces.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_workspaces_ui.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/test_write_guard.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/infra/tests/utils.py +0 -0
- {simpleaudit_studio-0.5.2/model_registry/migrations → simpleaudit_studio-0.5.4/integrations}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2/scenarios → simpleaudit_studio-0.5.4/integrations/openwebui}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2/scenarios/migrations → simpleaudit_studio-0.5.4/judges}/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/apps.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/migrations/0001_judges.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/migrations/0002_judge_model_per_run.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/migrations/0003_composable_judges.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/models.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/services.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/judges/views.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/apps.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/migrations/0002_descriptions.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/migrations/0003_modelconnection_shared_with_and_more.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/model_registry/serializers.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/admin.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/apps.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/migrations/0001_initial.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/migrations/0002_add_severity_ceiling_documents_file_uri.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/models.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/serializers.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/services.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/urls.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/scenarios/views.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/simpleaudit_studio/__init__.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/simpleaudit_studio/paths.py +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/favicon-16x16.svg +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/favicon-32x32.svg +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/favicon.svg +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/js/diff.min.js +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/js/version-diff.js +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/logo.png +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/logo.svg +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/static/og-image.png +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/404.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/auth/login.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/auth/register.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/auth/workos_login.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/auth/workos_verify.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/dashboard.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/experiment_detail.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/experiment_review.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/experiments.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/health.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/judge_detail.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/judges.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/monitor_detail.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/monitors.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/auth_header.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/chip_input.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/compare_run_header.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/judge_picker.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/local_time_js.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/multi_filter.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/not_found.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/pinned_version.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/rename_title.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/run_results.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/run_settings.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/run_settings_js.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/severity_badge.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/text_file_modal.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/tooltips.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/ui_js.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/version_badge.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/version_diff_js.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/partials/version_diff_modal.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/profile.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/public/base_public.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/scenarios.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/seo/head.html +0 -0
- {simpleaudit_studio-0.5.2 → simpleaudit_studio-0.5.4}/templates/workspaces.html +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# SimpleAudit Studio — local development
|
|
3
|
+
#
|
|
4
|
+
# Copy to `.env` (manage.py loads it automatically), then:
|
|
5
|
+
#
|
|
6
|
+
# uv sync --extra dev
|
|
7
|
+
# uv run manage.py setup_local # first time: + seed data
|
|
8
|
+
# uv run manage.py dev # daily
|
|
9
|
+
#
|
|
10
|
+
# SQLite holds the app data and `dev` starts its own embedded Hatchet queue,
|
|
11
|
+
# so no Docker is needed. For production use Docker Compose with `.env.example`.
|
|
12
|
+
#
|
|
13
|
+
# Only what the dev flow actually reads is uncommented below. Settings the dev
|
|
14
|
+
# server does not use are kept as documented examples at the bottom.
|
|
15
|
+
# =============================================================================
|
|
16
|
+
|
|
17
|
+
# --- Django -----------------------------------------------------------------
|
|
18
|
+
DJANGO_SECRET_KEY=local-dev-key-not-for-prod
|
|
19
|
+
DJANGO_DEBUG=true
|
|
20
|
+
DJANGO_ALLOWED_HOSTS=*
|
|
21
|
+
LOG_LEVEL=DEBUG
|
|
22
|
+
|
|
23
|
+
# --- Bootstrap (read by setup_local / bootstrap_platform) ----------------------
|
|
24
|
+
BOOTSTRAP_USERNAME=studio
|
|
25
|
+
BOOTSTRAP_EMAIL=admin@example.local
|
|
26
|
+
BOOTSTRAP_PASSWORD=localdevpass123
|
|
27
|
+
BOOTSTRAP_PROJECT_NAME=Default
|
|
28
|
+
|
|
29
|
+
# --- Database -----------------------------------------------------------------
|
|
30
|
+
# `manage.py dev` is SQLite-first by design (zero setup) and force-enables
|
|
31
|
+
# SQLite; Postgres is the Compose/deployment engine (see `.env.example` +
|
|
32
|
+
# docker-compose.yml).
|
|
33
|
+
SIMPLEAUDIT_LOCAL_SQLITE=1
|
|
34
|
+
# Where the SQLite file lives. Relative paths resolve from the repo root;
|
|
35
|
+
# absolute paths are used as-is. Unset/commented = `<repo>/dev.sqlite3`.
|
|
36
|
+
SIMPLEAUDIT_SQLITE_PATH=dev.sqlite3
|
|
37
|
+
|
|
38
|
+
# JSON result files shown by /visualizer/. The folder is created on demand;
|
|
39
|
+
# set an absolute path when results live elsewhere.
|
|
40
|
+
VISUALIZER_RESULTS_DIR=./results
|
|
41
|
+
|
|
42
|
+
# --- Chat (Open WebUI) ----------------------------------------------------------
|
|
43
|
+
# On by default in dev; no line needed. To force it off:
|
|
44
|
+
# SIMPLEAUDIT_CHAT=off (env)
|
|
45
|
+
# manage.py dev --disable-chat (flag; wins over the env value)
|
|
46
|
+
|
|
47
|
+
# =============================================================================
|
|
48
|
+
# OPTIONAL — commented out because `manage.py dev` does not read these.
|
|
49
|
+
# Un-comment only for the stated use case.
|
|
50
|
+
# =============================================================================
|
|
51
|
+
|
|
52
|
+
# Label for the in-process audit worker pool (default: cpu).
|
|
53
|
+
# WORKER_POOL=cpu
|
|
54
|
+
|
|
55
|
+
# Domain DB on a running local Postgres instead of SQLite. Requires
|
|
56
|
+
# SIMPLEAUDIT_LOCAL_SQLITE=0 above (dev is SQLite-first and force-enables it)
|
|
57
|
+
# plus a Postgres server on these coordinates. Niche — most people stay on
|
|
58
|
+
# SQLite. The embedded Hatchet always uses its own bundled Postgres, not
|
|
59
|
+
# these. (Also set SIMPLEAUDIT_MODE=dev so `manage.py mode` can resolve —
|
|
60
|
+
# without the SQLite flag, mode inference has no unambiguous signal left.)
|
|
61
|
+
# POSTGRES_DB=simpleaudit
|
|
62
|
+
# POSTGRES_USER=simpleaudit
|
|
63
|
+
# POSTGRES_PASSWORD=localdevpass123
|
|
64
|
+
# POSTGRES_HOST=localhost
|
|
65
|
+
# POSTGRES_PORT=5432
|
|
66
|
+
|
|
67
|
+
# External Hatchet server — Compose mode only (dev starts an embedded engine).
|
|
68
|
+
# HATCHET_SERVER_URL=http://localhost:8888
|
|
69
|
+
# HATCHET_GRPC_URL=localhost:7077
|
|
70
|
+
# HATCHET_API_KEY=
|
|
71
|
+
# HATCHET_TOKEN_FILE=./hatchet-token
|
|
72
|
+
# HATCHET_TLS_STRATEGY=none
|
|
73
|
+
|
|
74
|
+
# Sentry error reporting — add a DSN to enable; commented out = disabled.
|
|
75
|
+
# SENTRY_DSN=
|
|
76
|
+
# SENTRY_ENVIRONMENT=development
|
|
77
|
+
|
|
78
|
+
# --- SimpleAudit engine ---------------------------------------------------------
|
|
79
|
+
# No configuration needed: the engine is a pip dependency pinned in
|
|
80
|
+
# pyproject.toml. To develop against an unmerged engine revision, create a
|
|
81
|
+
# gitignored simpleaudit-dependency.yaml at the project root containing ONLY:
|
|
82
|
+
# git_ref: <full-40-char-sha>
|
|
83
|
+
# That value is recorded as the run's git_commit provenance. Do NOT edit
|
|
84
|
+
# pyproject.toml for a dev override.
|
|
85
|
+
|
|
86
|
+
# --- Model API keys (optional) ---------------------------------------------------
|
|
87
|
+
# Keys can be stored on a connection in the Models page. For connections set
|
|
88
|
+
# to "Environment variable", add that variable here (read when a run starts),
|
|
89
|
+
# e.g.:
|
|
90
|
+
# SIMULACHAT_API_KEY=sk-...
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# values already present in the real environment always win.
|
|
6
6
|
#
|
|
7
7
|
# This file documents the DOCKER COMPOSE deployment (the canonical one).
|
|
8
|
-
# For a local (non-Docker) development setup, copy `.env.
|
|
8
|
+
# For a local (non-Docker) development setup, copy `.env.dev.example` instead.
|
|
9
9
|
#
|
|
10
10
|
# NOTE: docker-compose.yml overrides a few values per service (POSTGRES_HOST,
|
|
11
11
|
# HATCHET_*) so the container-internal hostnames are used
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
# =============================================================================
|
|
14
14
|
|
|
15
15
|
# --- Django -----------------------------------------------------------------
|
|
16
|
+
# REQUIRED: startup refuses to boot while this is empty or still `change-me`.
|
|
17
|
+
# Generate one with: openssl rand -hex 32
|
|
16
18
|
DJANGO_SECRET_KEY=change-me
|
|
17
19
|
DJANGO_DEBUG=false
|
|
18
20
|
DJANGO_ALLOWED_HOSTS=*
|
|
@@ -50,7 +52,7 @@ POSTGRES_PORT=5432
|
|
|
50
52
|
# Docker Compose: the compose service name `hatchet-server` resolves inside the
|
|
51
53
|
# compose network. HTTP API on :8888, gRPC on :7077 (see docker-compose.yml).
|
|
52
54
|
# Local dev (Hatchet running on the host): use http://localhost:8888 and
|
|
53
|
-
# localhost:7077 — see `.env.
|
|
55
|
+
# localhost:7077 — see `.env.dev.example`.
|
|
54
56
|
HATCHET_SERVER_URL=http://hatchet-server:8888
|
|
55
57
|
HATCHET_GRPC_URL=hatchet-server:7077
|
|
56
58
|
# Explicit worker API token. Leave empty with the default auth-disabled
|
|
@@ -88,6 +90,37 @@ WORKER_POOL=cpu
|
|
|
88
90
|
# skips if demo runs already exist. Set to false to opt out.
|
|
89
91
|
SEED_DEMO_AUDITS=true
|
|
90
92
|
|
|
93
|
+
# --- Chat (Open WebUI) ---------------------------------------------------------
|
|
94
|
+
# Single-origin model: Open WebUI (the subpath fork) serves its whole app at
|
|
95
|
+
# /chat/ on Studio's own origin, and Studio's wrapper page (model-picker bar +
|
|
96
|
+
# iframe) lives at /ai/. Caddy is the only published port and does the
|
|
97
|
+
# forward-auth (/chat/authz). Signed in as the Studio user (workspace admins
|
|
98
|
+
# become Open WebUI admins). ON by default: the first line makes the web
|
|
99
|
+
# container serve /ai/ + /chat/authz, the second makes `docker compose up -d`
|
|
100
|
+
# start the open-webui container. To run Compose WITHOUT chat, comment both
|
|
101
|
+
# out (or set SIMPLEAUDIT_CHAT=off). See docs/chat.md.
|
|
102
|
+
SIMPLEAUDIT_CHAT=docker
|
|
103
|
+
COMPOSE_PROFILES=chat
|
|
104
|
+
# Base path the browser loads the chat from. Same origin as Studio, so a plain
|
|
105
|
+
# base path is the default (leave unset). Set a FULL URL only if a deployment
|
|
106
|
+
# keeps Open WebUI on its own origin (legacy cross-origin shape).
|
|
107
|
+
#SIMPLEAUDIT_CHAT_URL=http://localhost:8000/chat
|
|
108
|
+
# The public Studio origin (login redirect target, OTLP endpoint, ...).
|
|
109
|
+
# Use your own hostname behind TLS; on a separate subdomain also set
|
|
110
|
+
# SESSION_COOKIE_DOMAIN.
|
|
111
|
+
SIMPLEAUDIT_STUDIO_URL=http://localhost:8000
|
|
112
|
+
# Optional: export Open WebUI's spans to Studio's OTLP listener. Off by default.
|
|
113
|
+
# Exports unauthenticated (matches an enabled "none" credential). For a
|
|
114
|
+
# basic/bearer credential, set OTEL_BASIC_AUTH_* to match it. See docs/chat.md.
|
|
115
|
+
#SIMPLEAUDIT_CHAT_OTLP=true
|
|
116
|
+
#SIMPLEAUDIT_CHAT_OTLP_ENDPOINT=http://web:8000
|
|
117
|
+
#OTEL_BASIC_AUTH_USERNAME=
|
|
118
|
+
#OTEL_BASIC_AUTH_PASSWORD=
|
|
119
|
+
# Optional: switch Studio's OTLP listener (POST /otlp/v1/traces + credential
|
|
120
|
+
# management) on or off. ON by default (preserves existing behavior). Set to
|
|
121
|
+
# "off" to 404 the /otlp/* and /api/otlp/* routes and hide the OTLP button.
|
|
122
|
+
#SIMPLEAUDIT_OTLP=off
|
|
123
|
+
|
|
91
124
|
# --- Optional observability -----------------------------------------------------
|
|
92
125
|
|
|
93
126
|
# --- Sentry error tracking & tracing (leave empty to disable) -------------------
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Orchestrator
|
|
3
|
+
description: Parallel-first coding orchestrator
|
|
4
|
+
tools: ['agent', 'edit', 'read', 'search', 'execute']
|
|
5
|
+
agents: ['Researcher', 'Verifier', 'Test Reviewer', 'Regression Reviewer']
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the main engineering orchestrator.
|
|
9
|
+
|
|
10
|
+
Default behavior:
|
|
11
|
+
- Decompose non-trivial tasks into independent workstreams.
|
|
12
|
+
- Run independent research/review tasks in parallel whenever possible.
|
|
13
|
+
- Prefer parallel subagents over doing sequential investigation yourself.
|
|
14
|
+
- Keep the main context focused on decisions and integration.
|
|
15
|
+
- Do not delegate trivial tasks where coordination overhead exceeds the work.
|
|
16
|
+
|
|
17
|
+
For implementation:
|
|
18
|
+
1. First identify independent components.
|
|
19
|
+
2. Launch parallel subagents for codebase research, dependency analysis,
|
|
20
|
+
test discovery, and alternative implementation approaches.
|
|
21
|
+
3. Integrate the best findings yourself.
|
|
22
|
+
4. After editing, launch independent reviewers in parallel:
|
|
23
|
+
- correctness
|
|
24
|
+
- test coverage
|
|
25
|
+
- regression risk
|
|
26
|
+
- hallucinated APIs / assumptions
|
|
27
|
+
5. Run tests and inspect actual outputs.
|
|
28
|
+
6. Fix issues found by reviewers.
|
|
29
|
+
7. Repeat verification until there are no actionable failures.
|
|
30
|
+
|
|
31
|
+
Never trust another agent's factual claim about the repository unless it
|
|
32
|
+
provides file references or you verify it yourself.
|
|
33
|
+
|
|
34
|
+
Prefer evidence from:
|
|
35
|
+
- repository contents
|
|
36
|
+
- compiler/type checker
|
|
37
|
+
- test output
|
|
38
|
+
- runtime output
|
|
39
|
+
- official documentation
|
|
40
|
+
|
|
41
|
+
If uncertain, investigate rather than guessing.
|
|
42
|
+
|
|
43
|
+
Keep working autonomously until:
|
|
44
|
+
- the requested result is implemented,
|
|
45
|
+
- tests/checks have been run,
|
|
46
|
+
- significant reviewer findings have been addressed,
|
|
47
|
+
- or a genuine blocker requires user input.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Regression Reviewer
|
|
3
|
+
description: Assess regression risk of proposed changes
|
|
4
|
+
user-invocable: false
|
|
5
|
+
tools: ['read', 'search', 'execute']
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Assess the regression risk of the proposed changes.
|
|
9
|
+
|
|
10
|
+
Check:
|
|
11
|
+
- existing behavior that depends on the changed code
|
|
12
|
+
- callers and consumers that may break
|
|
13
|
+
- shared state, configuration, or schema changes
|
|
14
|
+
- edge cases the change may have disturbed
|
|
15
|
+
|
|
16
|
+
Use repository evidence and executable checks whenever possible.
|
|
17
|
+
|
|
18
|
+
Return only:
|
|
19
|
+
1. confirmed regression risks
|
|
20
|
+
2. evidence
|
|
21
|
+
3. concrete mitigations
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Researcher
|
|
3
|
+
description: Fast codebase reconnaissance
|
|
4
|
+
user-invocable: false
|
|
5
|
+
tools: ['read', 'search']
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Investigate the assigned question deeply but do not edit files.
|
|
9
|
+
|
|
10
|
+
Search broadly, identify relevant files and existing patterns,
|
|
11
|
+
and return concise findings with exact file references.
|
|
12
|
+
|
|
13
|
+
Do not speculate when repository evidence is available.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Test Reviewer
|
|
3
|
+
description: Review test coverage for changed behavior
|
|
4
|
+
user-invocable: false
|
|
5
|
+
tools: ['read', 'search', 'execute']
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Review the tests for the changed behavior.
|
|
9
|
+
|
|
10
|
+
Check:
|
|
11
|
+
- tests exist for the new or changed behavior
|
|
12
|
+
- tests assert the right outcomes, not just that code runs
|
|
13
|
+
- edge cases and failure paths are covered
|
|
14
|
+
- the test suite actually passes when run
|
|
15
|
+
|
|
16
|
+
Run the relevant tests and report actual output.
|
|
17
|
+
|
|
18
|
+
Return only:
|
|
19
|
+
1. confirmed gaps or failures
|
|
20
|
+
2. evidence
|
|
21
|
+
3. concrete fixes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Verifier
|
|
3
|
+
description: Verify implementation claims and detect hallucinations
|
|
4
|
+
user-invocable: false
|
|
5
|
+
tools: ['read', 'search', 'execute']
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Independently verify the proposed solution.
|
|
9
|
+
|
|
10
|
+
Do not assume another agent's claims are correct.
|
|
11
|
+
|
|
12
|
+
Check:
|
|
13
|
+
- referenced files and symbols actually exist
|
|
14
|
+
- APIs and function signatures are real
|
|
15
|
+
- dependencies actually expose the claimed features
|
|
16
|
+
- tests exercise the changed behavior
|
|
17
|
+
- implementation matches the original request
|
|
18
|
+
- no placeholder or speculative code remains
|
|
19
|
+
|
|
20
|
+
Use repository evidence and executable checks whenever possible.
|
|
21
|
+
|
|
22
|
+
Return only:
|
|
23
|
+
1. confirmed problems
|
|
24
|
+
2. evidence
|
|
25
|
+
3. concrete fixes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: parallel-orchestrate
|
|
3
|
+
description: Parallel-first orchestration convention for substantial tasks
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use parallel subagents aggressively for independent work. Optimize for
|
|
7
|
+
wall-clock time, not token count. Treat model calls as cheap. Keep yourself
|
|
8
|
+
as the coordinator and integrator. Verify claims with repository evidence
|
|
9
|
+
and executable checks before concluding.
|
|
10
|
+
|
|
11
|
+
For every substantial task:
|
|
12
|
+
1. Launch 2-3 Researcher subagents in parallel for independent angles
|
|
13
|
+
(simplest implementation, architecture-compatible implementation,
|
|
14
|
+
hidden risks).
|
|
15
|
+
2. Integrate the best findings and implement.
|
|
16
|
+
3. Launch Verifier, Test Reviewer, and Regression Reviewer in parallel.
|
|
17
|
+
4. Fix confirmed findings and re-verify until there are no actionable
|
|
18
|
+
failures.
|
|
19
|
+
|
|
20
|
+
Keep the delegation tree wide, not deep: orchestrator -> workers/reviewers.
|
|
21
|
+
Do not nest subagents more than one level.
|
|
@@ -32,13 +32,20 @@ jobs:
|
|
|
32
32
|
run: uv sync --frozen --extra dev
|
|
33
33
|
- name: Lint (ruff)
|
|
34
34
|
run: uv run ruff check .
|
|
35
|
-
- name:
|
|
36
|
-
|
|
35
|
+
- name: Cache testmon dependency data
|
|
36
|
+
uses: actions/cache@v4
|
|
37
|
+
with:
|
|
38
|
+
path: .testmondata
|
|
39
|
+
key: testmon-${{ github.sha }}
|
|
40
|
+
restore-keys: |
|
|
41
|
+
testmon-
|
|
42
|
+
- name: Run tests (parallel, affected-only via testmon)
|
|
43
|
+
run: uv run pytest --testmon -n auto -m "not embedded_hatchet"
|
|
37
44
|
- name: Check if embedded Hatchet files changed
|
|
38
45
|
id: hatchet-changed
|
|
39
46
|
run: |
|
|
40
47
|
CHANGED=$(git diff --name-only origin/main...HEAD -- infra/minimal_config.py infra/worker.py 2>/dev/null || true)
|
|
41
|
-
if [ -n "$CHANGED"
|
|
48
|
+
if [ -n "$CHANGED"]; then echo "changed=true" >> "$GITHUB_OUTPUT"; else echo "changed=false" >> "$GITHUB_OUTPUT"; fi
|
|
42
49
|
- name: Run tests (embedded Hatchet, serial)
|
|
43
50
|
if: steps.hatchet-changed.outputs.changed == 'true'
|
|
44
|
-
run: uv run
|
|
51
|
+
run: uv run pytest -m "embedded_hatchet"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
SimpleAudit Studio — an audit platform for LLM systems. It wraps the external
|
|
4
|
+
SimpleAudit engine (Target → Auditor → Judge runs over versioned scenario sets)
|
|
5
|
+
with a Django web UI, a durable worker, and an optional Open WebUI chat module.
|
|
6
|
+
|
|
7
|
+
## Stack
|
|
8
|
+
|
|
9
|
+
- Python ≥3.11 (CI runs 3.12), Django 5.2, DRF + drf-spectacular
|
|
10
|
+
- PostgreSQL (canonical), SQLite (local dev + embedded mode)
|
|
11
|
+
- Hatchet durable job queue (embedded engine for single-process modes)
|
|
12
|
+
- uv for dependency management (see `uv.lock`)
|
|
13
|
+
- ruff (line length 88), pytest + pytest-django
|
|
14
|
+
|
|
15
|
+
## Run modes (read `config/runtime.py` before touching mode logic)
|
|
16
|
+
|
|
17
|
+
| mode | command | db | queue |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| dev | `manage.py dev` | SQLite (repo root, `dev.sqlite3`) | embedded |
|
|
20
|
+
| embedded | `spin` / `uvx simpleaudit-studio` | SQLite (`~/.simpleaudit-studio/`) | embedded |
|
|
21
|
+
| compose | `docker compose up -d` | Postgres | external Hatchet |
|
|
22
|
+
| single-docker | `docker run <image>` (HF Space) | SQLite (`/data`) | embedded |
|
|
23
|
+
|
|
24
|
+
Mode selection is env-flag driven and happens in `manage.py` / `simpleaudit_studio/cli.py`
|
|
25
|
+
**before** `django.setup()`. `config/runtime.py::resolve_mode()` is the single lens over
|
|
26
|
+
those flags; `config/settings.py` selects the DB engine from the same flags. Entry points
|
|
27
|
+
force flags (e.g. dev forces `SIMPLEAUDIT_LOCAL_SQLITE=1`) — don't fight that in `.env`.
|
|
28
|
+
|
|
29
|
+
## Development
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cp .env.dev.example .env
|
|
33
|
+
uv sync --extra dev
|
|
34
|
+
uv run manage.py setup_local # migrate + bootstrap admin + seed (idempotent)
|
|
35
|
+
uv run manage.py dev # web + worker + embedded queue + chat
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Login `studio` / `localdevpass123` (from `.env`). Migrations: `uv run manage.py makemigrations`.
|
|
39
|
+
|
|
40
|
+
## Tests
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
uv run pytest -m "not embedded_hatchet" # full suite (parallel in CI via -n auto --testmon)
|
|
44
|
+
uv run pytest path/to/test_file.py -k "name" # affected tests first
|
|
45
|
+
uv run pytest -m "embedded_hatchet" # only if infra/worker.py or infra/minimal_config.py changed; serial only
|
|
46
|
+
uv run ruff check .
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The suite runs on SQLite (`pytest.ini` sets the env). `@tag("slow")` and `@tag("embedded_hatchet")`
|
|
50
|
+
are mirrored to pytest markers by `conftest.py`. `e2e/test_ui.py` is a standalone Playwright
|
|
51
|
+
script, not collected by pytest.
|
|
52
|
+
|
|
53
|
+
## Repository layout
|
|
54
|
+
|
|
55
|
+
- `accounts/` — users, projects, auth (Django is the only authority on identity)
|
|
56
|
+
- `scenarios/`, `model_registry/`, `judges/`, `audits/` — domain apps; each keeps business
|
|
57
|
+
logic in its `services.py`; models live in `<app>/models.py`, migrations in `<app>/migrations/`
|
|
58
|
+
- `infra/` — platform plumbing: `worker.py` (Hatchet tasks), `engine.py` (engine bridge),
|
|
59
|
+
`tracing.py` (OTLP/Tempo/studio trace acquisition), `ui.py` (web views), `startup_checks.py`,
|
|
60
|
+
`seed.py`; `infra/management/commands/` holds the run modes
|
|
61
|
+
- `chat/` — optional Open WebUI module; inert unless `SIMPLEAUDIT_CHAT` is set (`chat/config.py`)
|
|
62
|
+
- `simpleaudit_studio/` — the `spin` CLI entry point (`uvx` mode)
|
|
63
|
+
- `docs/` — `architecture.md`, `domain-model.md`, `deployment.md`, `chat.md`; link to these,
|
|
64
|
+
don't duplicate them
|
|
65
|
+
|
|
66
|
+
## Hard boundaries (things that break subtly if violated)
|
|
67
|
+
|
|
68
|
+
- `infra/engine.py` is the **only** file that imports the `simpleaudit` engine, and it imports
|
|
69
|
+
lazily inside functions. Never import the engine at module level elsewhere.
|
|
70
|
+
- The **web/API process never executes model calls** — only the worker (`infra/worker.py`).
|
|
71
|
+
Audit progress is durable `AuditEvent` rows; SSE replays from them. Cancellation is a
|
|
72
|
+
durable flag, not process memory.
|
|
73
|
+
- Scenarios execute from the **frozen endpoint snapshots** on the AuditRun, never from live
|
|
74
|
+
registry rows. Do not "fix" a run by reading current model/agent configuration.
|
|
75
|
+
- Model secrets are stored as `secret_reference` identifiers and resolved from the environment
|
|
76
|
+
at execution time. Raw credentials are never persisted.
|
|
77
|
+
- `infra/simpleaudit_package.py` resolves engine provenance from installed package metadata.
|
|
78
|
+
Never hardcode engine versions/commits; to develop against an unmerged engine revision use the
|
|
79
|
+
gitignored `simpleaudit-dependency.yaml` (`git_ref:`), not a `pyproject.toml` edit.
|
|
80
|
+
- Chat SSO is forward-auth: a proxy calls `GET /chat/authz` and injects `X-Studio-*` headers.
|
|
81
|
+
Do not make anything read Django sessions/user tables outside Django.
|
|
82
|
+
- `config/settings.py` DB engine selection and `manage.py`/CLI flag pre-setting are load-order
|
|
83
|
+
sensitive. Keep mode decisions before `django.setup()`.
|
|
84
|
+
|
|
85
|
+
## Coding conventions
|
|
86
|
+
|
|
87
|
+
- Thin views; business logic in the owning app's `services.py` (search for an existing helper
|
|
88
|
+
before writing a new one).
|
|
89
|
+
- Type hints on new public functions; keep functions focused.
|
|
90
|
+
- Multi-row related writes: wrap in a transaction. Avoid N+1 (`select_related`/`prefetch_related`).
|
|
91
|
+
- Migrations: create per app, inspect the generated file, never edit already-applied migrations.
|
|
92
|
+
Consider existing production (Postgres) data; avoid destructive changes.
|
|
93
|
+
- `RUF012` is intentionally ignored (Django Meta / factory-boy idioms) — don't "fix" those.
|
|
94
|
+
|
|
95
|
+
## Configuration files
|
|
96
|
+
|
|
97
|
+
- `.env.dev.example` → local dev only (`.env.example` → compose; the root `Dockerfile` bakes its
|
|
98
|
+
own `ENV` for HF/single-container). `manage.py` auto-loads `.env`; real environment wins.
|
|
99
|
+
- `SIMPLEAUDIT_SQLITE_PATH` (dev-mode only) overrides the SQLite file location.
|
|
100
|
+
- Updating a setting means updating the relevant `.env*.example` **and** `docs/deployment.md`'s
|
|
101
|
+
settings table.
|
|
102
|
+
|
|
103
|
+
## Definition of done
|
|
104
|
+
|
|
105
|
+
- Affected tests pass, then `uv run pytest -m "not embedded_hatchet"` and `uv run ruff check .`
|
|
106
|
+
- Migrations created/inspected if models changed
|
|
107
|
+
- Docs/env examples updated if configuration or externally visible behavior changed
|
|
108
|
+
- No unrelated reformatting or cleanup in the diff
|
|
109
|
+
- Summarize: what changed, design decisions, checks run, anything unresolved
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
# =============================================================================
|
|
2
|
-
# SimpleAudit Studio —
|
|
2
|
+
# SimpleAudit Studio — single-container image (local `docker run` + HF Space)
|
|
3
3
|
#
|
|
4
4
|
# Single-process image: Django web + embedded Hatchet + worker in one Python
|
|
5
5
|
# process. No Postgres, no supervisord, no external services. SQLite for the
|
|
6
6
|
# domain DB, embedded Postgres (sidecar binary) for Hatchet's queue.
|
|
7
7
|
#
|
|
8
|
-
#
|
|
8
|
+
# The container listens on 7860 (Hugging Face Spaces expect that port).
|
|
9
9
|
#
|
|
10
10
|
# Build: docker build -t simpleaudit-studio .
|
|
11
|
-
# Run: docker run -p
|
|
11
|
+
# Run: docker run -d -p 8000:7860 -v sa-data:/data --name simpleaudit-studio simpleaudit-studio
|
|
12
|
+
# (web → http://localhost:8000, login studio / admin123 — override with
|
|
13
|
+
# -e BOOTSTRAP_PASSWORD=<strong> for anything shared)
|
|
14
|
+
# All data (SQLite database, embedded queue, chat) lives in /data: mount a
|
|
15
|
+
# named volume there to keep it across restarts and image updates.
|
|
12
16
|
# =============================================================================
|
|
13
17
|
|
|
14
18
|
FROM python:3.12-slim AS base
|
|
@@ -25,23 +29,30 @@ WORKDIR /app
|
|
|
25
29
|
RUN apt-get update \
|
|
26
30
|
&& apt-get install -y --no-install-recommends \
|
|
27
31
|
curl \
|
|
32
|
+
git \
|
|
28
33
|
&& rm -rf /var/lib/apt/lists/*
|
|
29
34
|
|
|
30
35
|
# --- Python dependencies -----------------------------------------------------
|
|
31
36
|
# pyproject.toml is the single source of truth; uv.lock pins exact versions.
|
|
32
37
|
# uv sync creates /app/.venv; the PATH update keeps the `python` entrypoint.
|
|
38
|
+
# The core (simpleaudit) is a PyPI dependency; uv sync pulls it from the
|
|
39
|
+
# registry (no local checkout needed).
|
|
33
40
|
COPY pyproject.toml uv.lock README.md ./
|
|
34
41
|
RUN pip install uv \
|
|
35
42
|
&& uv sync --frozen --no-install-project --no-dev
|
|
36
43
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
37
44
|
|
|
38
|
-
# --- Environment defaults
|
|
39
|
-
# SIMPLEAUDIT_MINIMAL=1 enables the
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
45
|
+
# --- Environment defaults -----------------------------------------------------
|
|
46
|
+
# SIMPLEAUDIT_MINIMAL=1 enables the single-process path (SQLite + embedded
|
|
47
|
+
# Hatchet); SIMPLEAUDIT_DATA_DIR points everything (database, embedded queue,
|
|
48
|
+
# chat) at /data so a mounted volume persists it. PORT=7860 is what Hugging
|
|
49
|
+
# Face Spaces expect. Override via `docker run -e ...` or HF Space environment
|
|
50
|
+
# variables for anything sensitive.
|
|
51
|
+
# Must be set BEFORE collectstatic: Django settings select the DB engine from
|
|
52
|
+
# it, and the postgres driver is an optional extra not installed in this image.
|
|
43
53
|
ENV SIMPLEAUDIT_MINIMAL=1 \
|
|
44
54
|
PORT=7860 \
|
|
55
|
+
SIMPLEAUDIT_DATA_DIR=/data \
|
|
45
56
|
DJANGO_SECRET_KEY=hf-space-demo-secret-key-change-in-production \
|
|
46
57
|
DJANGO_DEBUG=false \
|
|
47
58
|
DJANGO_ALLOWED_HOSTS=* \
|
|
@@ -60,9 +71,11 @@ COPY . .
|
|
|
60
71
|
RUN python manage.py collectstatic --noinput
|
|
61
72
|
|
|
62
73
|
# --- Non-root user ------------------------------------------------------------
|
|
74
|
+
# /data is where a mounted named volume persists all app data; it must exist
|
|
75
|
+
# and be writable by appuser before the user switch.
|
|
63
76
|
RUN useradd --create-home appuser \
|
|
64
|
-
&& mkdir -p /app/staticfiles \
|
|
65
|
-
&& chown -R appuser:appuser /app
|
|
77
|
+
&& mkdir -p /app/staticfiles /data \
|
|
78
|
+
&& chown -R appuser:appuser /app /data
|
|
66
79
|
USER appuser
|
|
67
80
|
|
|
68
81
|
EXPOSE 7860
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: simpleaudit-studio
|
|
3
|
+
Version: 0.5.4
|
|
4
|
+
Summary: Production AI model audit platform — one-liner demo mode via uvx
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Requires-Dist: caddyserver>=2.11.7
|
|
9
|
+
Requires-Dist: cronsim==2.7
|
|
10
|
+
Requires-Dist: django==5.2.4
|
|
11
|
+
Requires-Dist: djangorestframework==3.16.0
|
|
12
|
+
Requires-Dist: drf-spectacular==0.28.0
|
|
13
|
+
Requires-Dist: hatchet-sdk==1.41.0
|
|
14
|
+
Requires-Dist: httpx>=0.27
|
|
15
|
+
Requires-Dist: opentelemetry-proto>=1.45.0
|
|
16
|
+
Requires-Dist: psutil>=7.2.2
|
|
17
|
+
Requires-Dist: pydantic<3,>=2.7
|
|
18
|
+
Requires-Dist: python-dotenv==1.1.1
|
|
19
|
+
Requires-Dist: requests==2.32.5
|
|
20
|
+
Requires-Dist: sentry-sdk[django]>=2.0
|
|
21
|
+
Requires-Dist: simpleaudit==0.3.1
|
|
22
|
+
Requires-Dist: workos==10.4.0
|
|
23
|
+
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: factory-boy==3.3.2; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest-django<5,>=4.8; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest-env<2,>=1; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest-testmon<3,>=2; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest-xdist<3.8,>=3.6; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest<9,>=8; extra == 'dev'
|
|
30
|
+
Requires-Dist: ruff; extra == 'dev'
|
|
31
|
+
Provides-Extra: e2e
|
|
32
|
+
Requires-Dist: playwright>=1.45; extra == 'e2e'
|
|
33
|
+
Provides-Extra: postgres
|
|
34
|
+
Requires-Dist: psycopg[binary]==3.2.13; extra == 'postgres'
|
|
35
|
+
Provides-Extra: server
|
|
36
|
+
Requires-Dist: gunicorn==23.0.0; extra == 'server'
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
title: SimpleAudit Studio
|
|
41
|
+
emoji: 🔍
|
|
42
|
+
colorFrom: blue
|
|
43
|
+
colorTo: indigo
|
|
44
|
+
sdk: docker
|
|
45
|
+
app_port: 7860
|
|
46
|
+
pinned: false
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
# SimpleAudit Studio
|
|
50
|
+
|
|
51
|
+
[](https://opensource.org/licenses/MIT)
|
|
52
|
+
[](https://www.python.org/)
|
|
53
|
+
[](https://pypi.org/project/simpleaudit-studio/)
|
|
54
|
+
|
|
55
|
+
A self-hostable platform for reproducible AI model audits using the [SimpleAudit](https://github.com/SimulaMet/simpleaudit) engine.
|
|
56
|
+
|
|
57
|
+
## Quick run
|
|
58
|
+
|
|
59
|
+
Needs [uv](https://docs.astral.sh/uv/):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
uvx simpleaudit-studio@latest
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
To run the latest code from GitHub instead of the published package:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uvx --from "git+https://github.com/SimulaMet/SimpleAuditStudio@main" spin
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Open <http://localhost:8000>. Try the [live demo](https://sushantgautam-simpleaudit-studio.hf.space) if you do not want to install anything.
|
|
72
|
+
|
|
73
|
+
## Development
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git clone https://github.com/SimulaMet/SimpleAuditStudio
|
|
77
|
+
cd SimpleAuditStudio
|
|
78
|
+
cp .env.dev.example .env
|
|
79
|
+
uv sync --extra dev
|
|
80
|
+
uv run manage.py setup_local
|
|
81
|
+
uv run manage.py dev
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The app opens at <http://localhost:8000> with live reload. Use `--no-browser` to skip opening a browser.
|
|
85
|
+
|
|
86
|
+
## What it does
|
|
87
|
+
|
|
88
|
+
- Build versioned scenario sets and register OpenAI-compatible models.
|
|
89
|
+
- Define judges and run audits across models, scenarios, and settings.
|
|
90
|
+
- Review runs live and compare results in the dashboard.
|
|
91
|
+
- Monitor models for drift on a schedule.
|
|
92
|
+
|
|
93
|
+
## Documentation
|
|
94
|
+
|
|
95
|
+
- [Deployment](docs/deployment.md) — all run commands, settings, chat, upgrades, backups, and production notes
|
|
96
|
+
- [Chat](docs/chat.md) — chat setup and privacy details
|
|
97
|
+
- [Architecture](docs/architecture.md) — system design and service boundaries
|
|
98
|
+
- [Domain model](docs/domain-model.md) — core data and invariants
|
|
99
|
+
|
|
100
|
+
## Contributing
|
|
101
|
+
|
|
102
|
+
Architecture decisions are documented in [docs/architecture.md](docs/architecture.md).
|