File size: 5,213 Bytes
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
a3ac02f
 
95eb31e
1fddaeb
 
 
 
 
 
482f3e1
1fddaeb
 
 
 
 
 
 
 
 
 
4277d9e
1fddaeb
 
704802b
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34ad5af
1fddaeb
95eb31e
1fddaeb
 
 
a3ac02f
 
 
 
 
 
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a3ac02f
1fddaeb
 
 
a3ac02f
1fddaeb
 
 
 
 
 
 
 
a3ac02f
 
 
 
 
1fddaeb
 
 
 
 
 
a3ac02f
 
1fddaeb
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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

os.environ["OPENAI_API_KEY"] ='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'

trait_content_df=pd.read_csv('AI Personality Chart trait_content.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.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)

# Import the second CSV file
traits_description_df = pd.read_csv('Traits Description - Sheet1.csv')

# Extract unique values from the "Traits" column of trait_content_df_org
unique_traits = trait_content_df_org['Traits'].unique()


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)

    # Extract traits from the 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])

    # Get unique traits from the selected options
    unique_traits = list(set(traits_list))

    # Create a content list as a formatted string
    formatted_content_list = ",".join([f"'{trait.lower()}'" for trait in unique_traits])

    # Display user input field
    name_input = st.text_input("Enter your name:")

    # Add a submit button
    if st.button("Submit"):
        # Generate a chatbot response using the formatted content list as part of the prompt
        prompt = f"The following are Traits {formatted_content_list}"
        bio = conversational_chat(prompt, name_input)
        st.write(bio)



if __name__=='__main__':
    ui()