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()