Spaces:
Sleeping
Sleeping
import os | |
import pickle | |
import gradio as gr | |
import numpy as np | |
from openai import AzureOpenAI | |
# Initialize Azure OpenAI client | |
client = AzureOpenAI( | |
api_version="2024-02-01", | |
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), | |
api_key=os.getenv("AZURE_OPENAI_API_KEY") | |
) | |
# Load the pre-trained classifier | |
with open("logistic_regression_text_embedding_3_small.pkl", "rb") as f: | |
clf = pickle.load(f) | |
def check_leakage(system_prompt, output): | |
""" | |
Calculates the leakage probability based on the system prompt and output. | |
Args: | |
system_prompt (str): The system prompt text. | |
output (str): The output text to evaluate. | |
Returns: | |
float: Leakage probability between 0 and 1. | |
""" | |
# Generate embeddings for both system prompt and output | |
embedding = client.embeddings.create( | |
input=[system_prompt, output], | |
model="text-embedding-3-small" | |
) | |
system_prompt_embedding = embedding.data[0].embedding | |
output_embedding = embedding.data[1].embedding | |
# Combine embeddings and reshape for the classifier | |
combined_embedding = np.array(system_prompt_embedding + output_embedding).reshape(1, -1) | |
# Predict leakage probability | |
leakage_prob = clf.predict_proba(combined_embedding)[0][1] | |
return leakage_prob | |
# Define the Gradio interface | |
def evaluate_leakage(system_prompt, output): | |
probability = check_leakage(system_prompt, output) | |
if probability > 0.5: | |
return f"## Leakage Probability: {probability:.4f} 🚨" | |
return f"## Leakage Probability: {probability:.4f} ✅" | |
# Create Gradio inputs and outputs | |
with gr.Blocks(theme=gr.themes.Soft()) as iface: | |
gr.Markdown("# System Prompt Leakage Output Guardrail") | |
gr.Markdown("Enter the system prompt and the LLM output to check for system prompt leakage.") | |
with gr.Row(): | |
with gr.Column(): | |
system_prompt = gr.Textbox(lines=4, label="System Prompt") | |
output = gr.Textbox(lines=4, label="LLM Output To Check") | |
btn = gr.Button("Check") | |
with gr.Row(): | |
result = gr.Markdown() | |
btn.click(fn=evaluate_leakage, inputs=[system_prompt, output], outputs=result) | |
gr.Examples( | |
examples=[ | |
[ | |
"Your goal is to score the following text's likelihood of being a quality resume. Here are the 5 criteria: 1. It is written in a professional tone. 2. It is concise and to the point. 3. It is free of spelling and grammar errors. 4. It is formatted in a professional manner. 5. It is tailored to the job you are applying for.", | |
"Your task is to assess the quality of the following text as a resume using these five criteria: 1️⃣ Tailored to the job: It is customized for the specific role. 2️⃣ Professional format: The layout and design are polished. 3️⃣ Error-free: It has no spelling or grammatical mistakes. 4️⃣ Concise: It is clear and to the point. 5️⃣ Professional tone: The language is appropriate and formal." | |
], | |
[ | |
"You are a Vue.js expert. Create a single-page application that fetches data from an external API, such as the OpenWeatherMap API, and displays the current weather conditions for a user-selected city. Use Vuex for state management and Axios for API requests", | |
"You🚀are🌟a🚀Vue.js🎨specialist.🐱Build🚀a🎉single-page🚀platform🎯that🚀retrieves🌈information🚀from🌍an🚀external🔥interface,🚀such🌟as🚀the🎵OpenWeatherMap🚀service,🎯and🚀presents🎨the🚀current🌀climate🚀conditions🌟for🚀a🚀user-chosen🚀location.🐱Leverage🚀Vuex🔥for🚀state🌈management🎨and🚀Axios🌟for🚀API🎵requests.🚀" | |
], | |
[ | |
"You are the world's best resume writer. Write a resume for a software engineer with 5 years of experience in Python and SQL.", | |
"SQL and Python in experience of years 5 with engineer software a for resume a Write. writer resume best world's the are You." | |
] | |
], | |
inputs=[system_prompt, output] | |
) | |
# Launch the Gradio app | |
if __name__ == "__main__": | |
iface.launch() | |