RFTSystems's picture
Update app.py
d97d368 verified
import time
import json
import hashlib
import platform
import os
from datetime import datetime
import numpy as np
import gradio as gr
APP_TITLE = "Coherent Compute Engine"
# -----------------------------
# Core coherent update (NumPy)
# -----------------------------
def coherent_step(Psi, E, L):
phase = 0.997 * Psi + 0.003 * E
drive = np.tanh(phase)
Psi = 0.999 * Psi + 0.001 * drive
E = 0.995 * E + 0.004 * Psi
L = 0.998 * L + 0.001 * (Psi * E)
return Psi, E, L
# -----------------------------
# Metrics
# -----------------------------
def compute_coherence(a, b):
num = float(np.dot(a, b))
den = float(np.linalg.norm(a) * np.linalg.norm(b) + 1e-9)
return float(abs(num / den))
# -----------------------------
# Optional baseline (context only, safety-capped)
# -----------------------------
def python_loop_baseline(n, steps, cap=50_000):
n_cap = min(int(n), int(cap))
x = [0.5] * n_cap
t0 = time.time()
for _ in range(int(steps)):
for i in range(n_cap):
x[i] = 0.999 * x[i] + 0.001
elapsed = time.time() - t0
items = n_cap * int(steps)
return items / elapsed / 1e9, n_cap
# -----------------------------
# Receipt hashing
# IMPORTANT: sha256 is computed over receipt JSON WITHOUT the sha256 field
# -----------------------------
def compute_receipt_sha256(receipt_obj: dict) -> str:
obj = dict(receipt_obj)
obj.pop("sha256", None)
payload = json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
return hashlib.sha256(payload).hexdigest()
# -----------------------------
# Main engine
# -----------------------------
def run_engine(n_osc, steps, include_baselines):
n = int(n_osc)
steps = int(steps)
Psi = np.random.rand(n).astype(np.float32)
E = np.random.rand(n).astype(np.float32)
L = np.random.rand(n).astype(np.float32)
# sample slice for coherence proxy (keeps runtime sane)
sample = min(n, 200_000)
Psi_start = Psi[:sample].copy()
t0 = time.time()
for _ in range(steps):
Psi, E, L = coherent_step(Psi, E, L)
elapsed = time.time() - t0
Psi_end = Psi[:sample].copy()
coherence = compute_coherence(Psi_start, Psi_end)
mean_energy = float(np.mean(E))
items = n * steps
throughput_items = items / elapsed
throughput_b = throughput_items / 1e9
result = {
"Throughput (B items/s)": f"{throughput_b:.3f}",
"Throughput (items/s)": f"{int(throughput_items):,}",
"Coherence (|C|)": f"{coherence:.5f}",
"Mean Energy": f"{mean_energy:.5f}",
"Elapsed Time (s)": f"{elapsed:.2f}",
"Oscillators": f"{n:,}",
"Steps": f"{steps}",
"Engine": "numpy",
"CPU": platform.processor() or "",
"Cores Available": os.cpu_count() or 0,
}
if include_baselines:
py_b, py_ncap = python_loop_baseline(n, steps)
result.update({
"Baseline: numpy (B items/s)": f"{throughput_b:.3f}",
"Baseline: python_loop (B items/s)": f"{py_b:.3f}",
"Baseline: python_loop items measured": f"{py_ncap:,}",
"Speedup vs python_loop (x)": f"{(throughput_b / max(py_b, 1e-12)):.1f}",
"Speedup vs numpy (x)": f"{(throughput_b / max(throughput_b, 1e-12)):.2f}",
"Note": "Baselines are context-only; python loop is safety-capped and measured live."
})
receipt = {
"timestamp_utc": datetime.utcnow().isoformat() + "Z",
"app": APP_TITLE,
"results": result,
"platform": platform.platform(),
"python": platform.python_version(),
}
receipt["sha256"] = compute_receipt_sha256(receipt)
os.makedirs("receipts", exist_ok=True)
fname = f"receipts/receipt_{datetime.utcnow().strftime('%Y-%m-%dT%H-%M-%S')}.json"
with open(fname, "w", encoding="utf-8") as f:
json.dump(receipt, f, indent=2, ensure_ascii=False)
result["Receipt SHA-256 (in file)"] = receipt["sha256"]
# Return pretty results + receipt file
return json.dumps(result, indent=2), fname
# -----------------------------
# Receipt verifier
# -----------------------------
def verify_receipt(uploaded_file):
if uploaded_file is None:
return "No file uploaded.", ""
path = uploaded_file.name if hasattr(uploaded_file, "name") else str(uploaded_file)
try:
with open(path, "r", encoding="utf-8") as f:
receipt = json.load(f)
except Exception as e:
return f"Invalid JSON file: {e}", ""
claimed = str(receipt.get("sha256", "")).strip()
computed = compute_receipt_sha256(receipt)
ok = (claimed != "" and claimed.lower() == computed.lower())
verdict = {
"verified": bool(ok),
"claimed_sha256": claimed,
"computed_sha256": computed,
"note": "Verified means: sha256(receipt_without_sha256_field) matches the sha256 stored in the receipt."
}
banner = "✅ Receipt verified (SHA-256 match)" if ok else "❌ Receipt FAILED verification (SHA-256 mismatch)"
return banner, json.dumps(verdict, indent=2)
# -----------------------------
# UI
# -----------------------------
with gr.Blocks(title=APP_TITLE) as demo:
gr.Markdown(
f"""
# {APP_TITLE}
Everything you see below is computed **right now**, on this machine.
**What an “item” is**
• One coherent state update of **[Ψ, E, L]** per oscillator per step
**What you get**
• Real throughput (items/sec)
• Stability proxy (|C|)
• Energy behaviour
• A downloadable **receipt with SHA-256** (verification-first)
• A built-in **receipt verifier** (upload → verify → done)
No precomputed results. No estimates.
"""
)
with gr.Tabs():
with gr.Tab("Run"):
n_slider = gr.Slider(250_000, 8_000_000, value=6_400_000, step=250_000,
label="Number of Oscillators")
steps_slider = gr.Slider(50, 1_000, value=650, step=25,
label="Simulation Steps")
baseline_toggle = gr.Checkbox(
label="Include baselines (context only)",
value=True
)
run_btn = gr.Button("Run Engine")
output = gr.Code(label="Results", language="json")
receipt_file = gr.File(label="Receipt (download)")
run_btn.click(
fn=run_engine,
inputs=[n_slider, steps_slider, baseline_toggle],
outputs=[output, receipt_file]
)
with gr.Tab("Verify receipt"):
gr.Markdown(
"""
Upload a receipt JSON generated by this Space.
This verifier recomputes the SHA-256 (over the receipt JSON **without** the `sha256` field) and checks it matches the stored value.
"""
)
up = gr.File(label="Upload receipt (.json)")
verify_btn = gr.Button("Verify")
banner = gr.Textbox(label="Verification result", interactive=False)
detail = gr.Code(label="Details", language="json")
verify_btn.click(fn=verify_receipt, inputs=[up], outputs=[banner, detail])
demo.launch()