The current version of the app uses streamlit for the front/backend to quickly iterate through ideas. Will develop front-end with JS and host on AWS or other platform later.
Code is found in chatbot/bot.py
.
To upload a single CSV file, we can use the st.file_uploader
method:
uploaded_file = st.file_uploader(
label="Upload a single CSV file containing your contacts' information.",
type='csv',
accept_multiple_files=False
)
There is a quick catch, where an error is returned if the file type is not a CSV file.
if uploaded_file is not None:
try:
df = pd.read_csv(uploaded_file)
except:
st.write("Wrong file type - please upload a csv.")
- Extend to Excel files and write tests to ensure it is working properly
As a starting point, the professional can write in what the value proposition is as a text field. They can then select via radio buttons additional customizations to the email.
Note that this is a batch job - they need to fill out all fields before the AI begins to work.
with st.form(key='my_form'):
value_prop = st.text_area(
label="What is your product's value proposition?",
value="Our product is going to change the world because of X, Y, and Z."
)
contact_list_type = st.radio(
label="New or existing customers?",
options=("New", "Existing")
)
email_tone = st.radio(
label="What is the tone?",
options=("Formal", "Neutral", "Causual")
)
creative_conservative = st.radio(
label="How creative versus conservative would you want to be?",
options=("Creative", "Conservative")
)
st.write('Press submit to generate personalized emails.')
submit_button = st.form_submit_button(label='Submit')
- Need to see from users if they'd like more flexibility in options
- Edit fields so that instead of radio buttons they are more attractive from UI/UX perspective
Now that we have a way of capturing inputs, we need to generate outputs
is_done = False
df['prompt'] = ''
df['response'] = ''
if submit_button:
st.write("Generating emails!")
all_prompts = list()
all_responses = list()
bar = st.progress(0)
for idx, row in df.iterrows():
bar.progress(idx+1)
prompt = f"""
Write a {email_tone}, {creative_conservative} email to {row['Name']}, {row['Title']} who is a
{contact_list_type} customer from {row['Company']} in {row['Location']}.
Incorporate details like {row['Fictional fun fact from data source']}. Product: {value_prop},"""
response = generate_response(prompt)
all_prompts.append(prompt)
all_responses.append(response)
df.loc[idx]['prompt'] = prompt
df.loc[idx]['response'] = response
is_done = True
st.write("Finished!")
- Additional prompt engineering
- Provide users with options for different prompts?
- Need to figure out way to increase token length
- Play around with models
- Hyperparameter tuning
- Try out different model architectures if open-source (e.g. LaMBDA)
- Provide a variance score for each email to inform the user which email copies should be reviewed, given a high degree of variance
- Initiate campaign by:
- Copy and pasting into email client
- Sending emails directly from platform
- Sending emails directly from their own email client
- Sending emails directly from their ppreferred marketing solution
- AI can create cohorts for A/B testing and refine email copies for pending contacts and future campaigns
- Statistics:
- Open rates
- CTR rates