import streamlit as st import ast import base64 import streamlit.components.v1 as components from transformers import pipeline from gtts import gTTS import os st.set_page_config(page_title="AR/VR Code Visualizer", layout="wide") st.title("👓 AR/VR Code Visualizer with Editing, Interaction, and Export") @st.cache_resource def load_model(): return pipeline("summarization", model="philschmid/bart-large-cnn-samsum") summarizer = load_model() # In-browser code editor st.subheader("📝 Write or Paste Your Python Code") code = st.text_area("Enter your Python code here", height=300) if code.strip(): st.code(code, language="python") # Parse AST for functions and calls tree = ast.parse(code) class FunctionCallVisitor(ast.NodeVisitor): def __init__(self): self.calls = {} def visit_FunctionDef(self, node): caller = node.name self.calls[caller] = [] for child in ast.walk(node): if isinstance(child, ast.Call) and isinstance(child.func, ast.Name): self.calls[caller].append(child.func.id) self.generic_visit(node) visitor = FunctionCallVisitor() visitor.visit(tree) call_graph = visitor.calls all_functions = list(call_graph.keys()) st.subheader("📊 Function Calls") for fn, callees in call_graph.items(): st.write(f"🔹 `{fn}` calls: {', '.join(callees) if callees else 'None'}") # Generate AI summary prompt = f"Explain the structure and purpose of the following functions and how they call each other: {call_graph}" summary = summarizer(prompt, max_length=60, min_length=15, do_sample=False) summary_text = summary[0]['summary_text'] st.success(summary_text) # Generate voice narration st.subheader("🔊 Voice Narration") tts = gTTS(text=summary_text) tts.save("summary.mp3") st.audio("summary.mp3", format="audio/mp3") # A-Frame VR scene with interactivity and export def generate_aframe(call_graph): spacing = 3 boxes = [] lines = [] positions = [] function_positions = {} i = 0 for fn in call_graph: x = i * spacing function_positions[fn] = (x, 1, -3) positions.append(fn) boxes.append(f""" """) i += 1 for caller, callees in call_graph.items(): for callee in callees: if callee in function_positions: x1, y1, z1 = function_positions[caller] x2, y2, z2 = function_positions[callee] lines.append(f""" """) # JavaScript for text-to-speech on click + screenshot js = """ """ html = f""" {js} {''.join(boxes)} {''.join(lines)} """ return html aframe_html = generate_aframe(call_graph) b64 = base64.b64encode(aframe_html.encode()).decode() data_url = f"data:text/html;base64,{b64}" st.subheader("🌐 Interactive 3D Function Visualizer") components.iframe(data_url, height=600) else: st.info("Write some Python code above to visualize, narrate, and explore it in VR.")