travellor-bot / app.py
Kirai-Kevin's picture
Upload 18 files
cfd52b4 verified
raw
history blame
3.32 kB
import os
import time
from flask import Flask, render_template, jsonify, request
from src.helper import download_hugging_face_embeddings
from langchain.llms import Replicate
from dotenv import load_dotenv
from PyPDF2 import PdfReader
from langchain.schema import Document
from langchain.text_splitter import CharacterTextSplitter
# Initialize Flask app
app = Flask(__name__)
# Load environment variables
load_dotenv()
# Optional PDF processing functions
# def load_pdf(file_path):
# all_text = ""
# with open(file_path, 'rb') as file:
# reader = PdfReader(file)
# for page in reader.pages:
# all_text += page.extract_text() + "\n"
# return all_text if all_text else None
# def text_split(text):
# text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
# document = Document(page_content=text)
# return text_splitter.split_documents([document])
# Load and process data
# pdf_file_path = "data/Okelloetal.2008TourismanalysisManka.pdf"
# extracted_data = load_pdf(pdf_file_path)
# if extracted_data is None:
# raise ValueError("The extracted data is None. Please check the load_pdf function.")
# print(f"Extracted Data: {extracted_data}")
# Split the extracted text into chunks
# text_chunks = text_split(extracted_data)
# if not text_chunks:
# raise ValueError("The text_chunks is None or empty. Please check the text_split function.")
# print(f"Text Chunks: {text_chunks}")
embeddings = download_hugging_face_embeddings()
if embeddings is None:
raise ValueError("The embeddings is None. Please check the download_hugging_face_embeddings function.")
print(f"Embeddings: {embeddings}")
os.environ["REPLICATE_API_TOKEN"] = "r8_3eWT6qNBwq8r7zNknWKxsyNyOQ6WMGS2WWRay"
# Initialize the Replicate model
llm = Replicate(
model="a16z-infra/llama7b-v2-chat:4f0a4744c7295c024a1de15e1a63c880d3da035fa1f49bfd344fe076074c8eea",
config={
'max_new_tokens': 100, # Maximum number of tokens to generate in response
'temperature': 0.7, # Optimal temperature for balanced randomness and coherence
'top_k': 50 # Optimal top-k value for considering the top 50 predictions
}
)
# Flask routes
@app.route("/")
def index():
return render_template('chat.html')
@app.route("/get", methods=["GET", "POST"])
def chat():
try:
msg = request.form["msg"]
input_text = msg
print(f"Received message: {input_text}")
# Display spinner
result = {"generated_text": "Thinking..."}
# Simulate processing delay
time.sleep(1)
# Retrieve response from the model
result = llm.generate([input_text])
print(f"LLMResult: {result}")
# Access the generated text from the result object
if result.generations and result.generations[0]:
generated_text = result.generations[0][0].text
else:
generated_text = "No response generated."
print(f"Response: {generated_text}")
return str(generated_text)
except Exception as e:
print(f"Error: {e}")
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8080, debug=True)