admina-framework 0.9.4__tar.gz → 0.10.0__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.
- {admina_framework-0.9.4 → admina_framework-0.10.0}/NOTICE +1 -1
- {admina_framework-0.9.4/admina_framework.egg-info → admina_framework-0.10.0}/PKG-INFO +72 -70
- {admina_framework-0.9.4 → admina_framework-0.10.0}/README.md +52 -65
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/__init__.py +1 -1
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/main.py +73 -9
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/admina.yaml.j2 +2 -2
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/docker-compose.yml.j2 +5 -30
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/env.j2 +0 -2
- admina_framework-0.10.0/admina/cli/templates/plugin.py.j2 +117 -0
- admina_framework-0.10.0/admina/cli/templates/plugin_pyproject.toml.j2 +21 -0
- admina_framework-0.10.0/admina/cli/templates/plugin_test.py.j2 +27 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/config.py +22 -17
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/secrets.py +0 -4
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/index.html +0 -4
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/rag.py +49 -6
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/__init__.py +3 -3
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/eu_ai_act.py +26 -2
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/forensic.py +88 -116
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/oisg.py +17 -5
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/pii.py +18 -0
- {admina_framework-0.9.4/admina/proxy → admina_framework-0.10.0/admina/domains}/governance.py +81 -11
- admina_framework-0.10.0/admina/engines/__init__.py +431 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/_engines.py +12 -9
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/base.py +20 -6
- admina_framework-0.10.0/admina/plugins/builtin/adapters/anthropic.py +142 -0
- admina_framework-0.10.0/admina/plugins/builtin/adapters/bedrock.py +157 -0
- admina_framework-0.10.0/admina/plugins/builtin/adapters/gemini.py +137 -0
- admina_framework-0.10.0/admina/plugins/builtin/adapters/mistral.py +143 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/ollama.py +6 -6
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/openai.py +6 -6
- admina_framework-0.10.0/admina/plugins/builtin/adapters/vllm.py +85 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/auth/apikey.py +59 -17
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/compliance/eu_ai_act.py +2 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/chromadb.py +2 -5
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/filesystem.py +2 -5
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/forensic/filesystem.py +94 -26
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/pii/spacy_regex.py +30 -3
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/registry.py +19 -16
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/dashboard.py +37 -34
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/integration.py +90 -40
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/config.py +18 -22
- admina_framework-0.10.0/admina/proxy/engine_bridge.py +44 -0
- admina_framework-0.10.0/admina/proxy/governance.py +37 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/main.py +195 -90
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/state.py +0 -2
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/__init__.py +6 -0
- admina_framework-0.10.0/admina/sdk/errors.py +27 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/governed_agent.py +47 -103
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/governed_data.py +38 -40
- admina_framework-0.10.0/admina/sdk/governed_model.py +325 -0
- admina_framework-0.10.0/admina/sdk/retry.py +127 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0/admina_framework.egg-info}/PKG-INFO +72 -70
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/SOURCES.txt +13 -1
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/requires.txt +27 -4
- {admina_framework-0.9.4 → admina_framework-0.10.0}/pyproject.toml +28 -10
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_core_config.py +57 -10
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_domains.py +17 -2
- admina_framework-0.10.0/tests/test_domains_governance.py +317 -0
- admina_framework-0.10.0/tests/test_engines.py +309 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_forensic_blackbox.py +161 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_governance_pipeline.py +9 -3
- admina_framework-0.10.0/tests/test_proxy_mcp_response_pii.py +149 -0
- admina_framework-0.10.0/tests/test_proxy_plugins.py +93 -0
- admina_framework-0.10.0/tests/test_proxy_security.py +462 -0
- admina_framework-0.9.4/admina/cli/templates/plugin.py.j2 +0 -145
- admina_framework-0.9.4/admina/cli/templates/plugin_pyproject.toml.j2 +0 -15
- admina_framework-0.9.4/admina/cli/templates/plugin_test.py.j2 +0 -48
- admina_framework-0.9.4/admina/plugins/builtin/forensic/minio.py +0 -180
- admina_framework-0.9.4/admina/proxy/engine_bridge.py +0 -251
- admina_framework-0.9.4/admina/sdk/governed_model.py +0 -243
- admina_framework-0.9.4/tests/test_proxy_security.py +0 -219
- {admina_framework-0.9.4 → admina_framework-0.10.0}/LICENSE +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/commands/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/main.py.j2 +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/plugin_readme.md.j2 +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/event_bus.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/types.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/heimdall.png +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/vendor/alpinejs.min.js +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/firewall.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/loop_breaker.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/llm_engine.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/webui.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/cross_regulation.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/gdpr.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/nis2.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/otel.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/classification.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/residency.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/cheshirecat/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/cheshirecat/admina-plugin/admina_governance.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/crewai/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/crewai/callbacks.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/langchain/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/langchain/callbacks.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/n8n/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/openclaw/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/log.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/webhook.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/auth/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/compliance/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/forensic/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/guards/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/guards/guardrailsai_guard.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/pii/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/http_rest.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/mcp.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/__init__.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/multi_upstream.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/py.typed +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/_compat.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/compliance_kit.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/dependency_links.txt +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/entry_points.txt +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/top_level.txt +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/setup.cfg +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_benchmark_14us.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_firewall_parity.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_mcp_transport.py +0 -0
- {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_version.py +0 -0
|
@@ -9,7 +9,7 @@ Source: https://github.com/admina-org/admina
|
|
|
9
9
|
|
|
10
10
|
─── Bundled assets ─────────────────────────────────────────────────
|
|
11
11
|
|
|
12
|
-
* dashboard/heimdall.png
|
|
12
|
+
* admina/dashboard/static/heimdall.png
|
|
13
13
|
"Heimdall — the Governance Owl"
|
|
14
14
|
Copyright © 2025–2026 Stefano Noferi & Admina contributors
|
|
15
15
|
Licensed under the Apache License, Version 2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: admina-framework
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Admina — governed AI development framework
|
|
5
5
|
Author-email: Stefano Noferi <info@admina.org>
|
|
6
6
|
Maintainer-email: Stefano Noferi <info@admina.org>
|
|
@@ -38,10 +38,9 @@ Requires-Dist: httpx<1,>=0.25; extra == "proxy"
|
|
|
38
38
|
Requires-Dist: pydantic<3,>=2.5; extra == "proxy"
|
|
39
39
|
Requires-Dist: pydantic-settings<3,>=2.3; extra == "proxy"
|
|
40
40
|
Requires-Dist: python-dotenv<2,>=1.0; extra == "proxy"
|
|
41
|
-
Requires-Dist: redis<
|
|
41
|
+
Requires-Dist: redis<9,>=5.0; extra == "proxy"
|
|
42
42
|
Requires-Dist: boto3<2,>=1.34; extra == "proxy"
|
|
43
|
-
Requires-Dist:
|
|
44
|
-
Requires-Dist: clickhouse-connect<1,>=0.7; extra == "proxy"
|
|
43
|
+
Requires-Dist: clickhouse-connect<2,>=0.7; extra == "proxy"
|
|
45
44
|
Requires-Dist: typer<1,>=0.9; extra == "proxy"
|
|
46
45
|
Requires-Dist: numpy<2,>=1.24; extra == "proxy"
|
|
47
46
|
Requires-Dist: scikit-learn<2,>=1.3; extra == "proxy"
|
|
@@ -53,14 +52,30 @@ Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "telemetry"
|
|
|
53
52
|
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.20; extra == "telemetry"
|
|
54
53
|
Requires-Dist: opentelemetry-instrumentation-fastapi<1,>=0.40b0; extra == "telemetry"
|
|
55
54
|
Provides-Extra: rust
|
|
56
|
-
Requires-Dist: admina-core<0.
|
|
55
|
+
Requires-Dist: admina-core<0.11,>=0.9.3; extra == "rust"
|
|
57
56
|
Provides-Extra: full
|
|
58
57
|
Requires-Dist: admina-framework[nlp,proxy,telemetry]; extra == "full"
|
|
58
|
+
Provides-Extra: openai
|
|
59
|
+
Requires-Dist: openai<3,>=1.0; extra == "openai"
|
|
60
|
+
Provides-Extra: ollama
|
|
61
|
+
Requires-Dist: ollama<1,>=0.3; extra == "ollama"
|
|
62
|
+
Provides-Extra: anthropic
|
|
63
|
+
Requires-Dist: anthropic<1,>=0.39; extra == "anthropic"
|
|
64
|
+
Provides-Extra: mistral
|
|
65
|
+
Requires-Dist: mistralai<3,>=1.0; extra == "mistral"
|
|
66
|
+
Provides-Extra: gemini
|
|
67
|
+
Requires-Dist: google-genai<3,>=1.0; extra == "gemini"
|
|
68
|
+
Provides-Extra: bedrock
|
|
69
|
+
Requires-Dist: boto3<2,>=1.34; extra == "bedrock"
|
|
70
|
+
Provides-Extra: adapters
|
|
71
|
+
Requires-Dist: admina-framework[anthropic,bedrock,gemini,mistral,ollama,openai]; extra == "adapters"
|
|
72
|
+
Provides-Extra: all
|
|
73
|
+
Requires-Dist: admina-framework[adapters,nlp,proxy,telemetry]; extra == "all"
|
|
59
74
|
Dynamic: license-file
|
|
60
75
|
|
|
61
76
|
<!--
|
|
62
77
|
<p align="center">
|
|
63
|
-
<img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
|
|
78
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
|
|
64
79
|
</p>
|
|
65
80
|
-->
|
|
66
81
|
|
|
@@ -71,9 +86,9 @@ Dynamic: license-file
|
|
|
71
86
|
|
|
72
87
|
<p align="center">
|
|
73
88
|
<a href="https://pypi.org/project/admina-framework/"><img src="https://img.shields.io/pypi/v/admina-framework?style=flat-square&color=32CD32" alt="PyPI version"></a>
|
|
74
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
|
|
89
|
+
<a href="https://github.com/admina-org/admina/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
|
|
75
90
|
<img src="https://img.shields.io/badge/python-3.11%2B-32CD32?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
|
|
76
|
-
<img src="https://img.shields.io/
|
|
91
|
+
<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
|
|
77
92
|
</p>
|
|
78
93
|
|
|
79
94
|
<p align="center">
|
|
@@ -85,7 +100,6 @@ Dynamic: license-file
|
|
|
85
100
|
|
|
86
101
|
<p align="center">
|
|
87
102
|
<a href="https://deepwiki.com/admina-org/admina"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
88
|
-
<a href="https://github.com/admina-org/admina/discussions"><img src="https://img.shields.io/github/discussions/admina-org/admina?style=flat-square&logo=github" alt="Discussions"></a>
|
|
89
103
|
<a href="https://admina.org/docs"><img src="https://img.shields.io/badge/docs-admina.org-blue?style=flat-square" alt="Docs"></a>
|
|
90
104
|
</p>
|
|
91
105
|
|
|
@@ -96,13 +110,6 @@ Dynamic: license-file
|
|
|
96
110
|
<a href="https://deepwiki.com/admina-org/admina"><img src="https://img.shields.io/badge/🤖%20Ask%20DeepWiki-AI%20wiki-7C3AED?style=for-the-badge" alt="DeepWiki" height="40"></a>
|
|
97
111
|
</p>
|
|
98
112
|
|
|
99
|
-
<p align="center">
|
|
100
|
-
<a href="https://github.com/admina-org/admina/stargazers"><img src="https://img.shields.io/github/stars/admina-org/admina?style=social" alt="Stars"></a>
|
|
101
|
-
<a href="https://github.com/admina-org/admina/network/members"><img src="https://img.shields.io/github/forks/admina-org/admina?style=social" alt="Forks"></a>
|
|
102
|
-
<a href="https://github.com/admina-org/admina/graphs/contributors"><img src="https://img.shields.io/github/contributors/admina-org/admina?style=flat-square&label=contributors" alt="Contributors"></a>
|
|
103
|
-
<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
|
|
104
|
-
</p>
|
|
105
|
-
|
|
106
113
|
---
|
|
107
114
|
|
|
108
115
|
## See it in action
|
|
@@ -110,13 +117,13 @@ Dynamic: license-file
|
|
|
110
117
|
**Scaffold a project and boot the governed proxy + dashboard — no Docker:**
|
|
111
118
|
|
|
112
119
|
<p align="center">
|
|
113
|
-
<img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
|
|
120
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
|
|
114
121
|
</p>
|
|
115
122
|
|
|
116
123
|
**Wrap any model in a few lines — PII is stripped before the model ever sees it:**
|
|
117
124
|
|
|
118
125
|
<p align="center">
|
|
119
|
-
<img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
|
|
126
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
|
|
120
127
|
</p>
|
|
121
128
|
|
|
122
129
|
**The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
|
|
@@ -124,11 +131,11 @@ Dynamic: license-file
|
|
|
124
131
|
<table>
|
|
125
132
|
<tr>
|
|
126
133
|
<td align="center" width="50%">
|
|
127
|
-
<img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
|
|
134
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
|
|
128
135
|
<em>First boot — Admina Score <strong>40/100</strong></em>
|
|
129
136
|
</td>
|
|
130
137
|
<td align="center" width="50%">
|
|
131
|
-
<img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
|
|
138
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
|
|
132
139
|
<em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
|
|
133
140
|
</td>
|
|
134
141
|
</tr>
|
|
@@ -195,6 +202,21 @@ pip install "admina-framework[proxy]"
|
|
|
195
202
|
pip install "admina-framework[full]"
|
|
196
203
|
python -m spacy download en_core_web_sm # for [full] only
|
|
197
204
|
|
|
205
|
+
# Model-adapter provider SDKs (per-provider extras):
|
|
206
|
+
pip install "admina-framework[openai]" # openai>=1.0
|
|
207
|
+
pip install "admina-framework[ollama]" # ollama>=0.3
|
|
208
|
+
pip install "admina-framework[anthropic]" # anthropic>=0.39
|
|
209
|
+
pip install "admina-framework[mistral]" # mistralai>=1.0
|
|
210
|
+
pip install "admina-framework[gemini]" # google-genai>=1.0
|
|
211
|
+
pip install "admina-framework[bedrock]" # boto3>=1.34 (AWS Bedrock)
|
|
212
|
+
|
|
213
|
+
# All provider SDKs at once:
|
|
214
|
+
pip install "admina-framework[adapters]"
|
|
215
|
+
|
|
216
|
+
# Everything (proxy + NLP + telemetry + all adapters):
|
|
217
|
+
pip install "admina-framework[all]"
|
|
218
|
+
python -m spacy download en_core_web_sm # for [all] only
|
|
219
|
+
|
|
198
220
|
# Optional: Rust-accelerated engine (auto-detected at runtime).
|
|
199
221
|
# Opt-in extra — pulls in the admina-core wheel from PyPI.
|
|
200
222
|
pip install "admina-framework[rust]"
|
|
@@ -233,6 +255,12 @@ pip install -e ".[proxy]"
|
|
|
233
255
|
# Everything (proxy + NLP + telemetry)
|
|
234
256
|
pip install -e ".[full]"
|
|
235
257
|
|
|
258
|
+
# All model-adapter SDKs
|
|
259
|
+
pip install -e ".[adapters]"
|
|
260
|
+
|
|
261
|
+
# Everything (proxy + NLP + telemetry + all adapters)
|
|
262
|
+
pip install -e ".[all]"
|
|
263
|
+
|
|
236
264
|
# CLI workflow
|
|
237
265
|
admina init my-project # Scaffold a governed AI project
|
|
238
266
|
cd my-project # admina dev runs from the project directory
|
|
@@ -267,7 +295,7 @@ flowchart LR
|
|
|
267
295
|
class P pipe;
|
|
268
296
|
```
|
|
269
297
|
|
|
270
|
-
Pipeline (identical in both modes): `
|
|
298
|
+
Pipeline (identical in both modes): `loop-breaker → firewall → PII redaction → guards → audit → forensic chain (SHA-256) → OTEL`
|
|
271
299
|
|
|
272
300
|
## The 4 Governance Domains
|
|
273
301
|
|
|
@@ -306,7 +334,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
|
|
|
306
334
|
| Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
|
|
307
335
|
| Compliance Template | EU AI Act |
|
|
308
336
|
| Transport Adapter | MCP, HTTP REST |
|
|
309
|
-
| Forensic Store | Filesystem, S3-compatible (boto3
|
|
337
|
+
| Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
|
|
310
338
|
| Auth Provider | API Key |
|
|
311
339
|
| PII Engine | spaCy + Regex |
|
|
312
340
|
| Alert Channel | Log, Webhook |
|
|
@@ -322,7 +350,7 @@ admina plugin create my-domain # Scaffold a new plugin
|
|
|
322
350
|
```bash
|
|
323
351
|
admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
|
|
324
352
|
admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
|
|
325
|
-
admina dev --stack # Docker stack: + redis + clickhouse +
|
|
353
|
+
admina dev --stack # Docker stack: + redis + clickhouse + grafana
|
|
326
354
|
admina dev --with-llm # --stack + ollama + chromadb + open-webui
|
|
327
355
|
admina plugin list # List all registered plugins
|
|
328
356
|
admina plugin install X # Install a plugin from path or registry
|
|
@@ -341,7 +369,7 @@ Real-time governance dashboard on port 3000:
|
|
|
341
369
|
- **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
|
|
342
370
|
- **Live Feed** — streaming governance events via WebSocket
|
|
343
371
|
- **Compliance Gaps** — EU AI Act gap analysis with article-level detail
|
|
344
|
-
- **Infrastructure Health** — proxy, Redis,
|
|
372
|
+
- **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
|
|
345
373
|
|
|
346
374
|
API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
|
|
347
375
|
|
|
@@ -353,7 +381,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
|
|
|
353
381
|
cp admina.yaml.example admina.yaml # Copy and customize
|
|
354
382
|
```
|
|
355
383
|
|
|
356
|
-
See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
|
|
384
|
+
See [`admina.yaml.example`](https://github.com/admina-org/admina/blob/main/admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
|
|
357
385
|
|
|
358
386
|
<a id="compliance-scope"></a>
|
|
359
387
|
|
|
@@ -376,7 +404,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
|
|
|
376
404
|
> 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
|
|
377
405
|
> 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
|
|
378
406
|
> ships with Admina as `admina.domains.compliance.eu_ai_act.EU_AI_ACT_DEADLINES`.
|
|
379
|
-
> See [`MODEL_CARD.md`](MODEL_CARD.md) for the full scope, limitations,
|
|
407
|
+
> See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
|
|
380
408
|
> and known failure modes of every Admina component.
|
|
381
409
|
|
|
382
410
|
</details>
|
|
@@ -478,7 +506,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
|
|
|
478
506
|
|
|
479
507
|
</details>
|
|
480
508
|
|
|
481
|
-
See [full integration docs](docs/guides/integrations.md) for details.
|
|
509
|
+
See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
|
|
482
510
|
|
|
483
511
|
## Performance — Hybrid Python + Rust engine
|
|
484
512
|
|
|
@@ -487,7 +515,7 @@ The Rust core engine is an optional accelerator. The default
|
|
|
487
515
|
enable the Rust engine with the opt-in extra `pip install
|
|
488
516
|
"admina-framework[rust]"` (or build from source for local development —
|
|
489
517
|
`maturin develop --release --manifest-path core-rust/Cargo.toml`, see
|
|
490
|
-
[CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
|
|
518
|
+
[CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
|
|
491
519
|
whichever is available and falls back transparently to Python if the Rust
|
|
492
520
|
extension is not installed.
|
|
493
521
|
|
|
@@ -558,7 +586,6 @@ The full stack (`docker compose up`) runs 9 containers:
|
|
|
558
586
|
| `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
|
|
559
587
|
| `3000` | Dashboard | Real-time governance web UI |
|
|
560
588
|
| `3001` | Grafana | Metrics dashboards |
|
|
561
|
-
| `9090` | MinIO Console | Forensic storage browser |
|
|
562
589
|
| `4317` | OTEL Collector | OTLP gRPC ingestion |
|
|
563
590
|
|
|
564
591
|
ClickHouse and Redis are internal only (not exposed to host).
|
|
@@ -569,45 +596,20 @@ ClickHouse and Redis are internal only (not exposed to host).
|
|
|
569
596
|
<br>
|
|
570
597
|
|
|
571
598
|
The forensic blackbox (the SHA-256 hash chain that makes the audit trail
|
|
572
|
-
tamper-evident) supports
|
|
599
|
+
tamper-evident) supports three backends. Read this before picking one for
|
|
573
600
|
production.
|
|
574
601
|
|
|
575
602
|
| Backend | License | When to use | Caveats |
|
|
576
603
|
|---------|---------|-------------|---------|
|
|
577
604
|
| **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
|
|
578
605
|
| **`filesystem`** | n/a | Single-host on-prem, air-gapped, smaller deployments | Persistence depends on the host filesystem; not ideal for HA. Requires `FORENSIC_BASE_DIR`. |
|
|
579
|
-
| **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2).
|
|
580
|
-
| **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
|
|
606
|
+
| **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, **MinIO** servers, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2). Supports WORM Object Lock. |
|
|
581
607
|
|
|
582
|
-
>
|
|
583
|
-
>
|
|
584
|
-
>
|
|
585
|
-
>
|
|
586
|
-
>
|
|
587
|
-
> 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
|
|
588
|
-
> network-accessible service (e.g. a SaaS that exposes Admina's
|
|
589
|
-
> dashboard or API to the public Internet), AGPLv3's network clause
|
|
590
|
-
> can be read to require you to publish the source code of the
|
|
591
|
-
> *combined* application that interacts with MinIO over the network.
|
|
592
|
-
> The MinIO commercial license removes this obligation, but is paid.
|
|
593
|
-
> This is **not** an Admina obligation — Apache 2.0 is permissive —
|
|
594
|
-
> but it is an obligation MinIO Server itself imposes on whoever
|
|
595
|
-
> runs it.
|
|
596
|
-
> 2. **The MinIO Python SDK has been archived.** No more security
|
|
597
|
-
> patches, no support for new Python releases. Continuing to depend
|
|
598
|
-
> on it is a supply-chain risk.
|
|
599
|
-
>
|
|
600
|
-
> **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
|
|
601
|
-
> The `boto3` client is Apache 2.0 and works against any S3-compatible
|
|
602
|
-
> service. Two open-source FOSS-friendly options that don't trigger the
|
|
603
|
-
> AGPL network clause for typical Admina deployments:
|
|
604
|
-
> - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
|
|
605
|
-
> - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
|
|
606
|
-
> Garage itself, not to applications that connect to it via S3 API)
|
|
607
|
-
>
|
|
608
|
-
> Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
|
|
609
|
-
> but plan a migration. The `minio` backend will be removed in a future
|
|
610
|
-
> release.
|
|
608
|
+
> **Using MinIO?** Point the `s3` backend at your MinIO server via
|
|
609
|
+
> `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
|
|
610
|
+
> client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
|
|
611
|
+
> (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
|
|
612
|
+
> transparently routes to the `s3` backend with a migration warning.
|
|
611
613
|
|
|
612
614
|
</details>
|
|
613
615
|
|
|
@@ -621,7 +623,7 @@ production.
|
|
|
621
623
|
| `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
|
|
622
624
|
| `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
|
|
623
625
|
| `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
|
|
624
|
-
| `
|
|
626
|
+
| `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
|
|
625
627
|
| `LOG_LEVEL` | `INFO` | Logging verbosity |
|
|
626
628
|
|
|
627
629
|
</details>
|
|
@@ -646,7 +648,7 @@ admina/
|
|
|
646
648
|
| +-- domains/ GuardrailsAI
|
|
647
649
|
| +-- compliance/ EU AI Act template
|
|
648
650
|
| +-- transports/ MCP, HTTP REST
|
|
649
|
-
| +-- forensic/
|
|
651
|
+
| +-- forensic/ Filesystem
|
|
650
652
|
| +-- auth/ API Key
|
|
651
653
|
| +-- pii/ spaCy + Regex
|
|
652
654
|
| +-- alerts/ Log, Webhook
|
|
@@ -705,12 +707,12 @@ curl http://localhost:8080/api/dashboard/score
|
|
|
705
707
|
|
|
706
708
|
## Project documents
|
|
707
709
|
|
|
708
|
-
- [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, testing, and pull request workflow
|
|
709
|
-
- [MODEL_CARD.md](MODEL_CARD.md) — transparency artifact for every Admina governance component (intended use, scope, limitations, known failure modes), aligned with EU AI Act Art. 13 and NIST AI RMF
|
|
710
|
-
- [ROADMAP.md](ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
|
|
711
|
-
- [CHANGELOG.md](CHANGELOG.md) — release notes
|
|
712
|
-
- [SECURITY.md](SECURITY.md) — coordinated disclosure policy
|
|
713
|
-
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
|
|
710
|
+
- [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
|
|
711
|
+
- [MODEL_CARD.md](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) — transparency artifact for every Admina governance component (intended use, scope, limitations, known failure modes), aligned with EU AI Act Art. 13 and NIST AI RMF
|
|
712
|
+
- [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
|
|
713
|
+
- [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
|
|
714
|
+
- [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
|
|
715
|
+
- [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
|
|
714
716
|
- **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
|
|
715
717
|
|
|
716
718
|
Admina is Apache 2.0. Contributions are welcome.
|
|
@@ -719,7 +721,7 @@ Admina is Apache 2.0. Contributions are welcome.
|
|
|
719
721
|
|
|
720
722
|
Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
|
|
721
723
|
|
|
722
|
-
Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
|
|
724
|
+
Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
|
|
723
725
|
|
|
724
726
|
---
|
|
725
727
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
<p align="center">
|
|
3
|
-
<img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
|
|
3
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
|
|
4
4
|
</p>
|
|
5
5
|
-->
|
|
6
6
|
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
13
|
<a href="https://pypi.org/project/admina-framework/"><img src="https://img.shields.io/pypi/v/admina-framework?style=flat-square&color=32CD32" alt="PyPI version"></a>
|
|
14
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
|
|
14
|
+
<a href="https://github.com/admina-org/admina/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
|
|
15
15
|
<img src="https://img.shields.io/badge/python-3.11%2B-32CD32?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
|
|
16
|
-
<img src="https://img.shields.io/
|
|
16
|
+
<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
|
|
26
26
|
<p align="center">
|
|
27
27
|
<a href="https://deepwiki.com/admina-org/admina"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
28
|
-
<a href="https://github.com/admina-org/admina/discussions"><img src="https://img.shields.io/github/discussions/admina-org/admina?style=flat-square&logo=github" alt="Discussions"></a>
|
|
29
28
|
<a href="https://admina.org/docs"><img src="https://img.shields.io/badge/docs-admina.org-blue?style=flat-square" alt="Docs"></a>
|
|
30
29
|
</p>
|
|
31
30
|
|
|
@@ -36,13 +35,6 @@
|
|
|
36
35
|
<a href="https://deepwiki.com/admina-org/admina"><img src="https://img.shields.io/badge/🤖%20Ask%20DeepWiki-AI%20wiki-7C3AED?style=for-the-badge" alt="DeepWiki" height="40"></a>
|
|
37
36
|
</p>
|
|
38
37
|
|
|
39
|
-
<p align="center">
|
|
40
|
-
<a href="https://github.com/admina-org/admina/stargazers"><img src="https://img.shields.io/github/stars/admina-org/admina?style=social" alt="Stars"></a>
|
|
41
|
-
<a href="https://github.com/admina-org/admina/network/members"><img src="https://img.shields.io/github/forks/admina-org/admina?style=social" alt="Forks"></a>
|
|
42
|
-
<a href="https://github.com/admina-org/admina/graphs/contributors"><img src="https://img.shields.io/github/contributors/admina-org/admina?style=flat-square&label=contributors" alt="Contributors"></a>
|
|
43
|
-
<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
|
|
44
|
-
</p>
|
|
45
|
-
|
|
46
38
|
---
|
|
47
39
|
|
|
48
40
|
## See it in action
|
|
@@ -50,13 +42,13 @@
|
|
|
50
42
|
**Scaffold a project and boot the governed proxy + dashboard — no Docker:**
|
|
51
43
|
|
|
52
44
|
<p align="center">
|
|
53
|
-
<img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
|
|
45
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
|
|
54
46
|
</p>
|
|
55
47
|
|
|
56
48
|
**Wrap any model in a few lines — PII is stripped before the model ever sees it:**
|
|
57
49
|
|
|
58
50
|
<p align="center">
|
|
59
|
-
<img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
|
|
51
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
|
|
60
52
|
</p>
|
|
61
53
|
|
|
62
54
|
**The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
|
|
@@ -64,11 +56,11 @@
|
|
|
64
56
|
<table>
|
|
65
57
|
<tr>
|
|
66
58
|
<td align="center" width="50%">
|
|
67
|
-
<img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
|
|
59
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
|
|
68
60
|
<em>First boot — Admina Score <strong>40/100</strong></em>
|
|
69
61
|
</td>
|
|
70
62
|
<td align="center" width="50%">
|
|
71
|
-
<img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
|
|
63
|
+
<img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
|
|
72
64
|
<em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
|
|
73
65
|
</td>
|
|
74
66
|
</tr>
|
|
@@ -135,6 +127,21 @@ pip install "admina-framework[proxy]"
|
|
|
135
127
|
pip install "admina-framework[full]"
|
|
136
128
|
python -m spacy download en_core_web_sm # for [full] only
|
|
137
129
|
|
|
130
|
+
# Model-adapter provider SDKs (per-provider extras):
|
|
131
|
+
pip install "admina-framework[openai]" # openai>=1.0
|
|
132
|
+
pip install "admina-framework[ollama]" # ollama>=0.3
|
|
133
|
+
pip install "admina-framework[anthropic]" # anthropic>=0.39
|
|
134
|
+
pip install "admina-framework[mistral]" # mistralai>=1.0
|
|
135
|
+
pip install "admina-framework[gemini]" # google-genai>=1.0
|
|
136
|
+
pip install "admina-framework[bedrock]" # boto3>=1.34 (AWS Bedrock)
|
|
137
|
+
|
|
138
|
+
# All provider SDKs at once:
|
|
139
|
+
pip install "admina-framework[adapters]"
|
|
140
|
+
|
|
141
|
+
# Everything (proxy + NLP + telemetry + all adapters):
|
|
142
|
+
pip install "admina-framework[all]"
|
|
143
|
+
python -m spacy download en_core_web_sm # for [all] only
|
|
144
|
+
|
|
138
145
|
# Optional: Rust-accelerated engine (auto-detected at runtime).
|
|
139
146
|
# Opt-in extra — pulls in the admina-core wheel from PyPI.
|
|
140
147
|
pip install "admina-framework[rust]"
|
|
@@ -173,6 +180,12 @@ pip install -e ".[proxy]"
|
|
|
173
180
|
# Everything (proxy + NLP + telemetry)
|
|
174
181
|
pip install -e ".[full]"
|
|
175
182
|
|
|
183
|
+
# All model-adapter SDKs
|
|
184
|
+
pip install -e ".[adapters]"
|
|
185
|
+
|
|
186
|
+
# Everything (proxy + NLP + telemetry + all adapters)
|
|
187
|
+
pip install -e ".[all]"
|
|
188
|
+
|
|
176
189
|
# CLI workflow
|
|
177
190
|
admina init my-project # Scaffold a governed AI project
|
|
178
191
|
cd my-project # admina dev runs from the project directory
|
|
@@ -207,7 +220,7 @@ flowchart LR
|
|
|
207
220
|
class P pipe;
|
|
208
221
|
```
|
|
209
222
|
|
|
210
|
-
Pipeline (identical in both modes): `
|
|
223
|
+
Pipeline (identical in both modes): `loop-breaker → firewall → PII redaction → guards → audit → forensic chain (SHA-256) → OTEL`
|
|
211
224
|
|
|
212
225
|
## The 4 Governance Domains
|
|
213
226
|
|
|
@@ -246,7 +259,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
|
|
|
246
259
|
| Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
|
|
247
260
|
| Compliance Template | EU AI Act |
|
|
248
261
|
| Transport Adapter | MCP, HTTP REST |
|
|
249
|
-
| Forensic Store | Filesystem, S3-compatible (boto3
|
|
262
|
+
| Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
|
|
250
263
|
| Auth Provider | API Key |
|
|
251
264
|
| PII Engine | spaCy + Regex |
|
|
252
265
|
| Alert Channel | Log, Webhook |
|
|
@@ -262,7 +275,7 @@ admina plugin create my-domain # Scaffold a new plugin
|
|
|
262
275
|
```bash
|
|
263
276
|
admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
|
|
264
277
|
admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
|
|
265
|
-
admina dev --stack # Docker stack: + redis + clickhouse +
|
|
278
|
+
admina dev --stack # Docker stack: + redis + clickhouse + grafana
|
|
266
279
|
admina dev --with-llm # --stack + ollama + chromadb + open-webui
|
|
267
280
|
admina plugin list # List all registered plugins
|
|
268
281
|
admina plugin install X # Install a plugin from path or registry
|
|
@@ -281,7 +294,7 @@ Real-time governance dashboard on port 3000:
|
|
|
281
294
|
- **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
|
|
282
295
|
- **Live Feed** — streaming governance events via WebSocket
|
|
283
296
|
- **Compliance Gaps** — EU AI Act gap analysis with article-level detail
|
|
284
|
-
- **Infrastructure Health** — proxy, Redis,
|
|
297
|
+
- **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
|
|
285
298
|
|
|
286
299
|
API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
|
|
287
300
|
|
|
@@ -293,7 +306,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
|
|
|
293
306
|
cp admina.yaml.example admina.yaml # Copy and customize
|
|
294
307
|
```
|
|
295
308
|
|
|
296
|
-
See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
|
|
309
|
+
See [`admina.yaml.example`](https://github.com/admina-org/admina/blob/main/admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
|
|
297
310
|
|
|
298
311
|
<a id="compliance-scope"></a>
|
|
299
312
|
|
|
@@ -316,7 +329,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
|
|
|
316
329
|
> 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
|
|
317
330
|
> 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
|
|
318
331
|
> ships with Admina as `admina.domains.compliance.eu_ai_act.EU_AI_ACT_DEADLINES`.
|
|
319
|
-
> See [`MODEL_CARD.md`](MODEL_CARD.md) for the full scope, limitations,
|
|
332
|
+
> See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
|
|
320
333
|
> and known failure modes of every Admina component.
|
|
321
334
|
|
|
322
335
|
</details>
|
|
@@ -418,7 +431,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
|
|
|
418
431
|
|
|
419
432
|
</details>
|
|
420
433
|
|
|
421
|
-
See [full integration docs](docs/guides/integrations.md) for details.
|
|
434
|
+
See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
|
|
422
435
|
|
|
423
436
|
## Performance — Hybrid Python + Rust engine
|
|
424
437
|
|
|
@@ -427,7 +440,7 @@ The Rust core engine is an optional accelerator. The default
|
|
|
427
440
|
enable the Rust engine with the opt-in extra `pip install
|
|
428
441
|
"admina-framework[rust]"` (or build from source for local development —
|
|
429
442
|
`maturin develop --release --manifest-path core-rust/Cargo.toml`, see
|
|
430
|
-
[CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
|
|
443
|
+
[CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
|
|
431
444
|
whichever is available and falls back transparently to Python if the Rust
|
|
432
445
|
extension is not installed.
|
|
433
446
|
|
|
@@ -498,7 +511,6 @@ The full stack (`docker compose up`) runs 9 containers:
|
|
|
498
511
|
| `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
|
|
499
512
|
| `3000` | Dashboard | Real-time governance web UI |
|
|
500
513
|
| `3001` | Grafana | Metrics dashboards |
|
|
501
|
-
| `9090` | MinIO Console | Forensic storage browser |
|
|
502
514
|
| `4317` | OTEL Collector | OTLP gRPC ingestion |
|
|
503
515
|
|
|
504
516
|
ClickHouse and Redis are internal only (not exposed to host).
|
|
@@ -509,45 +521,20 @@ ClickHouse and Redis are internal only (not exposed to host).
|
|
|
509
521
|
<br>
|
|
510
522
|
|
|
511
523
|
The forensic blackbox (the SHA-256 hash chain that makes the audit trail
|
|
512
|
-
tamper-evident) supports
|
|
524
|
+
tamper-evident) supports three backends. Read this before picking one for
|
|
513
525
|
production.
|
|
514
526
|
|
|
515
527
|
| Backend | License | When to use | Caveats |
|
|
516
528
|
|---------|---------|-------------|---------|
|
|
517
529
|
| **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
|
|
518
530
|
| **`filesystem`** | n/a | Single-host on-prem, air-gapped, smaller deployments | Persistence depends on the host filesystem; not ideal for HA. Requires `FORENSIC_BASE_DIR`. |
|
|
519
|
-
| **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2).
|
|
520
|
-
| **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
|
|
531
|
+
| **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, **MinIO** servers, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2). Supports WORM Object Lock. |
|
|
521
532
|
|
|
522
|
-
>
|
|
523
|
-
>
|
|
524
|
-
>
|
|
525
|
-
>
|
|
526
|
-
>
|
|
527
|
-
> 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
|
|
528
|
-
> network-accessible service (e.g. a SaaS that exposes Admina's
|
|
529
|
-
> dashboard or API to the public Internet), AGPLv3's network clause
|
|
530
|
-
> can be read to require you to publish the source code of the
|
|
531
|
-
> *combined* application that interacts with MinIO over the network.
|
|
532
|
-
> The MinIO commercial license removes this obligation, but is paid.
|
|
533
|
-
> This is **not** an Admina obligation — Apache 2.0 is permissive —
|
|
534
|
-
> but it is an obligation MinIO Server itself imposes on whoever
|
|
535
|
-
> runs it.
|
|
536
|
-
> 2. **The MinIO Python SDK has been archived.** No more security
|
|
537
|
-
> patches, no support for new Python releases. Continuing to depend
|
|
538
|
-
> on it is a supply-chain risk.
|
|
539
|
-
>
|
|
540
|
-
> **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
|
|
541
|
-
> The `boto3` client is Apache 2.0 and works against any S3-compatible
|
|
542
|
-
> service. Two open-source FOSS-friendly options that don't trigger the
|
|
543
|
-
> AGPL network clause for typical Admina deployments:
|
|
544
|
-
> - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
|
|
545
|
-
> - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
|
|
546
|
-
> Garage itself, not to applications that connect to it via S3 API)
|
|
547
|
-
>
|
|
548
|
-
> Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
|
|
549
|
-
> but plan a migration. The `minio` backend will be removed in a future
|
|
550
|
-
> release.
|
|
533
|
+
> **Using MinIO?** Point the `s3` backend at your MinIO server via
|
|
534
|
+
> `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
|
|
535
|
+
> client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
|
|
536
|
+
> (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
|
|
537
|
+
> transparently routes to the `s3` backend with a migration warning.
|
|
551
538
|
|
|
552
539
|
</details>
|
|
553
540
|
|
|
@@ -561,7 +548,7 @@ production.
|
|
|
561
548
|
| `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
|
|
562
549
|
| `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
|
|
563
550
|
| `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
|
|
564
|
-
| `
|
|
551
|
+
| `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
|
|
565
552
|
| `LOG_LEVEL` | `INFO` | Logging verbosity |
|
|
566
553
|
|
|
567
554
|
</details>
|
|
@@ -586,7 +573,7 @@ admina/
|
|
|
586
573
|
| +-- domains/ GuardrailsAI
|
|
587
574
|
| +-- compliance/ EU AI Act template
|
|
588
575
|
| +-- transports/ MCP, HTTP REST
|
|
589
|
-
| +-- forensic/
|
|
576
|
+
| +-- forensic/ Filesystem
|
|
590
577
|
| +-- auth/ API Key
|
|
591
578
|
| +-- pii/ spaCy + Regex
|
|
592
579
|
| +-- alerts/ Log, Webhook
|
|
@@ -645,12 +632,12 @@ curl http://localhost:8080/api/dashboard/score
|
|
|
645
632
|
|
|
646
633
|
## Project documents
|
|
647
634
|
|
|
648
|
-
- [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, testing, and pull request workflow
|
|
649
|
-
- [MODEL_CARD.md](MODEL_CARD.md) — transparency artifact for every Admina governance component (intended use, scope, limitations, known failure modes), aligned with EU AI Act Art. 13 and NIST AI RMF
|
|
650
|
-
- [ROADMAP.md](ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
|
|
651
|
-
- [CHANGELOG.md](CHANGELOG.md) — release notes
|
|
652
|
-
- [SECURITY.md](SECURITY.md) — coordinated disclosure policy
|
|
653
|
-
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
|
|
635
|
+
- [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
|
|
636
|
+
- [MODEL_CARD.md](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) — transparency artifact for every Admina governance component (intended use, scope, limitations, known failure modes), aligned with EU AI Act Art. 13 and NIST AI RMF
|
|
637
|
+
- [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
|
|
638
|
+
- [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
|
|
639
|
+
- [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
|
|
640
|
+
- [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
|
|
654
641
|
- **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
|
|
655
642
|
|
|
656
643
|
Admina is Apache 2.0. Contributions are welcome.
|
|
@@ -659,7 +646,7 @@ Admina is Apache 2.0. Contributions are welcome.
|
|
|
659
646
|
|
|
660
647
|
Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
|
|
661
648
|
|
|
662
|
-
Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
|
|
649
|
+
Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
|
|
663
650
|
|
|
664
651
|
---
|
|
665
652
|
|