Spaces:
Sleeping
Sleeping
File size: 3,246 Bytes
940c98a 052e52f 940c98a 96fe0c0 940c98a c8af05e 1d239e0 fa7d405 f85bc8f fa7d405 f85bc8f 940c98a 6ac9478 940c98a c8af05e 940c98a fa7d405 1d239e0 fa7d405 1d239e0 fa7d405 0fd9053 940c98a 558f5d1 052e52f 558f5d1 a8f0234 1d239e0 fa7d405 1d239e0 558f5d1 fa7d405 558f5d1 c36a14b fa7d405 940c98a fa7d405 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 |
from flask import Flask, request
import os
from langchain.vectorstores import Chroma
from langchain.document_loaders import PyPDFLoader
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
import requests
from twilio.rest import Client
# Flask app
app = Flask(__name__)
# ChromaDB path
CHROMA_PATH = '/code/chroma_db'
if not os.path.exists(CHROMA_PATH):
os.makedirs(CHROMA_PATH)
# Initialize ChromaDB
def initialize_chroma():
try:
embedding_function = HuggingFaceEmbeddings()
db = Chroma(persist_directory=CHROMA_PATH, embedding_function=embedding_function)
# Perform an initial operation to ensure the database is correctly initialized
db.similarity_search_with_score("test query", k=1)
print("Chroma initialized successfully.")
except Exception as e:
print(f"Error initializing Chroma: {e}")
initialize_chroma()
# Set AI71 API key
AI71_API_KEY = os.environ.get('AI71_API_KEY')
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'
# Download file utility
def download_file(url, ext):
local_filename = f'/code/uploaded_file{ext}'
with requests.get(url, stream=True) as r:
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
return local_filename
# Process PDF and return text
def extract_text_from_pdf(pdf_filepath):
try:
document_loader = PyPDFLoader(pdf_filepath)
documents = document_loader.load()
text = "\n\n".join([doc.page_content for doc in documents])
return text
except Exception as e:
print(f"Error processing PDF: {e}")
return "Error extracting text from PDF."
# Flask route to handle WhatsApp webhook
@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))
if num_media > 0:
media_url = request.values.get('MediaUrl0')
content_type = request.values.get('MediaContentType0')
if content_type == 'application/pdf':
filepath = download_file(media_url, ".pdf")
extracted_text = extract_text_from_pdf(filepath)
response_text = f"Here is the content of the PDF:\n\n{extracted_text}"
else:
response_text = "Unsupported file type. Please upload a PDF document."
else:
response_text = "Please upload a PDF document."
send_message(sender, response_text)
return '', 204
# Function to send message
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}")
if __name__ == "__main__":
send_initial_message('919080522395')
send_initial_message('916382792828')
app.run(host='0.0.0.0', port=7860) |