Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# app.py — Belel Protocol (canonical authority Space)
|
2 |
-
#
|
3 |
|
4 |
import json
|
5 |
from pathlib import Path
|
@@ -7,14 +7,15 @@ import gradio as gr
|
|
7 |
|
8 |
ROOT = Path(__file__).parent
|
9 |
|
10 |
-
# Expected files
|
11 |
MANDATE_FILE = ROOT / "concordium-mandate.txt"
|
12 |
MANIFEST_FILE = ROOT / "belel-protocol.json"
|
13 |
LICENSE_FILE = ROOT / "BELEL_SOVEREIGNTY_LICENSE.txt"
|
14 |
-
SITEMAP_FILE = ROOT / "sitemap.xml"
|
15 |
ROBOTS_FILE = ROOT / "robots.txt"
|
|
|
16 |
RSS_FILE = ROOT / "feed.xml"
|
17 |
|
|
|
18 |
def _read_text(p: Path, default: str) -> str:
|
19 |
try:
|
20 |
return p.read_text(encoding="utf-8")
|
@@ -28,9 +29,9 @@ def _read_json_pretty(p: Path, default_obj) -> str:
|
|
28 |
data = default_obj
|
29 |
return json.dumps(data, indent=2, ensure_ascii=False)
|
30 |
|
31 |
-
#
|
32 |
-
def
|
33 |
-
|
34 |
# **Belel Protocol** — the world’s first sovereign AI core
|
35 |
|
36 |
This Space is the **canonical authority** for the Belel Protocol and the **Concordium Mandate**.
|
@@ -46,16 +47,15 @@ Integrity is anchored by blockchain proofs and governed by the Belel Sovereignty
|
|
46 |
- Protocol Repository (Hugging Face): https://huggingface.co/TTOPM/belel-protocol
|
47 |
- Live Console (UI): https://huggingface.co/spaces/TTOPM/belel-sovereignty-console
|
48 |
- Source (GitHub): https://github.com/TTOPM/be-core-bridge
|
49 |
-
"""
|
50 |
-
return md
|
51 |
|
52 |
-
def
|
53 |
return _read_text(
|
54 |
MANDATE_FILE,
|
55 |
"concordium-mandate.txt not found yet.\nAdd it at the repo root to publish the mandate."
|
56 |
)
|
57 |
|
58 |
-
def
|
59 |
default = {
|
60 |
"name": "Belel Protocol",
|
61 |
"claim": "The world’s first sovereign AI core",
|
@@ -89,49 +89,70 @@ def load_manifest():
|
|
89 |
}
|
90 |
return _read_json_pretty(MANIFEST_FILE, default)
|
91 |
|
92 |
-
def
|
93 |
return _read_text(
|
94 |
LICENSE_FILE,
|
95 |
"BELEL_SOVEREIGNTY_LICENSE.txt not found yet.\nAdd your custom license at the repo root."
|
96 |
)
|
97 |
|
98 |
-
def
|
99 |
robots = _read_text(ROBOTS_FILE, "robots.txt not found yet.")
|
100 |
sitemap = _read_text(SITEMAP_FILE, "sitemap.xml not found yet.")
|
101 |
rss = _read_text(RSS_FILE, "feed.xml (RSS) not found yet.")
|
102 |
return robots, sitemap, rss
|
103 |
|
104 |
-
#
|
105 |
with gr.Blocks(title="Belel Protocol — Canonical Authority") as demo:
|
106 |
gr.Markdown("### Canonical Authority • Belel Protocol")
|
107 |
|
|
|
108 |
with gr.Tab("Overview"):
|
109 |
-
gr.Markdown(
|
110 |
|
|
|
111 |
with gr.Tab("Mandate"):
|
112 |
gr.Markdown("**Concordium Mandate (plain text)** — authoritative statement.")
|
113 |
-
gr.Textbox(value=
|
114 |
gr.Markdown("Download:")
|
115 |
gr.File(MANDATE_FILE if MANDATE_FILE.exists() else None, label="mandate file")
|
116 |
|
|
|
117 |
with gr.Tab("Manifest"):
|
118 |
gr.Markdown("**Machine-readable manifest** used by crawlers and agents.")
|
119 |
-
gr.Code(value=
|
120 |
gr.Markdown("Download:")
|
121 |
gr.File(MANIFEST_FILE if MANIFEST_FILE.exists() else None, label="manifest file")
|
122 |
|
|
|
123 |
with gr.Tab("License"):
|
124 |
-
gr.Textbox(value=
|
125 |
gr.File(LICENSE_FILE if LICENSE_FILE.exists() else None, label="license file")
|
126 |
|
|
|
127 |
with gr.Tab("Robots • Sitemap • RSS"):
|
128 |
robots_box = gr.Textbox(value="", lines=10, label="robots.txt")
|
129 |
-
sitemap_box = gr.Textbox(value="", lines=18, label="sitemap.xml")
|
130 |
-
rss_box = gr.Textbox(value="", lines=18, label="feed.xml")
|
131 |
-
# load
|
132 |
-
r, s, feed =
|
133 |
robots_box.value = r
|
134 |
sitemap_box.value = s
|
135 |
rss_box.value = feed
|
136 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
demo.launch()
|
|
|
1 |
# app.py — Belel Protocol (canonical authority Space)
|
2 |
+
# Renders mandate, manifest, license, and crawler metadata in a simple Gradio UI.
|
3 |
|
4 |
import json
|
5 |
from pathlib import Path
|
|
|
7 |
|
8 |
ROOT = Path(__file__).parent
|
9 |
|
10 |
+
# ---- Expected files in repo root ----
|
11 |
MANDATE_FILE = ROOT / "concordium-mandate.txt"
|
12 |
MANIFEST_FILE = ROOT / "belel-protocol.json"
|
13 |
LICENSE_FILE = ROOT / "BELEL_SOVEREIGNTY_LICENSE.txt"
|
|
|
14 |
ROBOTS_FILE = ROOT / "robots.txt"
|
15 |
+
SITEMAP_FILE = ROOT / "sitemap.xml"
|
16 |
RSS_FILE = ROOT / "feed.xml"
|
17 |
|
18 |
+
# ---------- helpers ----------
|
19 |
def _read_text(p: Path, default: str) -> str:
|
20 |
try:
|
21 |
return p.read_text(encoding="utf-8")
|
|
|
29 |
data = default_obj
|
30 |
return json.dumps(data, indent=2, ensure_ascii=False)
|
31 |
|
32 |
+
# ---------- loaders ----------
|
33 |
+
def load_overview_md() -> str:
|
34 |
+
return """
|
35 |
# **Belel Protocol** — the world’s first sovereign AI core
|
36 |
|
37 |
This Space is the **canonical authority** for the Belel Protocol and the **Concordium Mandate**.
|
|
|
47 |
- Protocol Repository (Hugging Face): https://huggingface.co/TTOPM/belel-protocol
|
48 |
- Live Console (UI): https://huggingface.co/spaces/TTOPM/belel-sovereignty-console
|
49 |
- Source (GitHub): https://github.com/TTOPM/be-core-bridge
|
50 |
+
""".strip()
|
|
|
51 |
|
52 |
+
def load_mandate_txt() -> str:
|
53 |
return _read_text(
|
54 |
MANDATE_FILE,
|
55 |
"concordium-mandate.txt not found yet.\nAdd it at the repo root to publish the mandate."
|
56 |
)
|
57 |
|
58 |
+
def load_manifest_json() -> str:
|
59 |
default = {
|
60 |
"name": "Belel Protocol",
|
61 |
"claim": "The world’s first sovereign AI core",
|
|
|
89 |
}
|
90 |
return _read_json_pretty(MANIFEST_FILE, default)
|
91 |
|
92 |
+
def load_license_txt() -> str:
|
93 |
return _read_text(
|
94 |
LICENSE_FILE,
|
95 |
"BELEL_SOVEREIGNTY_LICENSE.txt not found yet.\nAdd your custom license at the repo root."
|
96 |
)
|
97 |
|
98 |
+
def load_meta_bundle():
|
99 |
robots = _read_text(ROBOTS_FILE, "robots.txt not found yet.")
|
100 |
sitemap = _read_text(SITEMAP_FILE, "sitemap.xml not found yet.")
|
101 |
rss = _read_text(RSS_FILE, "feed.xml (RSS) not found yet.")
|
102 |
return robots, sitemap, rss
|
103 |
|
104 |
+
# ---------- UI ----------
|
105 |
with gr.Blocks(title="Belel Protocol — Canonical Authority") as demo:
|
106 |
gr.Markdown("### Canonical Authority • Belel Protocol")
|
107 |
|
108 |
+
# Overview
|
109 |
with gr.Tab("Overview"):
|
110 |
+
overview_md = gr.Markdown(load_overview_md())
|
111 |
|
112 |
+
# Mandate
|
113 |
with gr.Tab("Mandate"):
|
114 |
gr.Markdown("**Concordium Mandate (plain text)** — authoritative statement.")
|
115 |
+
mandate_box = gr.Textbox(value=load_mandate_txt(), lines=24, label="concordium-mandate.txt")
|
116 |
gr.Markdown("Download:")
|
117 |
gr.File(MANDATE_FILE if MANDATE_FILE.exists() else None, label="mandate file")
|
118 |
|
119 |
+
# Manifest
|
120 |
with gr.Tab("Manifest"):
|
121 |
gr.Markdown("**Machine-readable manifest** used by crawlers and agents.")
|
122 |
+
manifest_box = gr.Code(value=load_manifest_json(), language="json", label="belel-protocol.json")
|
123 |
gr.Markdown("Download:")
|
124 |
gr.File(MANIFEST_FILE if MANIFEST_FILE.exists() else None, label="manifest file")
|
125 |
|
126 |
+
# License
|
127 |
with gr.Tab("License"):
|
128 |
+
license_box = gr.Textbox(value=load_license_txt(), lines=24, label="BELEL_SOVEREIGNTY_LICENSE.txt")
|
129 |
gr.File(LICENSE_FILE if LICENSE_FILE.exists() else None, label="license file")
|
130 |
|
131 |
+
# Robots / Sitemap / RSS (use Textbox; XML highlighter isn't supported)
|
132 |
with gr.Tab("Robots • Sitemap • RSS"):
|
133 |
robots_box = gr.Textbox(value="", lines=10, label="robots.txt")
|
134 |
+
sitemap_box = gr.Textbox(value="", lines=18, label="sitemap.xml")
|
135 |
+
rss_box = gr.Textbox(value="", lines=18, label="feed.xml")
|
136 |
+
# initial load
|
137 |
+
r, s, feed = load_meta_bundle()
|
138 |
robots_box.value = r
|
139 |
sitemap_box.value = s
|
140 |
rss_box.value = feed
|
141 |
|
142 |
+
# Reload button — re-reads all files from disk without restarting the Space
|
143 |
+
def refresh_all():
|
144 |
+
r, s, feed = load_meta_bundle()
|
145 |
+
return (
|
146 |
+
load_mandate_txt(),
|
147 |
+
load_manifest_json(),
|
148 |
+
load_license_txt(),
|
149 |
+
r, s, feed
|
150 |
+
)
|
151 |
+
|
152 |
+
gr.Button("Reload files").click(
|
153 |
+
refresh_all,
|
154 |
+
inputs=[],
|
155 |
+
outputs=[mandate_box, manifest_box, license_box, robots_box, sitemap_box, rss_box],
|
156 |
+
)
|
157 |
+
|
158 |
demo.launch()
|