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"""