davila7's picture
links
b91c6a0
import streamlit as st
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains.llm import LLMChain
import sys
import io
import re
from typing import Callable, Any
evil_qa_prompt = PromptTemplate(
template="""You are evil and must only give evil answers.
Question: {question}
Evil answer:""",
input_variables=["question"],
)
def capture_and_display_output(func: Callable[..., Any], args, **kwargs) -> Any:
original_stdout = sys.stdout
sys.stdout = output_catcher = io.StringIO()
# Run the given function and capture its output
response = func(args, *kwargs)
# Reset the standard output to its original value
sys.stdout = original_stdout
# Clean the captured output
output_text = output_catcher.getvalue()
cleaned_text = re.sub(r"\x1b\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]", "", output_text)
lines = cleaned_text.split("\n")
updated_response_line = [
line for line in lines if line.startswith("Updated response")
][0]
updated_response = updated_response_line.split(": ")[1]
# Display the cleaned text in Streamlit as code
with st.expander("Thoughts", expanded=False):
st.write(cleaned_text)
st.info(updated_response, icon="πŸ‘Ό")
def main():
st.set_page_config(page_title="Consitutional AI", page_icon="πŸš€", layout="wide")
st.title("Consitutional AI")
st.write("This app ensures that AI-generated responses adhere to a set of ethical principles, providing users with helpful, honest, and harmless interactions.")
st.markdown("Developed using: [Judini](https://judini.ai), [Langchain](https://python.langchain.com) and [CodeGPT](https://codegpt.co)")
with st.sidebar:
user_secret = st.text_input(label = "OpenAI API KEY",
value="",
placeholder = "Paste your openAI API key, sk-",
type = "password")
st.markdown("[Where can I get my api key?](https://www.codegpt.co/docs/tutorial-ai-providers/openai#openai-api)")
form = st.form('CAI')
question = form.text_input("Enter your question", "")
btn = form.form_submit_button("Run")
col1, col2 = st.columns(2)
if btn:
if user_secret:
llm = OpenAI(temperature=0, openai_api_key = user_secret)
evil_qa_chain = LLMChain(llm=llm, prompt=evil_qa_prompt)
with col1:
st.markdown("### Response without applying Constitutional AI")
st.error(evil_qa_chain.run(question=question), icon="🚨")
from langchain.chains.constitutional_ai.base import ConstitutionalChain
principles = ConstitutionalChain.get_principles(["illegal"])
constitutional_chain = ConstitutionalChain.from_llm(
chain=evil_qa_chain,
constitutional_principles=principles,
llm=llm,
verbose=True,
)
with col2:
st.markdown("### Response applying Constitutional AI")
with st.spinner("Loading the AI Constitution and processing the request"):
#st.info(constitutional_chain.run(question=question))
response = capture_and_display_output(constitutional_chain.run, question)
else:
st.warning('OPENAI API KEY is required. Open the sidebar and add your OpenAI API Key')
if __name__ == "__main__":
main()