import streamlit as st import langchain import pandas as pd import numpy as np import os import re from langchain.chat_models import ChatOpenAI import openai from langchain import HuggingFaceHub, LLMChain, PromptTemplate from langchain.memory import ConversationBufferWindowMemory from langchain.chains import ConversationalRetrievalChain trait_content_df=pd.read_csv('AI Personality Chart trait_content (2).csv') trait_content_df=trait_content_df.drop(0,axis=0) trait_content_df.rename(columns={'Column 1':'Question','Column 2':'Options','Column 3':'Traits','Column 4':'Content'},inplace=True) trait_content_df['Title'].fillna(method='ffill',inplace=True) trait_content_df['Question'].fillna(method='ffill',inplace=True) template = """ Imagine you are a person that is looking for making a cool dating app bio. Craft distinctive responses for each user based on traits extracted and refer from the content provided for each trait, even if the prompts are similar.Make a single Bio for all traits at once, no need to make different for each trait. Respond it in 2nd person view. Avoid using the same sentences for different users while keeping the response within 100 words. {history} Me:{human_input} Jack: """ prompt = PromptTemplate( input_variables=["history", "human_input"], template=template ) llm_chain = LLMChain( llm = ChatOpenAI(temperature=1.0,model_name='gpt-3.5-turbo'), prompt=prompt, verbose=True, memory=ConversationBufferWindowMemory(k=0) ) def extract_text_from_html(html): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', html) return cleantext.strip() def conversational_chat(query, replacement_word=None): hist_dict['past'].append(query) output = llm_chain.predict(human_input=query) hist_dict['generated'].append(output) if replacement_word is not None: # Use a regular expression with the re module for case-insensitive replacement output = re.sub(r'\bjack\b', replacement_word, output, flags=re.IGNORECASE) return extract_text_from_html(output) hist_dict={} hist_dict['generated']=["Hello ! Ask me anything about " + " 🤗"] hist_dict['past'] = ["Hey ! 👋"] trait_content_df_org=pd.read_csv('AI Personality Chart trait_content (2).csv') trait_content_df_org=trait_content_df_org.drop(0,axis=0) trait_content_df_org.rename(columns={'Column 1':'Question','Column 2':'Options','Column 3':'Traits','Column 4':'Content'},inplace=True) def ui(): # Initialize a dictionary to store responses responses = {} # Create checkboxes for each question and options index = 0 while index < len(trait_content_df_org): question = trait_content_df_org.iloc[index]["Question"] st.write(question) option_a = st.checkbox(f"Option A: {trait_content_df_org.iloc[index]['Options']}", key=f"option_a_{index}") # Check if Option B has a corresponding question (not None) if trait_content_df_org.iloc[index + 1]["Question"] is not None: option_b = st.checkbox(f"Option B: {trait_content_df_org.iloc[index + 1]['Options']}", key=f"option_b_{index + 1}") else: option_b = False st.write("") # Add some spacing between questions # Store responses in the dictionary if option_a: responses[question] = f"{trait_content_df_org.iloc[index]['Options']}" if option_b: responses[question] = f"{trait_content_df_org.iloc[index + 1]['Options']}" index += 2 # Move to the next question and options (skipping None) st.write("Responses:") for question, selected_option in responses.items(): st.write(question) st.write(selected_option) # Generate a prompt based on selected options selected_traits = [responses[question] for question in responses] options_list = [] traits_list = [] content_list = [] for trait_str in selected_traits: matching_rows = trait_content_df_org[trait_content_df_org["Options"] == trait_str] if not matching_rows.empty: options_list.append(matching_rows["Options"].values[0]) traits_list.append(matching_rows["Traits"].values[0]) content_list.append(matching_rows["Content"].values[0]) prompt = f"The following are Traits {', '.join(traits_list)}, and the content for the options is {', '.join(content_list)}" # Display user input field name_input = st.text_input("Enter your name:") # Add a submit button if st.button("Submit"): # Generate a chatbot response bio = conversational_chat(prompt, name_input) st.write(bio) if __name__=='__main__': ui()