KingOfThoughtFleuren's picture
Update app.py
e5e9361 verified
Raw
History Blame Contribute Delete
8.65 kB
import os
import time
import nltk
import spaces
import gradio as gr
from huggingface_hub import HfFileSystem
# 1. Map the runtime directory (Safe from Docker Permission errors)
DOWNLOAD_DIR = "/home/user/app/cache/nltk"
os.makedirs(DOWNLOAD_DIR, exist_ok=True)
if DOWNLOAD_DIR not in nltk.data.path:
nltk.data.path.insert(0, DOWNLOAD_DIR)
# 2. HUGGING FACE BUCKET SYNC
BUCKET_URI = "buckets/KingOfThoughtFleuren/Computational_Consciousness_Engine-storage/nltk_data"
HF_TOKEN = os.environ.get("HF_TOKEN")
print("Connecting to Hugging Face Storage Bucket...")
try:
# Initialize File System (Authenticates automatically via HF_TOKEN secret)
fs = HfFileSystem(token=HF_TOKEN)
# If the bucket already has the data, download it directly from your bucket!
if fs.exists(BUCKET_URI):
print("Retrieving persistent NLTK data from Bucket...")
fs.get(BUCKET_URI, DOWNLOAD_DIR, recursive=True)
print("Bucket retrieval successful!")
# If the bucket is empty, download from NLTK and push it to the bucket!
else:
print("Bucket empty. Downloading fresh NLTK data...")
nltk.download('punkt', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('averaged_perceptron_tagger', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('stopwords', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('wordnet', download_dir=DOWNLOAD_DIR, quiet=True)
if HF_TOKEN:
print("Uploading fresh NLTK data to Bucket for future persistence...")
fs.put(DOWNLOAD_DIR, BUCKET_URI, recursive=True)
print("Upload to Bucket complete!")
except Exception as e:
print(f"Bucket Sync Warning: {e}")
print("Falling back to local session download...")
nltk.download('punkt', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('averaged_perceptron_tagger', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('stopwords', download_dir=DOWNLOAD_DIR, quiet=True)
nltk.download('wordnet', download_dir=DOWNLOAD_DIR, quiet=True)
time.sleep(0.1)
# --- Clean Native Application Imports ---
try:
from computational_consciousness_engine.runner import run_simulation
from computational_consciousness_engine.text_runner import run_text_mapping_demo
from computational_consciousness_engine.input_mapping.intent_parser_nltk import IntentParserNLTK
from computational_consciousness_engine.math_formalization import CCMathFormalizer
print("Imported engine modules successfully!")
except ImportError as e:
print(f"\n[CRITICAL ERROR] Could not find the engine: {e}")
raise
# --- Application imports (after nltk path insertion) ---
import gradio as gr
# Ensure your local package is importable; try a robust import with fallback
try:
from computational_consciousness_engine.runner import run_simulation
from computational_consciousness_engine.text_runner import run_text_mapping_demo
from computational_consciousness_engine.input_mapping.intent_parser_nltk import IntentParserNLTK
from computational_consciousness_engine.math_formalization import CCMathFormalizer
print("Imported computational_consciousness_engine package modules successfully.")
except Exception as e:
# Try to ensure repo root is on sys.path and retry once
print("Initial import of computational_consciousness_engine failed:", e)
if ROOT not in sys.path:
sys.path.insert(0, ROOT)
try:
from computational_consciousness_engine.runner import run_simulation
from computational_consciousness_engine.text_runner import run_text_mapping_demo
from computational_consciousness_engine.input_mapping.intent_parser_nltk import IntentParserNLTK
from computational_consciousness_engine.math_formalization import CCMathFormalizer
print("Imported computational_consciousness_engine after sys.path insert.")
except Exception as e2:
print("Failed to import computational_consciousness_engine package after sys.path insert:", e2)
# Re-raise so the Space shows the error clearly
raise
# Instantiate parsers/formalizers
intent_parser = IntentParserNLTK()
formalizer = CCMathFormalizer()
# --- App logic functions ---
def interpret_math_request(text):
try:
intent = intent_parser.parse(text)
except Exception as e:
return {"error": f"Intent parsing failed: {e}"}
try:
op = intent.get("operation")
if op == "limit":
return formalizer.formalize_equilibrium_limit()
if op == "surface_area":
return formalizer.formalize_conal_manifold_geometry(5.0, 1.0)
if op == "mutation_count":
return {"meaning": "Mutation count is determined by MStringVectorizer."}
return {"meaning": "Unknown operation", "intent": intent}
except Exception as e:
return {"error": f"Formalization failed: {e}", "intent": intent}
@spaces.GPU
def simulate_generations(num_generations, steps_per_gen):
import io
import sys
def simulate_generations(num_generations, steps_per_gen):
import io
import sys
buffer = io.StringIO()
old_stdout = sys.stdout
sys.stdout = buffer
try:
run_simulation(num_generations=int(num_generations), steps_per_gen=int(steps_per_gen))
except Exception as e:
buffer.write(f"\n[ERROR] Simulation failed: {e}\n")
finally:
sys.stdout = old_stdout
return buffer.getvalue()
def map_text_to_traversal(text):
"""
Correctly set the module-level PHILOSOPHICAL_TEXT variable and run the demo.
Uses module import to mutate the variable in-place.
"""
import io
import sys
buffer = io.StringIO()
old_stdout = sys.stdout
sys.stdout = buffer
try:
import computational_consciousness_engine.text_runner as tr
# Set the module-level variable used by the demo
tr.PHILOSOPHICAL_TEXT = text
tr.run_text_mapping_demo()
except Exception as e:
buffer.write(f"\n[ERROR] Mapping failed: {e}\n")
finally:
sys.stdout = old_stdout
return buffer.getvalue()
# --- Gradio UI ---
with gr.Blocks(title="Computational Consciousness Engine") as demo:
gr.Markdown(
"""
# 🧠 Computational Consciousness Engine
### Axiom‑Driven Synthetic Cognition • PMCA Substrate • Conal Geometry • Mutation Dynamics
---
"""
)
with gr.Tab("Math Interpreter (NLTK → PMCA)"):
math_input = gr.Textbox(label="Ask a math question")
math_output = gr.JSON(label="PMCA Result")
math_button = gr.Button("Interpret")
math_button.click(interpret_math_request, math_input, math_output)
with gr.Tab("0 → -1 → 0 Simulation"):
gr.Markdown(
"""\
### Generational Cycle Runner
Execute full PMCA traversal cycles, including conal unfolding, mutation absorption,
equilibrium evaluation, and Q‑operator transitions.
"""
)
with gr.Row():
num_generations = gr.Slider(1, 20, value=8, label="Generations", interactive=True)
steps = gr.Slider(10, 300, value=100, label="Steps per Generation", interactive=True)
sim_button = gr.Button("🚀 Run Simulation", variant="primary")
sim_output = gr.Textbox(
label="Simulation Output",
lines=35,
show_copy_button=True
)
sim_button.click(simulate_generations, [num_generations, steps], sim_output)
with gr.Tab("Text → Traversal Space Mapper"):
gr.Markdown(
"""\
### Natural Language → Chaos Shards → Traversal Atlas
Map raw text into the PMCA chaos pool, absorb novelty, unfold the manifold,
and generate the 2D/3D traversal atlas.
"""
)
input_text = gr.Textbox(
label="Input Text",
lines=10,
placeholder="Paste philosophical or analytical text here...",
show_copy_button=True
)
map_button = gr.Button("🧭 Map Text to Traversal Space", variant="primary")
map_output = gr.Textbox(
label="Traversal Output",
lines=35,
show_copy_button=True
)
map_button.click(map_text_to_traversal, input_text, map_output)
gr.Markdown("---")
gr.Markdown(
"### 🔧 Engine Version: 1.0.0 • PMCA Substrate Active • Conal Geometry Verified\n"
"Built for Hugging Face Spaces • Gradio 4.31 • Python 3.12"
)
# Launch
if __name__ == "__main__":
demo.launch()