File size: 4,748 Bytes
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
95eb31e
1fddaeb
 
 
 
 
 
298130b
1fddaeb
 
 
 
 
 
 
 
 
 
4277d9e
1fddaeb
 
704802b
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34ad5af
1fddaeb
95eb31e
1fddaeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298130b
1fddaeb
 
 
298130b
1fddaeb
 
 
 
 
 
 
298130b
1fddaeb
298130b
1fddaeb
 
 
 
 
 
298130b
1fddaeb
 
 
 
 
298130b
 
 
 
1fddaeb
 
298130b
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
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.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)


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