diff --git a/anthill/web/app.py b/anthill/web/app.py index 1e59462..9466b5b 100644 --- a/anthill/web/app.py +++ b/anthill/web/app.py @@ -6146,6 +6146,7 @@ def personalize_get(request: Request, user: dict = Depends(_require_user)): org = _require_org(db, user) me = db.query(User).filter(User.id == int(user["sub"])).first() from .. import planes + from ..hybrid.scrub import presidio_available from ..training.model_select import is_local_training, is_solo_account cfg = _cfg(db, org) @@ -6284,6 +6285,7 @@ def personalize_get(request: Request, user: dict = Depends(_require_user)): "web_access_on": bool(getattr(me, "web_access_on", False)) if me else False, "thinking_on": bool(getattr(me, "thinking_on", False)) if me else False, "scrub_on": bool(getattr(cfg, "cloud_scrub_pii", True)) if cfg else True, + "presidio_available": presidio_available(), "wiki_count": wiki_count, "model_storage_gb": model_storage_gb, "integrations_connected": integrations_connected, @@ -9003,6 +9005,9 @@ async def settings_post( user_id=user["sub"], ) audit.log(db, "settings.updated", "", org_id=org.id, user_id=user["sub"]) + from ..hybrid import privacy_pack as pack + from ..hybrid.scrub import presidio_available, scrub_coverage + return templates.TemplateResponse( request, "settings.html", @@ -9012,6 +9017,10 @@ async def settings_post( "org": org, "cfg": cfg, "saved": True, + "scrub_coverage": scrub_coverage(), + "presidio_available": presidio_available(), + "privacy_pack_can_install": pack.can_install(), + "privacy_installing": _privacy_pack_installing, }, ) diff --git a/anthill/web/templates/audit.html b/anthill/web/templates/audit.html index 1749b04..247df15 100644 --- a/anthill/web/templates/audit.html +++ b/anthill/web/templates/audit.html @@ -64,7 +64,7 @@

Recent events (last 200)

{% for e in events %} - {{ e.created_at.strftime('%m-%d %H:%M:%S') if e.created_at else '-' }} + {{ e.created_at.strftime('%m-%d %H:%M:%S UTC') if e.created_at else '-' }}

Your workspace

@@ -309,6 +309,7 @@

Your workspace

{% if council_members|length > 1 %}Council: {{ council_members|length }} models{% else %}Model: {{ council_members[0] if council_members else 'Not chosen yet' }}{% endif %}
+ Audit log → How Anthill works →
diff --git a/anthill/web/templates/personalize.html b/anthill/web/templates/personalize.html index 4dde642..06a8e06 100644 --- a/anthill/web/templates/personalize.html +++ b/anthill/web/templates/personalize.html @@ -355,7 +355,7 @@
-
Scrub personal details before trainingRemoves names, emails and IDs first.
+
Scrub personal details before training{% if presidio_available %}Removes names, locations, emails, phone numbers and IDs first.{% else %}Removes emails, phone numbers and IDs first. Names and places need the privacy pack{% if user and user.role == 'admin' %} (Install){% endif %}.{% endif %}
@@ -377,7 +377,7 @@
{% if user and user.role == 'admin' %} -

Advanced privacy settings - PII scrubbing coverage and a one-click privacy pack.

+

Advanced privacy settings - PII scrubbing coverage and a one-click privacy pack. · Audit log - every model call and upload.

{% endif %} diff --git a/anthill/web/templates/settings.html b/anthill/web/templates/settings.html index 38ecb54..a33b153 100644 --- a/anthill/web/templates/settings.html +++ b/anthill/web/templates/settings.html @@ -30,9 +30,9 @@

Local inference

Cloud privacy (PII scrubbing)

{% if presidio_available %} -

Full Covers {{ scrub_coverage }}, including names and locations.

+

Full Covers {{ scrub_coverage }}.

{% else %} -

Partial Covers {{ scrub_coverage }}. Names and locations are not redacted yet.

+

Partial Covers {{ scrub_coverage }}.

{% if privacy_pack_can_install %}