Download app.py from ZENLLC/Zeph: direct link, hf CLI and curl.
- Browser
- Download file 3.66 kB
-
https://huggingface.co/spaces/ZENLLC/Zeph/resolve/main/app.py
- Command line
-
hf download hf://spaces/ZENLLC/Zeph/app.py
-
curl -L -o app.py https://huggingface.co/spaces/ZENLLC/Zeph/resolve/main/app.py
3.66 kB
| import gradio as gr, json, plotly.graph_objects as go | |
| from transformers import pipeline | |
| from PIL import Image, ImageDraw | |
| # ---------------------------- | |
| # Load instruction-tuned text model (fast on CPU) | |
| # ---------------------------- | |
| chat_model = pipeline("text2text-generation", model="google/flan-t5-small", device=-1) | |
| def query_llm(prompt, history, persona): | |
| # History is ignored here because flan-t5 is single-turn | |
| if persona != "Default": | |
| prompt = f"As a {persona}, {prompt}" | |
| out = chat_model(prompt, max_new_tokens=150) | |
| return out[0]["generated_text"].strip() | |
| def make_placeholder_image(prompt: str): | |
| img = Image.new("RGB", (512, 512), color=(30, 30, 60)) | |
| d = ImageDraw.Draw(img) | |
| d.text((20, 20), f"[Sketch of: {prompt}]", fill=(200, 200, 255)) | |
| return img | |
| def multimodal_chat(user_msg, history, persona): | |
| history = history or [] | |
| assistant_content = query_llm(user_msg, history, persona) | |
| # Very simple routing: look for keywords | |
| img, fig = None, None | |
| if "chart" in user_msg.lower(): | |
| fig = go.Figure() | |
| fig.add_trace(go.Scatter(x=[2010, 2020, 2030], y=[5, 50, 200], mode="lines+markers", name="AI Adoption")) | |
| fig.update_layout(title="AI Adoption Over Time") | |
| history.append([user_msg, "📊 Here's a chart of AI adoption"]) | |
| elif "simulate" in user_msg.lower(): | |
| steps = ["Aliens send a signal", "Humans decode it", "First meeting arranged"] | |
| history.append([user_msg, "🔮 Simulation: First Contact\n" + "\n".join([f"→ {s}" for s in steps])]) | |
| elif "draw" in user_msg.lower() or "image" in user_msg.lower(): | |
| img = make_placeholder_image(user_msg) | |
| history.append([user_msg, f"🖼️ (Placeholder image for: {user_msg})"]) | |
| else: | |
| history.append([user_msg, assistant_content]) | |
| return history, img, fig | |
| # ---------------------------- | |
| # Gradio UI | |
| # ---------------------------- | |
| with gr.Blocks(css="style.css") as demo: | |
| gr.Markdown("🧠 **ZEN Research Lab (CPU-Safe Edition)**", elem_id="zen-header") | |
| gr.Markdown("✅ Text ✅ Charts ✅ Simulation ✅ Placeholder Images (no GPU needed)") | |
| persona = gr.Dropdown(["Default","Analyst","Artist","Futurist","Philosopher"], label="Mode", value="Default") | |
| chatbot = gr.Chatbot(label="Conversation", height=400) | |
| with gr.Row(): | |
| user_msg = gr.Textbox(placeholder="Ask me anything…", label="Your message", scale=4) | |
| send_btn = gr.Button("Send", variant="primary") | |
| img_out = gr.Image(label="Generated image") | |
| chart_out = gr.Plot(label="Interactive chart") | |
| def respond(user_msg, chat_history, persona): | |
| chat_history, img, fig = multimodal_chat(user_msg, chat_history, persona) | |
| return ( | |
| chat_history, | |
| gr.update(value=img) if img else gr.update(value=None), | |
| gr.update(value=fig) if fig else gr.update(value=None) | |
| ) | |
| send_btn.click(respond, inputs=[user_msg, chatbot, persona], | |
| outputs=[chatbot, img_out, chart_out]) | |
| user_msg.submit(respond, inputs=[user_msg, chatbot, persona], | |
| outputs=[chatbot, img_out, chart_out]) | |
| # Examples | |
| with gr.Accordion("✨ Try these examples"): | |
| gr.Examples( | |
| examples=[ | |
| ["Draw a futuristic city skyline at night"], | |
| ["Simulate first contact with an alien civilization"], | |
| ["Make a chart of AI adoption from 2010 to 2030"], | |
| ["Explain quantum entanglement in simple terms"], | |
| ], | |
| inputs=[user_msg] | |
| ) | |
| if __name__ == "__main__": | |
| demo.queue(max_size=50).launch() | |