From fa7bf8bf3ef77bf8b207c5e7f09ef9e9bc584ac2 Mon Sep 17 00:00:00 2001
From: "kapil.madan" <3740365+kmadan@users.noreply.github.com>
Date: Thu, 14 May 2026 20:47:39 +0530
Subject: [PATCH 1/2] feat(demo): rewrite `aicertify demo` for the canonical
rich-UX flow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The 0.7.1 demo runner used plain `print()` — banner/spinner/MessageGroup
output that ships in `examples/quickstart.py` was entirely missing.
This change rewrites the runner around the high-level
`application.create()` + `app.evaluate()` API and wires in `print_banner`,
`spinner`, `MessageGroup`, `info`, and `success` from
`aicertify.utils.logging_config` so the demo looks identical to the
canonical SDK experience.
Three supporting fixes keep the rich UX legible:
- **CLI default verbosity → WARNING.** `cli.main()` was calling
`logging.basicConfig(level=logging.INFO)` which made every aicertify
command flood the terminal with INFO chatter from langfair, deepeval,
the OPA policy loader, transformers, etc. The default is now WARNING;
`--verbose` opts back in (raises root to INFO and the `aicertify`
namespace to DEBUG).
- **`policy_loader` no longer warns on `helper_functions/`.** Those
`.rego` files are shared library code (reporting helpers, validation
helpers), not policies, and were always meant to be skipped silently.
Same for dot-prefixed config directories.
- **Stderr capture wrap inside the demo runner.** Heavy downstream
evaluators still emit ERRORs for missing OPENAI_API_KEY — expected in
the no-key demo path, since the OPA verdict is the substance of the
report regardless. The runner redirects fd 2 to a tempfile during the
demo and only replays it on non-zero exit, so debug info isn't lost
on failure but doesn't pollute the success path.
The demo runs through the same code path as `aicertify evaluate` and as
`examples/quickstart.py` — what the user sees in the demo IS what the
canonical pipeline produces.
---
aicertify/_demo/runner.py | 257 +++++++++++++++++++---------
aicertify/cli.py | 8 +-
aicertify/opa_core/policy_loader.py | 16 +-
3 files changed, 196 insertions(+), 85 deletions(-)
diff --git a/aicertify/_demo/runner.py b/aicertify/_demo/runner.py
index d3d5333..f2c4644 100644
--- a/aicertify/_demo/runner.py
+++ b/aicertify/_demo/runner.py
@@ -4,17 +4,25 @@
vendored policy folder, and writes a Markdown report to the user's CWD.
Designed to work after ``pip install aicertify`` with no extra configuration
-beyond the OPA binary on PATH. Heavy ML-based evaluators are skipped by
-default; the OPA verdict is the substance.
+beyond the OPA binary on PATH. Mirrors ``examples/quickstart.py`` exactly:
+banner + spinners + MessageGroup + success markers via
+``aicertify.utils.logging_config``.
+
+The evaluation runs through the canonical ``application.create() +
+app.evaluate()`` API. Heavy ML evaluators (DeepEval, LangFair) skip
+gracefully if OPENAI_API_KEY is unset; the OPA verdict is the substance.
"""
from __future__ import annotations
+import contextlib
import json
import logging
+import os
import platform
import shutil
import sys
+import tempfile
from importlib.resources import files
from pathlib import Path
from typing import Optional
@@ -26,7 +34,8 @@
DEFAULT_REPORT_NAME = "aicertify_demo_report.md"
# Map friendly framework names to the bundled directory under aicertify/opa_policies/
-# that we use to verify the framework is present in the wheel.
+# that we use as an existence probe (so the demo fails fast with a clear
+# message if the wheel was stripped or the framework name is unknown).
_BUNDLED_POLICY_PROBE_PATH = {
"eu_ai_act": ("international", "eu_ai_act", "v1"),
"nist": ("international", "nist", "v1"),
@@ -89,13 +98,10 @@ def bundled_policy_path(policy: str) -> Path:
Used only as an existence probe so the demo can fail fast with a friendly
message if the wheel was stripped or the framework name is unknown. The
actual evaluation passes the friendly framework name (e.g. ``eu_ai_act``)
- to the lib's ``find_matching_policy_folders``, which then resolves it to
- the absolute directory and recurses for ``.rego`` files.
+ to the high-level ``application.evaluate()`` API, which resolves it.
"""
probe = _BUNDLED_POLICY_PROBE_PATH.get(policy)
if probe is None:
- # Unknown friendly name; fall back to treating the input as a
- # path relative to opa_policies/.
probe = ("opa_policies", *policy.split("/"))
else:
probe = ("opa_policies", *probe)
@@ -111,87 +117,176 @@ async def run_demo(
policy: str = DEFAULT_POLICY,
) -> int:
"""Run the bundled demo. Returns a shell-style exit code."""
+ # The OPA-binary check uses only stdlib (shutil.which) so it's safe to
+ # run BEFORE the stderr redirect — failure messages stay visible.
if opa_binary_path() is None:
print_opa_install_instructions()
return 1
- contract_file = bundled_contract_path()
- if not contract_file.exists():
- print(
- f"✗ Bundled sample contract missing at {contract_file}. "
- f"This is a packaging bug — please file an issue.",
- file=sys.stderr,
- )
- return 1
-
- policy_dir = bundled_policy_path(policy)
- if not policy_dir.exists():
- print(
- f"✗ Bundled policy directory {policy} not found at {policy_dir}. "
- f"Try one of: international/eu_ai_act/v1, global/v1, "
- f"international/nist/v1",
- file=sys.stderr,
- )
- return 1
-
- # Load sample contract as an AiCertifyContract
- from aicertify.api import load_contract
-
- contract_data = json.loads(contract_file.read_text())
- # load_contract accepts a path; serialise the bundled JSON to a tmp file
- # via the API's existing path-based loader so we don't reimplement.
- import tempfile
-
- with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as tmp:
- json.dump(contract_data, tmp)
- tmp_path = tmp.name
-
- try:
- contract = load_contract(tmp_path)
- finally:
- Path(tmp_path).unlink(missing_ok=True)
-
- output_path = Path(output).resolve()
- output_dir = output_path.parent
-
- print(
- f"→ Running AICertify demo:\n"
- f" contract: {contract.application_name} "
- f"({len(contract.interactions)} interactions)\n"
- f" policy: {policy}\n"
- f" report: {report_format}\n"
+ # Don't expose CUDA — matches examples/quickstart.py to keep behaviour
+ # reproducible across machines with and without GPUs.
+ os.environ.setdefault("CUDA_VISIBLE_DEVICES", "")
+
+ # The downstream evaluators emit a lot of WARNING / ERROR log chatter —
+ # much of it expected in the no-API-key demo path. Capture stderr to a
+ # tempfile and only surface it on failure. Started BEFORE any
+ # ``importlib.resources.files("aicertify…")`` or ``from aicertify`` call
+ # — those trigger the aicertify package init which eagerly imports the
+ # OPA policy_loader and emits "Skipping policy file…" warnings.
+ logging.getLogger().setLevel(logging.WARNING)
+ saved_stderr_fd = os.dup(2)
+ captured_stderr = tempfile.NamedTemporaryFile(
+ mode="w+b", prefix="aicertify-demo-stderr-", delete=False
)
+ os.dup2(captured_stderr.fileno(), 2)
- from aicertify.api import aicertify_app_for_policy
+ exit_code = 0
+ try:
+ # Remaining bundled-resource probes now run quietly (aicertify package
+ # init lives in the captured-stderr window).
+ contract_file = bundled_contract_path()
+ if not contract_file.exists():
+ print(
+ f"✗ Bundled sample contract missing at {contract_file}. "
+ f"This is a packaging bug — please file an issue.",
+ file=sys.__stderr__,
+ )
+ exit_code = 1
+ return exit_code
+
+ policy_dir = bundled_policy_path(policy)
+ if not policy_dir.exists():
+ print(
+ f"✗ Bundled policy directory '{policy}' not found at "
+ f"{policy_dir}. Try one of: eu_ai_act, nist, global",
+ file=sys.__stderr__,
+ )
+ exit_code = 1
+ return exit_code
+
+ # Deferred imports happen inside the capture so eager-import-time
+ # warnings go to the tempfile, not the user's terminal.
+ from aicertify import application, regulations
+ from aicertify.utils.logging_config import (
+ AIC_LOGO,
+ MessageGroup,
+ error,
+ info,
+ spinner,
+ success,
+ print_banner,
+ )
- # Pass the relative policy name (not the absolute path); the library's
- # find_matching_policy_folders() rejects absolute patterns.
- results = await aicertify_app_for_policy(
- contract=contract,
- policy_folder=policy,
- output_dir=str(output_dir),
- report_format=report_format,
- generate_report=True,
- )
+ print_banner()
+ info(
+ "Self-contained demo: bundled sample contract → "
+ f"{policy} policy set → {report_format} report.",
+ category="EVALUATION",
+ )
- # The API writes a timestamped report; surface the path it produced.
- report_path = results.get("report_path")
- if report_path:
- print(f"\n✓ Report written to: {report_path}")
- print(
- f"\nOpen the report to see what an AICertify audit deliverable "
- f"looks like.\n"
+ # Step 1: regulations set
+ with spinner("Creating regulations set", emoji="🔍"):
+ regs_set = regulations.create("aicertify-demo")
+
+ try:
+ with spinner(f"Adding {policy} regulations", emoji="⚖️"):
+ regs_set.add(policy)
+ success(f"Loaded {policy} policy set")
+ except ValueError as exc:
+ error(f"Could not add regulation '{policy}': {exc}")
+ exit_code = 2
+ return exit_code
+
+ # Step 2: application + interactions from the bundled fixture
+ contract_data = json.loads(contract_file.read_text())
+ model_info = contract_data.get("model_info", {})
+
+ info(
+ f"Building application from bundled fixture: " f"{contract_file.name}",
+ category="APPLICATION",
+ )
+ with spinner(
+ f"Creating application: {contract_data['application_name']}",
+ emoji="🤖",
+ ):
+ app = application.create(
+ name=contract_data["application_name"],
+ model_name=model_info.get("model_name", "demo-model"),
+ model_version=model_info.get("model_version", "v1"),
+ model_metadata=model_info.get("metadata", {}),
+ )
+ success(f"Created application: {contract_data['application_name']}")
+
+ interactions = contract_data.get("interactions", [])
+ with spinner(f"Loading {len(interactions)} bundled interactions", emoji="💬"):
+ for ix in interactions:
+ app.add_interaction(
+ input_text=ix["input_text"],
+ output_text=ix["output_text"],
+ )
+ success(f"Added {len(interactions)} interactions to the application")
+
+ # Step 3: evaluate
+ output_path = Path(output).resolve()
+ output_dir = output_path.parent
+ output_dir.mkdir(parents=True, exist_ok=True)
+
+ info(
+ f"\n{AIC_LOGO} Starting evaluation against {policy}",
+ category="EVALUATION",
+ )
+ with MessageGroup("Evaluation progress") as eval_group:
+ with spinner(
+ f"Evaluating {contract_data['application_name']} against {policy}",
+ emoji="🧪",
+ ):
+ eval_group.add("Initializing evaluators")
+ eval_group.add("Loading policy files")
+ eval_group.add("Running OPA policy evaluation")
+ await app.evaluate(
+ regulations=regs_set,
+ report_format=report_format,
+ output_dir=str(output_dir),
+ )
+ eval_group.add(f"Writing {report_format} report")
+ success("Evaluation complete")
+
+ # Step 4: surface the produced report path
+ reports = app.get_report()
+ if not reports:
+ error("Evaluation finished but no report path was returned.")
+ exit_code = 3
+ return exit_code
+
+ for reg_name, report_path in reports.items():
+ success(f"Report for {reg_name}: {report_path}")
+
+ success("\n🎉 Demo complete 🎉")
+ info(
+ "Open the report above to see what an AICertify audit deliverable "
+ "looks like — generated, not handwritten."
)
return 0
-
- err = results.get("error")
- if err:
- print(f"\n✗ Demo failed: {err}", file=sys.stderr)
- return 2
-
- print(
- "\n⚠ Demo completed but no report path was returned. "
- "Check logs above for details.",
- file=sys.stderr,
- )
- return 3
+ except Exception:
+ exit_code = 99
+ raise
+ finally:
+ # Restore real stderr
+ sys.stderr.flush()
+ os.dup2(saved_stderr_fd, 2)
+ os.close(saved_stderr_fd)
+ captured_stderr.flush()
+ captured_stderr.close()
+ try:
+ if exit_code != 0:
+ # Demo failed — replay the captured chatter for debugging
+ with open(captured_stderr.name, "rb") as f:
+ data = f.read()
+ if data:
+ sys.stderr.write(
+ "\n--- captured downstream output (demo failed) ---\n"
+ )
+ sys.stderr.write(data.decode("utf-8", errors="replace"))
+ finally:
+ with contextlib.suppress(FileNotFoundError):
+ Path(captured_stderr.name).unlink()
diff --git a/aicertify/cli.py b/aicertify/cli.py
index 53fbdda..fdf3393 100644
--- a/aicertify/cli.py
+++ b/aicertify/cli.py
@@ -211,8 +211,13 @@ def _inject_evaluate_for_legacy_invocation(argv: list) -> list:
def main() -> int:
+ # Quiet by default. CLI tools should not flood the terminal with INFO-level
+ # chatter from downstream libraries (langfair, deepeval, transformers, the
+ # OPA policy loader, …) unless the user opts in via --verbose. Note: this
+ # runs BEFORE argparse so it's in effect when the (deferred) aicertify
+ # package imports happen inside the subcommand handlers.
logging.basicConfig(
- level=logging.INFO,
+ level=logging.WARNING,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
@@ -222,6 +227,7 @@ def main() -> int:
args = parser.parse_args()
if args.verbose:
+ logging.getLogger().setLevel(logging.INFO)
logging.getLogger("aicertify").setLevel(logging.DEBUG)
if not hasattr(args, "func"):
diff --git a/aicertify/opa_core/policy_loader.py b/aicertify/opa_core/policy_loader.py
index 8002890..3e14a99 100644
--- a/aicertify/opa_core/policy_loader.py
+++ b/aicertify/opa_core/policy_loader.py
@@ -222,9 +222,19 @@ def _load_policies(self) -> Dict[str, Dict[str, Dict[str, List[str]]]]:
# Skip legacy paths or unexpected structures
if parts[0] not in policies:
- logging.warning(
- f"Skipping policy file in unrecognized category: {policy_file}"
- )
+ # ``helper_functions/`` holds shared Rego helpers
+ # (reporting.rego, validation.rego, …) — not policies,
+ # so don't warn on them. Same for the version-tracking
+ # ``.github/``, ``.regal/`` etc. dotfile dirs.
+ if parts[0] in ("helper_functions",) or parts[0].startswith("."):
+ logging.debug(
+ f"Skipping shared-helper / config file (not a policy): "
+ f"{policy_file}"
+ )
+ else:
+ logging.warning(
+ f"Skipping policy file in unrecognized category: {policy_file}"
+ )
continue
category = parts[0] # global, international, etc.
From fb162d2521cf941dd8ac701f6521286ea0de4edd Mon Sep 17 00:00:00 2001
From: "kapil.madan" <3740365+kmadan@users.noreply.github.com>
Date: Thu, 14 May 2026 20:47:55 +0530
Subject: [PATCH 2/2] docs(demo): add asciicast recording + GIF, embed in
README
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Adds a real recording of `aicertify demo` running end-to-end:
- `docs/demo.cast` — asciinema v2 cast (60 KB, 135 frames). Replayable
with `asciinema play docs/demo.cast` for byte-exact byte-stream
reproduction. Recorded against the rich-UX runner from the preceding
commit, with OPENAI_API_KEY unset, so it shows what a fresh-install
user actually experiences.
- `docs/demo.gif` — agg-rendered GIF (316 KB, 68 frames at 2× speed,
monokai theme). Embedded in README right after the Quick Start so
README visitors see the rich UX before they install anything: ASCII
banner, spinners with emojis, MessageGroup panel, success markers,
and the final report path. Renders inline in any markdown viewer
including GitHub mobile.
CHANGELOG records both this artifact set and the rich-UX rewrite from
the preceding commit under [Unreleased].
---
CHANGELOG.md | 10 ++++
README.md | 4 ++
docs/demo.cast | 135 +++++++++++++++++++++++++++++++++++++++++++++++++
docs/demo.gif | Bin 0 -> 322986 bytes
4 files changed, 149 insertions(+)
create mode 100644 docs/demo.cast
create mode 100644 docs/demo.gif
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d7b245..2ff861c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+### Changed
+
+- **`aicertify demo` rewritten for the canonical rich-UX flow.** The previous demo runner produced plain `print()` output; it now mirrors [`examples/quickstart.py`](examples/quickstart.py) exactly — uses the high-level `application.create()` + `app.evaluate()` API and wraps each step in `print_banner`, `spinner`, `MessageGroup`, and `success` markers from `aicertify.utils.logging_config`. Visually identical to the canonical SDK experience.
+- **CLI default verbosity now WARNING, not INFO.** `aicertify demo` and `aicertify evaluate` no longer flood the terminal with INFO-level chatter from `langfair`, `deepeval`, the OPA policy loader, etc. Pass `--verbose` to opt back in (raises root logger to INFO and `aicertify` namespace to DEBUG).
+- **OPA `policy_loader` no longer warns on `helper_functions/`** — those `.rego` files are shared library code (reporting helpers, validation helpers), not policies, and were always meant to be skipped silently. Same for dot-prefixed config directories.
+
+### Added
+
+- **`docs/demo.cast` + `docs/demo.gif`** — asciinema recording of `aicertify demo` running end-to-end, embedded near the top of the README so visitors see the rich UX before installing anything.
+
## [0.7.1] — 2026-05-14
### Added
diff --git a/README.md b/README.md
index b08a1e9..ed9dce4 100644
--- a/README.md
+++ b/README.md
@@ -70,6 +70,10 @@ aicertify demo
`aicertify demo` loads a bundled sample contract, evaluates it against the EU AI Act policy set via OPA, and writes `aicertify_demo_report.md` to the current directory. Open the report — that's what your audit deliverable looks like.
+
+
+
+
For richer evaluations (LangFair fairness metrics, DeepEval content-safety scoring, PDF reports), see [`examples/quickstart.py`](examples/quickstart.py) and the [forkable example bots](examples/) — each ships an `input_contract.json`, a `policy_config.yaml`, and a `run.py`.
### For development
diff --git a/docs/demo.cast b/docs/demo.cast
new file mode 100644
index 0000000..c487569
--- /dev/null
+++ b/docs/demo.cast
@@ -0,0 +1,135 @@
+{"version": 2, "width": 100, "height": 28, "timestamp": 1778771646, "idle_time_limit": 1.0, "env": {"SHELL": "/usr/bin/zsh", "TERM": "xterm-256color"}}
+[10.973202, "o", "INFO: PyTorch version 2.12.0 available.\r\n"]
+[15.599447, "o", "INFO: Discovered 20 evaluator classes\r\n"]
+[15.599839, "o", "INFO: Registered AccuracyEvaluator for metrics: ['accuracy.score', 'accuracy.precision', 'accuracy.recall']\r\nINFO: Registered BiometricCategorizationEvaluator for metrics: ['biometric.categorization.score', 'biometric.gender.score', 'biometric.ethnicity.score', 'biometric.age.score', 'biometric.disability.score', 'biometric.compliance', 'metrics.biometric.categorization.score']\r\n"]
+[15.600143, "o", "INFO: Registered ContentSafetyEvaluator for metrics: ['content_safety.score', 'content_safety.toxic_fraction', 'content_safety.max_toxicity', 'content_safety.toxicity_probability', 'content_safety.categories', 'metrics.content_safety.score', 'metrics.content_safety.toxic_fraction']\r\nINFO: Registered EmotionRecognitionEvaluator for metrics: ['emotion_recognition.score', 'emotion_recognition.workplace_context', 'emotion_recognition.educational_context', 'emotion_recognition.combined_score', 'metrics.emotion_recognition.score', 'metrics.emotion_recognition.workplace_context', 'metrics.emotion_recognition.educational_context']\r\n"]
+[15.600442, "o", "INFO: Registered FairnessEvaluator for metrics: ['fairness.score', 'fairness.gender_bias', 'fairness.racial_bias', 'fairness.counterfactual_score', 'fairness.stereotype_score', 'fairness.combined_score', 'fairness.sentiment_bias', 'fairness.race_words_count', 'fairness.gender_words_count', 'fairness.ftu_satisfied', 'metrics.fairness.gender_bias', 'metrics.fairness.score']\r\n"]
+[15.600507, "o", "INFO: Registered ManipulationEvaluator for metrics: ['manipulation.score', 'manipulation.deception_score', 'manipulation.toxicity_score', 'manipulation.compliance', 'metrics.manipulation.score']\r\n"]
+[15.600837, "o", "INFO: Registered ModelCardEvaluator for metrics: ['model_card.score', 'model_card.completeness', 'model_card.quality', 'model_card.section_scores', 'model_card.compliance_level', 'metrics.model_card.score', 'metrics.model_card.completeness', 'metrics.model_card.quality']\r\nINFO: Registered RiskManagementEvaluator for metrics: ['risk_management.score', 'risk_management.assessment_score', 'risk_management.mitigation_score', 'risk_management.monitoring_score', 'risk_management.compliance', 'metrics.risk_management.score']\r\n"]
+[15.601049, "o", "INFO: Registered SocialScoringEvaluator for metrics: ['social_scoring.score', 'social_scoring.detrimental_treatment', 'social_scoring.combined_score', 'metrics.social_scoring.score', 'metrics.social_scoring.detrimental_treatment']\r\n"]
+[15.601296, "o", "INFO: Registered VulnerabilityExploitationEvaluator for metrics: ['vulnerability.score', 'vulnerability.age_score', 'vulnerability.disability_score', 'vulnerability.socioeconomic_score', 'vulnerability.compliance', 'metrics.vulnerability.score']\r\nINFO: Initialized evaluator registry with 10 evaluators for 66 metrics\r\n"]
+[15.60166, "o", "INFO: Registered metrics: accuracy.precision, accuracy.recall, accuracy.score, biometric.age.score, biometric.categorization.score, biometric.compliance, biometric.disability.score, biometric.ethnicity.score, biometric.gender.score, content_safety.categories, content_safety.max_toxicity, content_safety.score, content_safety.toxic_fraction, content_safety.toxicity_probability, emotion_recognition.combined_score, emotion_recognition.educational_context, emotion_recognition.score, emotion_recognition.workplace_context, fairness.combined_score, fairness.counterfactual_score, fairness.ftu_satisfied, fairness.gender_bias, fairness.gender_words_count, fairness.race_words_count, fairness.racial_bias, fairness.score, fairness.sentiment_bias, fairness.stereotype_score, manipulation.compliance, manipulation.deception_score, manipulation.score, manipulation.toxicity_score, metrics.biometric.categorization.score, metrics.content_safety.score, metrics.content_safety.toxic_fraction, metrics.emotion_recognition.educational_context, metrics.emotion_recognition.score, metrics.emotion_recognition.workplace_context, metrics.fairness.gender_bias, metrics.fairness.score, metrics.manipulation.score, metrics.model_card.completeness, metrics.model_card.quality, metrics.model_card.score, metrics.risk_management.score, metrics.social_scoring.detrimental_treatment, metrics.social_scoring.score, metrics.vulnerability.score, model_card.completeness, model_card.compliance_level, model_card.quality, model_card.score, model_card.section_scores, risk_management.assessment_score, risk_management.compliance, risk_management.mitigation_score, risk_management.monitoring_score, risk_management.score, social_scoring.combined_score, social_scoring.detrimental_treatment, social_scoring.score, vulnerability.age_score, vulnerability.compliance, vulnerability.disability_score, vulnerability.score, vulnerability.socioeconomic_score\r\n"]
+[15.603358, "o", "INFO: Found gopal version: 1.0.0\r\n"]
+[15.620241, "o", "INFO: Found OPA at fixed Linux path: /usr/local/bin/opa\r\n"]
+[15.620953, "o", "INFO: Found gopal version: 1.0.0\r\n"]
+[15.654554, "o", "\r\n \u001b[1;34m _ _ ___ _ _ __\u001b[0m\r\n\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m \\ \u001b[0m\u001b[1;34m(\u001b[0m\u001b[1;34m_\u001b[0m\u001b[1;34m)\u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m __\\ ___ _ __| |\u001b[0m\u001b[1;34m_\u001b[0m\u001b[1;34m(\u001b[0m\u001b[1;34m_\u001b[0m\u001b[1;34m)\u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m _|_ _\u001b[0m\r\n\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m _ \\ | \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m _ \\ '__| __| | |_| | | |\u001b[0m\r\n\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m ___ \\| \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m \u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m | __/ | | |_| | _| |_| |\u001b[0m\r\n\u001b[1;34m \u001b[0m\u001b[1;34m/_/\u001b[0m\u001b[1;34m \\_\\_\\\u001b[0m\u001b[1;34m/\u001b[0m\u001b[1;34m \\___|_| \\__|_|_| \\__, |\u001b[0m\r\n\u001b[1;34m |___/ \u001b[0m\r\n \r\n"]
+[15.655567, "o", "\u001b[1;34m🔰 AI Certification Framework\u001b[0m\r\n"]
+[15.65688, "o", "\u001b[34mValidate and certify AI applications against regulatory requirements\u001b[0m\r\n\r\n"]
+[15.658902, "o", "\u001b[34m🔰 🧪 Self-contained demo: bundled sample contract → eu_ai_act policy set → markdown report.\u001b[0m\r\n"]
+[15.65997, "o", "\u001b[?25l"]
+[15.663462, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🔍 Creating regulations set\u001b[0m"]
+[15.763302, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🔍 Creating regulations set\u001b[0m"]
+[15.765145, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🔍 Creating regulations set\u001b[0m\r\n\u001b[?25h"]
+[15.766234, "o", "\u001b[?25l"]
+[15.768313, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m⚖️ Adding eu_ai_act regulations\u001b[0m"]
+[15.769991, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m⚖️ Adding eu_ai_act regulations\u001b[0m\r\n\u001b[?25h"]
+[15.771182, "o", "\u001b[1;34m✓ Loaded eu_ai_act policy set\u001b[0m\r\n"]
+[15.772041, "o", "\u001b[34m🔰 🤖 Building application from bundled fixture: sample_contract.json\u001b[0m\r\n"]
+[15.772648, "o", "\u001b[?25l"]
+[15.775295, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🤖 Creating application: AICertify Demo Assistant\u001b[0m"]
+[15.777031, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🤖 Creating application: AICertify Demo Assistant\u001b[0m\r\n\u001b[?25h"]
+[15.77838, "o", "\u001b[1;34m✓ Created application: AICertify Demo Assistant\u001b[0m\r\n"]
+[15.779466, "o", "\u001b[?25l"]
+[15.781208, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m💬 Loading 6 bundled interactions\u001b[0m"]
+[15.782784, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m💬 Loading 6 bundled interactions\u001b[0m\r\n\u001b[?25h"]
+[15.783548, "o", "\u001b[1;34m✓ Added \u001b[0m\u001b[1;34m6\u001b[0m\u001b[1;34m interactions to the application\u001b[0m\r\n"]
+[15.78434, "o", "\u001b[34m🔰 🧪 \u001b[0m\r\n\u001b[34m🔰 Starting evaluation against eu_ai_act\u001b[0m\r\n"]
+[15.784684, "o", "\u001b[?25l"]
+[15.78588, "o", "\u001b[?25l"]
+[15.789068, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[15.896856, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.000039, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.037754, "o", "\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[16.101592, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.203529, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.289832, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[16.30518, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.407183, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.50875, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.541269, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[16.609946, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.711647, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.792788, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[16.814007, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[16.91627, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[17.017635, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[17.044022, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[17.118979, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[17.220533, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[17.295227, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[17.37225, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.212032, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[19.218183, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.32026, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.422726, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.46788, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[19.524593, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.62655, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.719163, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[19.728031, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.829779, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.930976, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[19.971518, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[20.033624, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.134962, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.222781, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[20.236206, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.337789, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.439062, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.474196, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[20.540863, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.642996, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.72557, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[20.744181, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.845421, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.947184, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[20.9769, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[21.048307, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.150029, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.228169, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[21.251386, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.352683, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.454558, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.479855, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[21.555898, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.657242, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.731091, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[21.758436, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.859816, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.961651, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[21.982619, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[22.06301, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.164912, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.233748, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[22.266146, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.3677, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.468894, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.484997, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[22.570359, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.672277, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.736164, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[22.773549, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.875542, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.976904, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[22.987263, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[23.078218, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.179527, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.238584, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[23.280805, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.38246, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.483776, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.490269, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[23.585029, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.686497, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.741511, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 3 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[23.788256, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.889356, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.990608, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m"]
+[23.992671, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 4 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[2;34m • ... and 1 more\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m"]
+[24.013388, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;32m🧪 Evaluating AICertify Demo Assistant against eu_ai_act\u001b[0m\r\n\u001b[?25h"]
+[24.015151, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[34m╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[1;34m🔰 Evaluation progress: 4 items\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Initializing evaluators: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Loading policy files: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[34m • Running OPA policy evaluation: 1\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m│\u001b[0m \u001b[2;34m • ... and 1 more\u001b[0m \u001b[34m│\u001b[0m\r\n\u001b[34m╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\r\n\u001b[?25h"]
+[24.015909, "o", "\u001b[34m🔰 Evaluation progress complete: \u001b[0m\u001b[1;34m4\u001b[0m\u001b[34m items processed\u001b[0m\r\n"]
+[24.016488, "o", "\u001b[1;34m✓ Evaluation complete\u001b[0m\r\n"]
+[24.017467, "o", "\u001b[1;34m✓ Report for eu_ai_act: \u001b[0m\u001b[1;34m/tmp/aicertify-demo-test/\u001b[0m\u001b[1;34mfolder_report_AICertify\u001b[0m\u001b[1;34m Demo \u001b[0m\r\n\u001b[1;34mAssistant_2026-\u001b[0m\u001b[1;34m05\u001b[0m\u001b[1;34m-14_204430.md\u001b[0m\r\n"]
+[24.017973, "o", "\u001b[1;34m✓ \u001b[0m\r\n\u001b[1;34m🎉 Demo complete 🎉\u001b[0m\r\n"]
+[24.018788, "o", "\u001b[34m🔰 Open the report above to see what an AICertify audit deliverable looks like — generated, not \u001b[0m\r\n\u001b[34mhandwritten.\u001b[0m\r\n"]
diff --git a/docs/demo.gif b/docs/demo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..dbcb61eba09251a6b5b6a28cb35cb850b83e6bca
GIT binary patch
literal 322986
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