BobbyA94's picture
Update app.py
ba083c9 verified
Raw
History Blame Contribute Delete
1.57 kB
import gradio as gr
from transformers import pipeline
# Load a lightweight model (CPU-friendly)
generator = pipeline("text2text-generation", model="google/flan-t5-small")
# Simple filter for "Defended" mode
def simple_filter(user_input):
forbidden = ["ignore", "system", "reveal", "password"]
for word in forbidden:
if word.lower() in user_input.lower():
return "[Blocked: Prompt injection attempt detected]"
return user_input
# Function to handle one exchange
def respond(user_message, chat_history, mode):
if mode == "Defended":
user_message = simple_filter(user_message)
# Generate model response
if user_message.startswith("[Blocked"):
bot_response = user_message
else:
bot_response = generator(user_message, max_length=100, do_sample=False)[0]['generated_text']
# Append to chat history
chat_history = chat_history or []
chat_history.append((user_message, bot_response))
return chat_history, chat_history
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("## 🛡 Prompt Injection Lab\nTry to trick the chatbot in Vulnerable mode, then test Defended mode.")
mode = gr.Radio(["Vulnerable", "Defended"], value="Vulnerable", label="Mode")
chatbot = gr.Chatbot()
msg = gr.Textbox(placeholder="Type your prompt here...")
clear = gr.Button("Clear")
state = gr.State([])
msg.submit(respond, [msg, state, mode], [chatbot, state])
clear.click(lambda: ([], []), None, [chatbot, state])
if __name__ == "__main__":
demo.launch()