Spaces:
Runtime error
Runtime error
| 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() |