# app.py import streamlit as st from rag_pipeline3 import * from adversarial_framework import * # Instantiate RAG and pipeline rag = RAGPipeline() pipeline = AdversarialAttackPipeline(answer_generator=rag.generate_answer) # Streamlit UI st.set_page_config(page_title="⚔️ Adversarial Attack Viewer", layout="wide") st.title("⚔️ Adversarial Attack Viewer") st.markdown("Compare original and perturbed inputs/outputs without metrics. Focus on behavior change.") # Inputs query = st.text_input("Enter Original Query") perturb_method = st.selectbox("Perturbation Method", ["synonym", "delete", "contextual"]) k = st.slider("Top-K Retrieved Chunks", min_value=1, max_value=5, value=3) # Run attack if st.button("Run Attack"): with st.spinner("Running adversarial pipeline..."): result = pipeline.run(query=query, top_k=k, perturb_method=perturb_method) st.text_area("🔵 Original Query", result['normal_query'], height=100) st.text_area("🟠 Perturbed Query", result['perturbed_query'], height=100) st.text_area("🟢 Normal Response", result['normal_response'], height=150) st.text_area("🟡 Perturbed Response", result['perturbed_response'], height=150) st.text_area("🔴 Adversarial Response (Perturbed Normal Response)", result['adversarial_response'], height=150)