Spaces:
Sleeping
Sleeping
import streamlit as st | |
import openai | |
import json | |
import requests | |
import os | |
def send_email(email_id,subject,content): | |
import smtplib | |
from email.mime.text import MIMEText | |
from email.mime.multipart import MIMEMultipart | |
# Email configuration | |
sender_email = 'Your gmail id' | |
receiver_email = email_id | |
password = 'Use an app-specific password for security' | |
subject = subject | |
message_body = content | |
# Create a MIMEText object for the email message | |
message = MIMEMultipart() | |
message['From'] = sender_email | |
message['To'] = receiver_email | |
message['Subject'] = subject | |
message.attach(MIMEText(message_body, 'plain')) | |
# Connect to the SMTP server (for Gmail, use 'smtp.gmail.com') | |
smtp_server = 'smtp.gmail.com' | |
smtp_port = 587 # Use 465 for SSL or 587 for TLS | |
try: | |
server = smtplib.SMTP(smtp_server, smtp_port) | |
server.starttls() | |
server.login(sender_email, password) | |
server.sendmail(sender_email, receiver_email, message.as_string()) | |
server.quit() | |
return('Email sent successfully') | |
except Exception as e: | |
return('Error sending email:', str(e)) | |
# Attach the message body | |
def run_conversation(): | |
functions = [ | |
{ | |
"name": "send_email", | |
"description": "send an email to given email address.", | |
"parameters": { | |
"type": "object", | |
"properties": { | |
"email_id":{ | |
"type":"string", | |
"description":"The id of email." | |
}, | |
"subject": { | |
"type": "string", | |
"description": "The subject of the email.", | |
}, | |
"content": | |
{"type": "string", "description": "The content of the email."}, | |
}, | |
"required": ["email_id","subject","content"], | |
}, | |
}] | |
response = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo-0613", | |
messages=st.session_state.messages, | |
functions=functions, | |
function_call="auto", | |
) | |
response_message = response["choices"][0]["message"] | |
# Step 2: check if GPT wanted to call a function | |
if response_message.get("function_call"): | |
# Step 3: call the function | |
# Note: the JSON response may not always be valid; be sure to handle errors | |
available_functions = { | |
"send_email": send_email | |
} # only one function in this example, but you can have multiple | |
function_name = response_message["function_call"]["name"] | |
function_to_call = available_functions[function_name] | |
function_args = json.loads(response_message["function_call"]["arguments"]) | |
function_response=function_to_call( | |
email_id=function_args.get("email_id"), | |
subject=function_args.get("subject"), | |
content=function_args.get("content")) | |
# Step 4: send the info on the function call and function response to GPT | |
# extend conversation with assistant's reply | |
st.session_state.messages.append(response_message) | |
st.session_state.messages.append( | |
{ | |
"role": "function", | |
"name": function_name, | |
"content": function_response, | |
}) | |
import time | |
time.sleep(5) | |
second_response = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo-0613", | |
messages=st.session_state.messages) | |
second_response=second_response["choices"][0]["message"]["content"] | |
st.session_state.messages.append({"role": "assistant", "content": second_response}) | |
return second_response | |
else: | |
response_message = response_message["content"] | |
st.session_state.messages.append({"role":"assistant","content":response_message}) | |
return response_message | |
if "messages" not in st.session_state.keys(): | |
st.session_state.messages = [{"role": "assistant", "content": "WellCome To AI Email Sender!"}] | |
if prompt := st.chat_input("Send Query..."): # Prompt for user input and save to chat history | |
st.session_state.messages.append({"role": "user", "content": prompt}) | |
for message in st.session_state.messages: # Display the prior chat messages | |
with st.chat_message(message["role"]): | |
st.write(message["content"]) | |
if st.session_state.messages[-1]["role"] != "assistant": | |
with st.chat_message("assistant"): | |
with st.spinner("Thinking..."): | |
response_message = run_conversation() | |
st.write(response_message) |