Spaces:
Sleeping
Sleeping
| from flask import Flask, request | |
| from twilio.twiml.messaging_response import MessagingResponse | |
| from twilio.rest import Client | |
| import os | |
| import requests | |
| from PIL import Image | |
| import io | |
| import uuid | |
| import shutil | |
| from other_function import predict_pest,predict_disease,convert_img,generate_response,ConversationBufferMemory | |
| app = Flask(__name__) | |
| UPLOAD_FOLDER = '/code/uploads' | |
| if not os.path.exists(UPLOAD_FOLDER): | |
| os.makedirs(UPLOAD_FOLDER) | |
| conversation_memory = ConversationBufferMemory() | |
| # Initialize the Flask app | |
| account_sid = os.environ.get('TWILIO_ACCOUNT_SID') | |
| auth_token = os.environ.get('TWILIO_AUTH_TOKEN') | |
| client = Client(account_sid, auth_token) | |
| # WhatsApp number to send messages from (your Twilio number) | |
| from_whatsapp_number = 'whatsapp:+14155238886' | |
| def whatsapp_webhook(): | |
| incoming_msg = request.values.get('Body', '').lower() | |
| sender = request.values.get('From') | |
| # Check if an image is attached | |
| num_media = int(request.values.get('NumMedia', 0)) | |
| # Get the chat history | |
| 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/'): | |
| filepath = convert_img(media_url, account_sid, auth_token) | |
| try: | |
| disease = predict_disease(filepath) | |
| except: | |
| disease = None | |
| try: | |
| pest = predict_pest(filepath) | |
| except: | |
| pest = None | |
| if disease: | |
| response_text = f"Detected disease: {disease}" | |
| # Generate additional insights about the disease | |
| disease_info = generate_response(f"Provide brief information about {disease} in plants", chat_history) | |
| response_text += f"\n\nAdditional information: {disease_info}" | |
| elif pest: | |
| response_text = f"Detected pest: {pest}" | |
| # Generate additional insights about the pest | |
| pest_info = generate_response(f"Provide brief information about {pest} in agriculture", chat_history) | |
| response_text += f"\n\nAdditional information: {pest_info}" | |
| else: | |
| response_text = "Please upload another image with good quality." | |
| else: | |
| response_text = "The attached file is not an image. Please send an image for classification." | |
| elif 'bookkeeping' in incoming_msg: | |
| response_text = "Please provide the details you'd like to record." | |
| else: | |
| # Generate response considering the chat history | |
| response_text = generate_response(incoming_msg, chat_history) | |
| # Add the interaction to memory | |
| conversation_memory.add_to_memory({"user": incoming_msg, "assistant": response_text}) | |
| send_message(sender, response_text) | |
| return '', 204 | |
| def get_agricultural_insights(query): | |
| return generate_response(query) | |
| def send_message(to, body): | |
| try: | |
| message = client.messages.create( | |
| from_=from_whatsapp_number, | |
| body=body, | |
| to=to | |
| ) | |
| print(f"Message sent with SID: {message.sid}") | |
| except Exception as e: | |
| print(f"Error sending message: {e}") | |
| # Function to send an initial message | |
| 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('916382792828') | |
| app.run(host='0.0.0.0', port=7860) |