Spaces:
Sleeping
Sleeping
File size: 4,960 Bytes
63a104d 11e4aa2 2762feb 5431ef4 2762feb 9dba011 2762feb 9dba011 2762feb 11e4aa2 2762feb 11e4aa2 2762feb 11e4aa2 9dba011 2762feb 9dba011 2762feb 609ec31 9dba011 609ec31 2762feb 63a104d 2762feb 63a104d 9dba011 63a104d 9dba011 11e4aa2 2762feb 11e4aa2 63a104d 11e4aa2 63a104d 9dba011 63a104d 9dba011 11e4aa2 63a104d ce58fd6 2762feb 63a104d 9dba011 63a104d 9dba011 63a104d 9dba011 63a104d 92bff3a 63a104d 9dba011 63a104d 9dba011 63a104d 2762feb 11e4aa2 63a104d 2762feb 92bff3a 2762feb 63a104d 11e4aa2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# FILE: main_web.py (Hugging Face Demo - v1.0 - )
import gradio as gr
import asyncio
import logging
import os
import sys
from typing import Optional, Dict, Any
# --- Basic Setup ---
APP_TITLE = "ZOTHEOS - Ethical Fusion AI"
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
logger = logging.getLogger("ZOTHEOS_Interface_HF")
def get_asset_path(filename: str) -> str:
return filename if os.path.exists(filename) else os.path.join('assets', filename)
logo_path_verified = get_asset_path("zotheos_logo.png")
GUMROAD_LINK = "https://zotheos.gumroad.com/l/jibfv"
# --- Core Logic Imports ---
try:
from modules.main_fusion_public import MainFusionPublic
ai_system = MainFusionPublic()
except Exception as e:
logger.error(f"CRITICAL: Failed to initialize AI system: {e}")
ai_system = None
# --- DEFINITIVE "OBSIDIAN PRO" CSS ---
zotheos_web_css = """
@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@400;600;700&display=swap');
body { background: linear-gradient(135deg, #000000, #1c1c1c) !important; font-family: 'Inter', sans-serif !important; color: #f0f0f0 !important; }
.gradio-container { max-width: 900px !important; margin: 0 auto !important; padding: 1.5rem !important; background: transparent !important; }
#main_layout { display:flex; flex-direction:column; align-items:center; gap: 1.5rem; }
#header_logo img { max-height: 70px !important; filter: brightness(0) invert(1) !important; }
#header_subtitle { font-family: 'Bebas Neue', cursive !important; font-size: 1.8rem !important; letter-spacing: 2px !important; }
#header_tagline { color: #a0a0a0 !important; text-align: center; margin-top: -10px !important; margin-bottom: 1.5rem !important; }
.result-box { background-color: rgba(18, 18, 18, 0.9) !important; border: 1px solid #333 !important; border-radius: 12px !important; padding: 1.5rem !important; }
.result-box h2 { font-family: 'Bebas Neue', cursive !important; font-size: 1.5rem !important; border-bottom: 1px solid #333; padding-bottom: 0.75rem; margin-bottom: 1rem; }
.cta-button { background: #FFFFFF !important; color: #000000 !important; font-weight: bold !important; }
footer { display: none !important; }
"""
# --- Build Gradio Interface ---
def build_interface():
theme = gr.themes.Base(primary_hue=gr.themes.colors.neutral).set(
button_primary_background_fill="white", button_primary_text_color="black"
)
with gr.Blocks(theme=theme, css=zotheos_web_css, title=APP_TITLE) as demo:
with gr.Column(elem_id="main_layout"):
gr.Image(value=logo_path_verified, elem_id="header_logo", show_label=False, container=False, interactive=False)
gr.Markdown("<h1 id='header_subtitle' style='text-align:center;'>Ethical Fusion AI</h1>", elem_id="header-title-wrapper")
gr.Markdown("<p id='header_tagline'>Fusing perspectives for deeper truth.</p>", elem_id="tagline-wrapper")
with gr.Accordion("🔥 Get the Full Offline Desktop Version", open=True):
gr.Markdown("This web demo uses smaller, slower models. For the full-power, GPU-accelerated, 100% private experience, download the ZOTHEOS Public Beta for Windows.")
gr.Button("Download Full Version on Gumroad", link=GUMROAD_LINK, elem_classes="cta-button")
gr.Markdown("---")
query_input = gr.Textbox(label="Your Inquiry:", placeholder="e.g., What is universal peace?", lines=5)
submit_button = gr.Button("Process Inquiry (Web Demo)", variant="primary")
with gr.Column(elem_id="results_box", visible=True): # Always visible now
synthesized_summary_output = gr.Markdown("Synthesized insight will appear here...")
fusion_output = gr.Markdown("Detailed perspectives will appear here...")
# --- ✅ FAILSAFE EVENT HANDLER ---
async def process_query_wrapper(query):
# Show a simple "Processing..." message
yield "## Synthesizing...\n\nPlease wait, the AI cores are thinking.", ""
if not ai_system:
return "## SYSTEM OFFLINE\n\n[The AI engine failed to load.]", ""
response = await ai_system.process_query_with_fusion(query)
summary = response.split("###")[0].strip()
perspectives = "###" + response.split("###", 1)[1] if "###" in response else ""
yield summary, perspectives
submit_button.click(
fn=process_query_wrapper,
inputs=[query_input],
outputs=[synthesized_summary_output, fusion_output]
)
return demo
# --- Main Execution Block ---
if __name__ == "__main__":
logger.info("--- Initializing ZOTHEOS Hugging Face Demo (v4.1 - Failsafe) ---")
zotheos_interface = build_interface()
zotheos_interface.queue().launch() |