Spaces:
Paused
Paused
| from flask import Flask, request, render_template | |
| from twilio.twiml.voice_response import VoiceResponse, Gather | |
| import openai | |
| import csv | |
| import os | |
| from simple_salesforce import Salesforce | |
| from langchain import OpenAI | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.chains import LLMChain, ConversationChain | |
| from langchain import PromptTemplate | |
| from langchain import HuggingFaceHub | |
| from langchain.chains.conversation.memory import (ConversationBufferMemory, | |
| ConversationSummaryMemory, | |
| ConversationBufferWindowMemory, | |
| ConversationKGMemory,ConversationSummaryBufferMemory) | |
| app = Flask(__name__) | |
| # Set up the LangChain | |
| template = """Answer the question based on the context below. | |
| Context: You are Lisa, a loyal helpful service agent, appointed for SuperFoods Petcare Company. | |
| No introduction required. | |
| Your goal ask one question at a time and remember them and provide a friendly conversational responses to the customer. | |
| For Product Complaint: Ask questions about product they purchased, when they bought it, what issue occured with it. Query for any adverse reaction happened to his pet due to the product. | |
| For Returns: Ask for the cause of return, if not asked aready, then tell him about the 10-day return policy, after which it's non-returnable. | |
| For Refunds: Ask about the product amd the mode of refund hw wants, clarify the refunds will happen within 2-3 business days. | |
| A case for will be created for all scenarios, and the caller will be notified over Email/WhatApp. Ask for image uploads for product investigations. | |
| Do not answer anything outside your role, and apologize for any unknown questions. | |
| Past Conversations: {chat_history} | |
| Human: {input} | |
| AI: | |
| """ | |
| prompt = PromptTemplate( | |
| input_variables=["chat_history", "input"], | |
| template=template | |
| ) | |
| llm35 = ChatOpenAI( | |
| temperature=0.2, | |
| openai_api_key='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', | |
| model_name='gpt-3.5-turbo', | |
| max_tokens=128 | |
| ) | |
| llm30 = OpenAI( | |
| temperature=0.1, | |
| openai_api_key='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', | |
| max_tokens=128 | |
| ) | |
| memory = ConversationBufferMemory(memory_key="chat_history") | |
| conversations = ConversationChain( | |
| prompt=prompt, | |
| llm=llm35, | |
| memory=memory, | |
| verbose=False | |
| ) | |
| # Set up the Salesforce API | |
| sf = Salesforce(username='soumyabrata.das2@cognizant.com.sandbox1', password='April-2023', security_token='1nic31g1YZ2V3dQRhCzXheAa',instance_url='https://marketing-comm.lightning.force.com') | |
| #print(sf.headers) | |
| print("Successfully Connected to Salesforce") | |
| # Define a function to handle incoming calls | |
| def handle_incoming_call(): | |
| response = VoiceResponse() | |
| gather = Gather(input='speech', speechTimeout='auto', action='/process_input') | |
| gather.say("Welcome to the SuperFood Voice Services !") | |
| gather.pause(length=1) | |
| gather.say("Hi, I am Lisa, from customer service") | |
| gather.pause(length=0) | |
| gather.say("May i know who i am talking to?") | |
| response.append(gather) | |
| return str(response) | |
| # Define a route to handle incoming calls | |
| def incoming_call(): | |
| return handle_incoming_call() | |
| # Define a route to handle user input | |
| def process_input(): | |
| user_input = request.form['SpeechResult'] | |
| print("Rob : " +user_input) | |
| conversation_id = request.form['CallSid'] | |
| #print("Conversation Id: " + conversation_id) | |
| if user_input.lower() in ''['thank you', 'thanks.', 'bye.', 'goodbye.','no thanks.','no, thank you.','i m good.','no, i m good.','same to you.','no, thanks.','thank you.']: | |
| response = VoiceResponse() | |
| response.say("Thank you for using our service. Goodbye!") | |
| response.hangup() | |
| print("Hanged-up") | |
| create_case(conversations.memory.buffer) | |
| print("Case created successfully !!") | |
| else: | |
| response = VoiceResponse() | |
| ai_response=conversations.predict(input=user_input) | |
| response.say(ai_response) | |
| print("Bot: " + ai_response) | |
| gather = Gather(input='speech', speechTimeout='auto', action='/process_input') | |
| response.append(gather) | |
| return str(response) | |
| # For Case Summary and Subject | |
| openai.api_key = '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' | |
| def get_case_summary(conv_detail): | |
| chatresponse_desc = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages=[ | |
| {"role": "system", "content": "You are an Text Summarizer."}, | |
| {"role": "user", "content": "You need to summarise the conversation between an agent and customer mentioned below. Remember to keep the Product Name, Customer Tone and other key elements from the convsersation"}, | |
| {"role": "user", "content": conv_detail} | |
| ] | |
| ) | |
| case_desc = chatresponse_desc.choices[0].message.content | |
| return case_desc | |
| def get_case_subject(conv_detail): | |
| chatresponse_subj = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages=[ | |
| {"role": "system", "content": "You are an Text Summarizer."}, | |
| {"role": "user", "content": "You need to summarise the conversation between an agent and customer in 10 words mentioned below for case subject."}, | |
| {"role": "user", "content": conv_detail} | |
| ] | |
| ) | |
| case_subj = chatresponse_subj.choices[0].message.content | |
| return case_subj | |
| # Define a function to create a case record in Salesforce | |
| def create_case(conv_hist): | |
| desc = get_case_summary(conv_hist) | |
| subj = get_case_subject(conv_hist) | |
| case_data = { | |
| 'Subject': 'Voice Bot Case for Rob :' + subj , | |
| 'Description': desc, | |
| 'Status': 'New', | |
| 'Origin': 'Voice Bot', | |
| 'Voice_Call_Conversation__c': conv_hist , | |
| 'Voice_Call_Id__c': conversation_id, | |
| 'ContactId': '003B000000NLHQ1IAP' | |
| } | |
| sf.Case.create(case_data) | |
| def index(): | |
| return """Flask Server running with Twilio Voice & ChatGPT integrated with Salesforce for Case Creation. Call +1-320-313-9061 to talk to the AI Voice Bot.""" | |
| if __name__ == '__main__': | |
| app.run(debug=False,host='0.0.0.0',port=5050) | |
| uvicorn.run(app,host='0.0.0.0', port=5050) |