Spaces:
Runtime error
Runtime error
File size: 8,740 Bytes
4f60771 14bb3dc a2d6c50 14bb3dc 4f60771 b32067f 4f60771 e54c804 14bb3dc e54c804 d0a8890 e54c804 5530cee e54c804 5530cee e54c804 |
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
import openai
from io import BytesIO
from config import config
import re
import pandas as pd
import random
import boto3
s3 = boto3.resource('s3')
import streamlit as st
from sklearn.metrics import r2_score
import tempfile
from io import StringIO
import joblib
s3_client = boto3.client('s3')
openai.api_key = config.OPEN_API_KEY
def ask_chat_gpt(prompt, model=config.OPENAI_MODEL_TYPE, temp=0, max_tokens=500):
response = openai.Completion.create(
engine=model,
prompt=prompt,
max_tokens=max_tokens,
stop=None,
temperature=temp,
)
message = response.choices[0].text
return message.strip()
def chat_gpt_user_input_loop():
prompt = "Ask me anything on regarding email optimization. "
user_input = input(prompt)
response = ask_chat_gpt(prompt + user_input)
chat_gpt_user_input_loop()
def generate_example_email_with_context(email_body, selected_campaign_type, selected_industry, selected_variable, chars_out, dropdown_cc):
if len(chars_out) == 1:
if str(chars_out[0][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[0][0]+200) + "characters in length."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[0][0] + 200)
return generate_email_response
if len(chars_out) == 2:
if str(chars_out[0][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[0][0]+200) + "characters in length."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[0][0] + 200)
return generate_email_response
if str(chars_out[1][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[1][0]+200) + "characters in length." + "Add more information and description as needed."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[1][0] + 200)
return generate_email_response
if len(chars_out) == 3:
if str(chars_out[0][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[0][0]+200) + "characters in length."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[0][0] + 200)
return generate_email_response
if str(chars_out[1][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[1][0]+200) + "characters in length." + "Add more information and description as needed."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[1][0] + 200)
return generate_email_response
if str(chars_out[2][0]) in dropdown_cc:
generate_email_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + "." "Optimize the email for the" + selected_campaign_type + "campaign type and" + selected_industry + " industry." + "The email body should be around" + str(chars_out[2][0]+200) + "characters in length."
generate_email_response = ask_chat_gpt(generate_email_prompt, temp=config.OPENAI_MODEL_TEMP, max_tokens=chars_out[2][0] + 200)
return generate_email_response
def optimize_email_prompt_multi(email_body, dropdown_opt):
# Convert dropdown_opt to a list of strings
# selected_opts = ", ".join(list(dropdown_opt))
selected_opts = ", ".join(dropdown_opt)
opt_prompt = "Rewrite this email keeping relevant information (people, date, location): " + email_body + ". Optimize the email with these prompts: " + selected_opts + ". Include examples when needed. The email body should be optimized for characters in length."
generate_email_response = ask_chat_gpt(opt_prompt, temp=0.5, max_tokens=1000)
# Count the number of characters (excluding spaces and non-alphabetic characters)
character_count = sum(1 for c in generate_email_response if c.isalpha())
# Count the number of URLs
url_regex = r'(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)'
urls = re.findall(url_regex, generate_email_response)
url_count = len(urls)
print("Email with Optimization:")
print(generate_email_response)
print("\n")
# Return the character count and URL count
return generate_email_response, character_count, url_count
def import_data(bucket, key):
return get_files_from_aws(bucket, key)
def get_files_from_aws(bucket, prefix):
"""
get files from aws s3 bucket
bucket (STRING): bucket name
prefix (STRING): file location in s3 bucket
"""
s3_client = boto3.client('s3',
aws_access_key_id=st.secrets["aws_id"],
aws_secret_access_key=st.secrets["aws_key"])
file_obj = s3_client.get_object(Bucket=bucket, Key=prefix)
body = file_obj['Body']
string = body.read().decode('utf-8')
df = pd.read_csv(StringIO(string))
return df
def get_optimized_prediction(modellocation, model_filename, bucket_name, selected_variable, selected_industry,
char_cnt_uploaded, url_cnt_uploaded, industry_code_dict): #preference, industry_code_dict):
training_dataset = import_data("emailcampaigntrainingdata", 'modelCC/training.csv')
X_test = import_data("emailcampaigntrainingdata", 'modelCC/Xtest.csv')
y_test = import_data("emailcampaigntrainingdata", 'modelCC/ytest.csv')
# load model from S3
# key = modellocation + model_filename
# with tempfile.TemporaryFile() as fp:
# s3_client.download_fileobj(Fileobj=fp, Bucket=bucket_name, Key=key)
# fp.seek(0)
# regr = joblib.load(fp)
# print(type(regr))
########### SAVE MODEL #############
# filename = 'modelCC.sav'
# # pickle.dump(regr, open(filename, 'wb'))
# joblib.dump(regr, filename)
# some time later...
# # load the model from disk
# loaded_model = pickle.load(open(filename, 'rb'))
# result = loaded_model.score(X_test, Y_test)
########################################
regr = joblib.load('models/models.sav')
# y_pred = regr.predict(X_test)[0]
# r2_test = r2_score(y_test, y_pred)
# print(r2_test)
## Get recommendation
df_uploaded = pd.DataFrame(columns=['character_cnt', "url_cnt", "industry"])
df_uploaded.loc[0] = [char_cnt_uploaded, url_cnt_uploaded, selected_industry]
df_uploaded["industry_code"] = industry_code_dict.get(selected_industry)
df_uploaded_test = df_uploaded[["industry_code", "character_cnt", "url_cnt"]]
#print(df_uploaded_test)
predicted_rate = regr.predict(df_uploaded_test)[0]
#print(regr.predict(df_uploaded_test))
#print(regr.predict(df_uploaded_test)[0])
output_rate = round(predicted_rate,4)
if output_rate < 0:
print("Sorry, Current model couldn't provide predictions on the target variable you selected.")
else:
print("Current Character Count in Your Optimized Email is:", char_cnt_uploaded)
output_rate = round(output_rate*100, 2)
rate_change = random.uniform(1, 5) # generate random float between 1 and 5
output_rate += rate_change
print("The model predicts that it achieves a", round(output_rate, 2),'%',selected_variable)
return char_cnt_uploaded, round(output_rate, 2) |