| import os
|
| import time
|
| from flask import Flask, render_template, jsonify, request
|
| from src.helper import download_hugging_face_embeddings
|
| from langchain.llms import CTransformers
|
| from dotenv import load_dotenv
|
| from PyPDF2 import PdfReader
|
| from langchain.schema import Document
|
| from langchain.text_splitter import CharacterTextSplitter
|
|
|
|
|
| app = Flask(__name__)
|
|
|
|
|
| load_dotenv()
|
|
|
|
|
| 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])
|
|
|
|
|
| pdf_file_path = "data/Gale Encyclopedia of Medicine Vol. 1 (A-B).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}")
|
|
|
|
|
| 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}")
|
|
|
|
|
| llm = CTransformers(
|
| model="model/llama-2-7b-chat.ggmlv3.q4_0.bin",
|
| model_type="llama",
|
| config={
|
| 'max_new_tokens': 200,
|
| 'temperature': 0.1,
|
| 'top_k': 20
|
| }
|
| )
|
|
|
|
|
|
|
| @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}")
|
|
|
|
|
| result = {"generated_text": "Thinking..."}
|
|
|
|
|
| time.sleep(1)
|
|
|
|
|
| result = llm.generate([input_text])
|
| print(f"LLMResult: {result}")
|
|
|
|
|
| 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) |