Spaces:
Sleeping
Sleeping
File size: 4,603 Bytes
940c98a 5dff670 052e52f 5dff670 57f2875 979aaae 96fe0c0 979aaae f4738b1 940c98a 5dff670 f446e21 5dff670 940c98a 0fd9053 558f5d1 052e52f 558f5d1 5dff670 f4738b1 558f5d1 a8f0234 5dff670 1afebea 37364bc 949f071 a2da878 949f071 1d239e0 5dff670 b410aca 5dff670 ab84141 b410aca 558f5d1 979aaae 558f5d1 5dff670 c36a14b fa7d405 5dff670 979aaae 5dff670 979aaae d3d3acb 05b09c6 691414c 1a1cf31 c36a14b |
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 |
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
from twilio.rest import Client
import os
import shutil
from other_function import ConversationBufferMemory,generate_response,get_weather,get_rates,get_news,convert_img,predict_disease,predict_pest, download_and_save_as_txt,respond_pdf
from bs4 import BeautifulSoup
import requests
from requests.auth import HTTPBasicAuth
from PIL import Image
from io import BytesIO
import pandas as pd
from urllib.parse import urlparse
from pypdf import PdfReader
from ai71 import AI71
import uuid
from inference_sdk import InferenceHTTPClient
import base64
app = Flask(__name__)
UPLOAD_FOLDER = '/code/uploads'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
conversation_memory = ConversationBufferMemory(max_size=0)
account_sid = os.environ.get('TWILIO_ACCOUNT_SID')
auth_token = os.environ.get('TWILIO_AUTH_TOKEN')
client = Client(account_sid, auth_token)
from_whatsapp_number = 'whatsapp:+14155238886'
PROMPT_TEMPLATE = """
Answer the question based only on the following context:
{context}
---
Answer the question based on the above context: {question}
"""
@app.route('/whatsapp', methods=['POST'])
def whatsapp_webhook():
incoming_msg = request.values.get('Body', '').lower()
sender = request.values.get('From')
num_media = int(request.values.get('NumMedia', 0))
chat_history = conversation_memory.get_memory()
if num_media > 0:
media_url = request.values.get('MediaUrl0')
content_type = request.values.get('MediaContentType0')
if content_type.startswith('image/'):
# Handle image processing (disease/pest detection)
filepath = convert_img(media_url, account_sid, auth_token)
if 'none' not in filepath:
if predict_disease(filepath):
response_text = predict_disease(filepath)
elif predict_pest(filepath):
response_text=predict_pest(filepath)
else:
response_text = "Please upload other image with good quality."
else:
response_text = 'no data'
else:
# Handle PDF processing
filepath = download_and_save_as_txt(media_url, account_sid, auth_token)
response_text = 'PDF uploaded successfully'
elif ('weather' in incoming_msg.lower()) or ('climate' in incoming_msg.lower()) or (
'temperature' in incoming_msg.lower()):
response_text = get_weather(incoming_msg.lower())
elif 'bookkeeping' in incoming_msg:
response_text = "Please provide the details you'd like to record."
elif ('rates' in incoming_msg.lower()) or ('price' in incoming_msg.lower()) or (
'market' in incoming_msg.lower()) or ('rate' in incoming_msg.lower()) or ('prices' in incoming_msg.lower()):
rates = get_rates()
response_text = generate_response(incoming_msg + ' data is ' + rates, chat_history)
elif ('news' in incoming_msg.lower()) or ('information' in incoming_msg.lower()):
news = get_news()
response_text = generate_response('Summarise and provide the top 5 news in india as bullet points' + ' Data is ' + str(news), chat_history)
elif ('pdf' in incoming_msg.lower()):
response_text =respond_pdf(incoming_msg)
else:
response_text = generate_response(incoming_msg, chat_history)
conversation_memory.add_to_memory({"user": incoming_msg, "assistant": response_text})
send_message(sender, response_text)
return '', 204
def process_and_query_pdf(filepath):
# Read and process the PDF
reader = PdfReader(filepath)
text = ''
for page in reader.pages:
text += page.extract_text()
if not text:
return "Sorry, the PDF content could not be extracted."
# Generate response based on extracted PDF content
response_text = generate_response(f"The PDF content is {text}", "")
return response_text
def send_message(recipient, message):
client.messages.create(
body=message,
from_=from_whatsapp_number,
to=recipient
)
def send_initial_message(to_number):
send_message(
f'whatsapp:{to_number}',
'Welcome to the Agri AI Chatbot! How can I assist you today? You can send an image with "pest" or "disease" to classify it.'
)
if __name__ == "__main__":
send_initial_message('919080522395')
send_initial_message('916382792828')
app.run(host='0.0.0.0', port=7860) |