Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate | |
| from langchain.schema import SystemMessage, HumanMessage | |
| import openai | |
| import smtplib | |
| from email.mime.text import MIMEText | |
| import os | |
| from dotenv import load_dotenv | |
| # Load environment variables from .env file | |
| load_dotenv() | |
| # Set up OpenAI API credentials | |
| openai.api_key = os.getenv("OPENAI_API_KEY") | |
| email = os.getenv('EMAIL') | |
| password = os.getenv('PASSWORD') | |
| def main(): | |
| st.title("AI Survey Bot Recommendation") | |
| st.write("**Answer a couple of questions to get a tailor-made response.**") | |
| # Question 1 | |
| name = st.text_input("**Question 1: What is your name?**") | |
| # Question 2 | |
| company_name = st.text_input("**Question 2: What is your company name?**") | |
| # Question 3 | |
| company_location = st.text_input("**Question 3: Where is your company located?**") | |
| # Question 4 | |
| st.write("**Question 4: Are any of these a problem in your business?**") | |
| # Create a list of problems | |
| problems = [ | |
| "**Getting leads**", | |
| "**Closing sales**", | |
| "**Retaining customers**", | |
| "**Finding the right talent**", | |
| "**Not having enough time**", | |
| "**Customer support**", | |
| "**Strategic thinking**", | |
| "**Other**" | |
| ] | |
| # Create two columns with equal width | |
| col1, col2 = st.columns(2) | |
| # Loop through the problems and create checkboxes in each column | |
| for i, problem in enumerate(problems): | |
| # Use the modulo operator to alternate between columns | |
| if i % 2 == 0: | |
| col1.checkbox(label=problem, key=problem) | |
| else: | |
| col2.checkbox(label=problem, key=problem) | |
| # If Other is selected, prompt the user for more explanation | |
| other_problem = "" | |
| if st.session_state.get("Other"): | |
| other_problem = st.text_input("**Can you give a further explanation of the problem?**") | |
| # Question 5 | |
| time_consumers = st.text_area("**Question 5: What are the three biggest time consumers or deficiencies of your business?**") | |
| # Question 6 | |
| strategy_struggles = st.text_area("**Question 6: When coming up with strategy, what are the struggles there?**") | |
| # Question 7 | |
| email = st.text_input("**Question 7: Enter your Email to get the custom answers sent to you**") | |
| # Submit button | |
| if st.button("Submit"): | |
| # Save the survey data and send it to the user | |
| send_survey_results(name, company_name, company_location, problems, other_problem, time_consumers, strategy_struggles, email) | |
| def send_survey_results(name, company_name, company_location, problems, other_problem, time_consumers, strategy_struggles, email): | |
| # Generate chatbot response using OpenAI GPT-3.5 Turbo | |
| system_message_template = SystemMessagePromptTemplate.from_template( | |
| template="You are a helpful assistant that recommends AI tools based on user's business needs." | |
| ) | |
| human_message_template = HumanMessagePromptTemplate.from_template(template="{text}") | |
| chat_prompt = ChatPromptTemplate.from_messages([system_message_template, human_message_template]) | |
| messages = chat_prompt.format_prompt(text=f"I am {name}, representing {company_name} located in {company_location}. We are facing the following problems in our business: {', '.join(problems)}. {other_problem}. The three biggest time consumers or deficiencies in our business are: {time_consumers}. When coming up with strategy, we struggle with: {strategy_struggles}.").to_messages() | |
| messages_dict = [] | |
| for message in messages: | |
| if isinstance(message, SystemMessage): | |
| messages_dict.append({"role": "system", "content": message.content}) | |
| elif isinstance(message, HumanMessage): | |
| messages_dict.append({"role": "user", "content": message.content}) | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages_dict, | |
| max_tokens=100, | |
| n=1, | |
| stop=None, | |
| temperature=0.7, | |
| top_p=1.0, | |
| frequency_penalty=0.0, | |
| presence_penalty=0.0 | |
| ) | |
| # Extract the chatbot response | |
| chatbot_response = response.choices[0].message.content.strip() | |
| # Display the chatbot response | |
| st.subheader("Chatbot Response") | |
| st.write(chatbot_response) | |
| # Send the survey results to the user via email | |
| send_email(email, chatbot_response) | |
| def send_email(email, message): | |
| # Set up the email parameters | |
| sender = "L.fanampe@gmail.com" | |
| receiver = email | |
| subject = "Chatbot Response" | |
| body = message | |
| # Create the email message | |
| email_message = MIMEText(body) | |
| email_message["Subject"] = subject | |
| email_message["From"] = sender | |
| email_message["To"] = receiver | |
| # Send the email | |
| with smtplib.SMTP("smtp.gmail.com", 587) as server: | |
| server.starttls() | |
| server.login(email, password) | |
| server.sendmail(sender, receiver, email_message.as_string()) | |
| if __name__ == "__main__": | |
| main() | |