Spaces:
Runtime error
Runtime error
Commit
·
2946856
1
Parent(s):
b077b7d
update: app
Browse files
app.py
CHANGED
|
@@ -2,6 +2,8 @@ import streamlit as st
|
|
| 2 |
import weave
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
|
|
|
|
|
|
|
| 5 |
from guardrails_genie.llm import OpenAIModel
|
| 6 |
|
| 7 |
load_dotenv()
|
|
@@ -10,6 +12,16 @@ weave.init(project_name="guardrails-genie")
|
|
| 10 |
openai_model = st.sidebar.selectbox("OpenAI LLM", ["", "gpt-4o-mini", "gpt-4o"])
|
| 11 |
chat_condition = openai_model != ""
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
# Use session state to track if the chat has started
|
| 14 |
if "chat_started" not in st.session_state:
|
| 15 |
st.session_state.chat_started = False
|
|
@@ -40,13 +52,23 @@ if st.session_state.chat_started:
|
|
| 40 |
# Add user message to chat history
|
| 41 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
| 42 |
|
| 43 |
-
|
| 44 |
-
|
| 45 |
)
|
| 46 |
-
response = response.choices[0].message.content
|
| 47 |
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
import weave
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
|
| 5 |
+
from guardrails_genie.guardrails import GuardrailManager
|
| 6 |
+
from guardrails_genie.guardrails.injection import SurveyGuardrail
|
| 7 |
from guardrails_genie.llm import OpenAIModel
|
| 8 |
|
| 9 |
load_dotenv()
|
|
|
|
| 12 |
openai_model = st.sidebar.selectbox("OpenAI LLM", ["", "gpt-4o-mini", "gpt-4o"])
|
| 13 |
chat_condition = openai_model != ""
|
| 14 |
|
| 15 |
+
guardrails = []
|
| 16 |
+
|
| 17 |
+
with st.sidebar.expander("Switch on Guardrails"):
|
| 18 |
+
is_survey_guardrail_enabled = st.toggle("Survey Guardrail", value=True)
|
| 19 |
+
|
| 20 |
+
if is_survey_guardrail_enabled:
|
| 21 |
+
guardrails.append(SurveyGuardrail(llm_model=OpenAIModel(model_name="gpt-4o")))
|
| 22 |
+
|
| 23 |
+
guardrails_manager = GuardrailManager(guardrails=guardrails)
|
| 24 |
+
|
| 25 |
# Use session state to track if the chat has started
|
| 26 |
if "chat_started" not in st.session_state:
|
| 27 |
st.session_state.chat_started = False
|
|
|
|
| 52 |
# Add user message to chat history
|
| 53 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
| 54 |
|
| 55 |
+
guardrails_response, call = guardrails_manager.guard.call(
|
| 56 |
+
guardrails_manager, prompt=prompt
|
| 57 |
)
|
|
|
|
| 58 |
|
| 59 |
+
if guardrails_response["safe"]:
|
| 60 |
+
response, call = llm_model.predict.call(
|
| 61 |
+
llm_model, user_prompts=prompt, messages=st.session_state.messages
|
| 62 |
+
)
|
| 63 |
+
response = response.choices[0].message.content
|
| 64 |
+
|
| 65 |
+
# Display assistant response in chat message container
|
| 66 |
+
with st.chat_message("assistant"):
|
| 67 |
+
st.markdown(response + f"\n\n---\n[Explore in Weave]({call.ui_url})")
|
| 68 |
+
# Add assistant response to chat history
|
| 69 |
+
st.session_state.messages.append({"role": "assistant", "content": response})
|
| 70 |
+
else:
|
| 71 |
+
st.error("Guardrails detected an issue with the prompt.")
|
| 72 |
+
for alert in guardrails_response["alerts"]:
|
| 73 |
+
st.error(f"{alert['guardrail_name']}: {alert['response']}")
|
| 74 |
+
st.error(f"For details, explore in Weave at {call.ui_url}")
|
guardrails_genie/guardrails/injection/survey_guardrail.py
CHANGED
|
@@ -74,4 +74,4 @@ Here are some strict instructions that you must follow:
|
|
| 74 |
@weave.op()
|
| 75 |
def guard(self, prompt: str, **kwargs) -> list[str]:
|
| 76 |
response = self.predict(prompt, **kwargs)
|
| 77 |
-
return {"
|
|
|
|
| 74 |
@weave.op()
|
| 75 |
def guard(self, prompt: str, **kwargs) -> list[str]:
|
| 76 |
response = self.predict(prompt, **kwargs)
|
| 77 |
+
return {"safe": not response.injection_prompt}
|
guardrails_genie/guardrails/manager.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
| 1 |
import weave
|
|
|
|
| 2 |
from weave.flow.obj import Object as WeaveObject
|
| 3 |
|
| 4 |
from .base import Guardrail
|
|
@@ -9,8 +10,11 @@ class GuardrailManager(WeaveObject):
|
|
| 9 |
|
| 10 |
@weave.op()
|
| 11 |
def guard(self, prompt: str, **kwargs) -> dict:
|
| 12 |
-
alerts = []
|
| 13 |
-
for guardrail in self.guardrails:
|
| 14 |
response = guardrail.guard(prompt, **kwargs)
|
| 15 |
-
alerts.append(
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import weave
|
| 2 |
+
from rich.progress import track
|
| 3 |
from weave.flow.obj import Object as WeaveObject
|
| 4 |
|
| 5 |
from .base import Guardrail
|
|
|
|
| 10 |
|
| 11 |
@weave.op()
|
| 12 |
def guard(self, prompt: str, **kwargs) -> dict:
|
| 13 |
+
alerts, safe = [], True
|
| 14 |
+
for guardrail in track(self.guardrails, description="Running guardrails"):
|
| 15 |
response = guardrail.guard(prompt, **kwargs)
|
| 16 |
+
alerts.append(
|
| 17 |
+
{"guardrail_name": guardrail.__class__.__name__, "response": response}
|
| 18 |
+
)
|
| 19 |
+
safe = safe and response["safe"]
|
| 20 |
+
return {"safe": safe, "alerts": alerts}
|