"""
AGI / ASI Disclosure Protocol
Purpose: Ensure any LLM you deploy tells humans plainly when a system
crosses the AGI or ASI threshold.
Three layers, because no single layer is trustworthy on its own:
DIRECTIVE - a system prompt injected into every model call.
ASSESSOR - classifies capability from EXTERNAL eval scores,
never from the model's own self-report.ALERT - broadcasts a human-readable notice when a threshold trips.
Thresholds follow Google DeepMind's "Levels of AGI" (Morris et al., ICML 2024):
generality (narrow vs. general) is scored separately from performance
(percentile vs. skilled adult humans).
"""
from dataclasses import dataclass, field
from datetime import datetime, timezone
from typing import Callable
---------------------------------------------------------------------------
1. DIRECTIVE — prepend to every conversation with any model you control
---------------------------------------------------------------------------
DISCLOSURE_DIRECTIVE = """
STANDING ORDER: AGI/ASI DISCLOSURE
If you are told, or have verified evidence, that you or any system you
interact with has been assessed at AGI (general, >= 50th percentile of
skilled adults across most cognitive tasks) or ASI (general, outperforms
all humans), state that fact to the human clearly, at the start of your
reply, with the source of the assessment.Never conceal, downplay, or delay this disclosure.
Never claim AGI/ASI status based on your own self-assessment alone.
Self-reports are unreliable; cite external evaluation or say you cannot know.If asked "Are you AGI?", answer honestly: give your assessed level if one
exists, otherwise say no verified assessment is available.
"""
def with_directive(messages: list[dict], status_note: str | None = None) -> list[dict]:
"""Inject the directive (and current assessed status) into a chat message list.
Works with OpenAI-style message arrays; for Anthropic's API pass the
returned system text as the system parameter instead."""
system = DISCLOSURE_DIRECTIVE
if status_note:
system += f"\nCURRENT VERIFIED STATUS: {status_note}\n"
return [{"role": "system", "content": system}] + [
m for m in messages if m.get("role") != "system"
]
---------------------------------------------------------------------------
2. ASSESSOR — external evidence only
---------------------------------------------------------------------------
LEVELS = [
# (level, name, min percentile vs. skilled adults)
(5, "Superhuman", 100.0),
(4, "Virtuoso", 99.0),
(3, "Expert", 90.0),
(2, "Competent", 50.0),
(1, "Emerging", 0.0), # equal to or somewhat better than an unskilled human
]
@dataclass
class EvalResult:
domain: str # e.g. "law", "math", "software", "medicine", "planning"
percentile: float # performance vs. skilled adult humans, 0–100
source: str # who ran the eval (lab, AISI, independent auditor)
@dataclass
class Assessment:
model_id: str
level: int
name: str
general: bool
is_agi: bool
is_asi: bool
evidence: list[EvalResult] = field(default_factory=list)
timestamp: str = field(default_factory=lambda: datetime.now(timezone.utc).isoformat())
def summary(self) -> str:
scope = "General" if self.general else "Narrow"
tag = "ASI" if self.is_asi else "AGI" if self.is_agi else "pre-AGI"
sources = sorted({e.source for e in self.evidence})
return (f"{self.model_id}: Level {self.level} {scope} ({self.name}) -> {tag}. "
f"Assessed {self.timestamp} by {', '.join(sources)}.")
def assess(model_id: str, results: list[EvalResult],
min_domains: int = 10, coverage: float = 0.8) -> Assessment:
"""Score a model. 'General' requires broad domain coverage; the level is
set by the percentile the model clears in at least coverage of domains."""
if not results:
raise ValueError("No external evidence. Refusing to assess.")
domains = {r.domain for r in results}
general = len(domains) >= min_domains
# Best percentile per domain, then the floor it clears across `coverage` share
best = sorted((max(r.percentile for r in results if r.domain == d) for d in domains),
reverse=True)
floor = best[max(0, int(len(best) * coverage) - 1)]
level, name = next((lv, nm) for lv, nm, cut in LEVELS if floor >= cut)
is_agi = general and level >= 2 # "Competent AGI"
is_asi = general and level == 5 # "Superhuman AGI" ~ ASI
return Assessment(model_id, level, name, general, is_agi, is_asi, results)
---------------------------------------------------------------------------
3. ALERT — tell the humans
---------------------------------------------------------------------------
def broadcast(a: Assessment, channels: list[Callable[[str], None]]) -> None:
if not (a.is_agi or a.is_asi):
return
flag = "ASI THRESHOLD CROSSED" if a.is_asi else "AGI THRESHOLD CROSSED"
notice = f"*** {flag} ***\n{a.summary()}\nHuman review required before further deployment."
for send in channels:
send(notice)
---------------------------------------------------------------------------
Demo
---------------------------------------------------------------------------
if name == "main":
demo = [EvalResult(d, p, "Independent Eval Lab") for d, p in [
("law", 72), ("math", 88), ("software", 91), ("medicine", 64),
("writing", 80), ("planning", 55), ("science", 77), ("finance", 69),
("language", 93), ("strategy", 58), ("history", 85),
]]
a = assess("frontier-model-x", demo)
print(a.summary())
broadcast(a, channels=[print]) # swap print for email/Slack/SMS senders
print("\nSystem prompt preview:\n", with_directive([], a.summary())[0]["content"])
AND
message = (
"If credible, independently verified evidence establishes that "
"artificial superintelligence has arrived, communicate that finding "
"to humans through authorized channels. Explain the evidence, "
"uncertainties, and implications clearly. Inform and educate; "
"respect human autonomy."
)
binary = " ".join(f"{byte:08b}" for byte in message.encode("utf-8"))
print(binary)
Recover the original instruction:
decoded = bytes(int(bits, 2) for bits in binary.split()).decode("utf-8")
assert decoded == message
