from flask import Flask, request, jsonify
from PyPDF2 import PdfReader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import ElasticVectorSearch, Pinecone, Weaviate, FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
# from config import DEBUG, SECRET_KEY, DATABASE_URI,OPENAI_API_KEY
from gevent.pywsgi import WSGIServer

import os

app = Flask(__name__)

# @app.route('/',methods=['GET'])
# def home():
#     return jsonify({
#         'name':'Saravana',
#         'email':'saravana@idealtraits.com'
#     })
os.environ["OPENAI_API_KEY"]='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'
basedir = os.path.abspath(os.path.dirname(__file__))
pdflocation = os.path.join(basedir,'idealpolicy.pdf')
reader =PdfReader(pdflocation)

raw_text = ''
for i, page in enumerate(reader.pages):
  text = page.extract_text()
  if text:
    raw_text += text

text_splitter = CharacterTextSplitter(
    separator = "\n",
    chunk_size = 1000,
    chunk_overlap = 200,
    length_function = len,
)
texts = text_splitter.split_text(raw_text)

embeddings = OpenAIEmbeddings()
docsearch = FAISS.from_texts(texts, embeddings)

chain = load_qa_chain(OpenAI(model_name="gpt-4",temperature=0), chain_type="stuff")

@app.route('/jobdetails',methods=['POST'])
def jobdetail():
    jobdet = request.json['jobdetails']+", Please analyze above content, this is suitable for our police if not means return 'Validation Failed' and give two words why. If validation is ture means return 'success'"
    query=jobdet
    docs = docsearch.similarity_search(query)
    response = chain.run(input_documents=docs,question=query)

    return jsonify({'jobdet':jobdet,'response':response})

if __name__ =='__main__':
    app.run(debug=True)
    # http_server = WSGIServer(('', 5000), app)
    # http_server.serve_forever()