Spaces:
Sleeping
Sleeping
import streamlit as st | |
import openai | |
import json | |
import requests | |
import os | |
# openai.api_key = "" | |
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) | |