amazon_product / app.py
d-e-e-k-11's picture
Upload folder using huggingface_hub
4416e3b verified
from flask import Flask, render_template, request, jsonify
from rag_model import get_qa_chain, build_rag_system, PERSIST_DIRECTORY, HuggingFaceEmbeddings, Chroma
from dotenv import load_dotenv
import os
load_dotenv(override=True)
print(f"App: API Key loaded (starting with {os.getenv('GOOGLE_API_KEY', 'None')[:5]}...)")
app = Flask(__name__)
# Load or Build Vector Store
if not os.path.exists(PERSIST_DIRECTORY):
print("Vector store not found. Building...")
vectorstore = build_rag_system()
else:
print("Loading existing vector store...")
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vectorstore = Chroma(persist_directory=PERSIST_DIRECTORY, embedding_function=embeddings)
qa_chain = get_qa_chain(vectorstore)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/ask', methods=['POST'])
def ask():
data = request.json
query = data.get('query')
print(f"Processing query: {query}")
if not query:
return jsonify({"error": "No query provided"}), 400
if not qa_chain:
return jsonify({"error": "QA chain not initialized. Check GOOGLE_API_KEY."}), 500
try:
result = qa_chain({"query": query})
answer = result['result']
sources = []
seen = set()
for doc in result['source_documents']:
source_name = doc.metadata.get('name', 'Unknown')
if source_name not in seen:
sources.append(source_name)
seen.add(source_name)
return jsonify({
"answer": answer,
"sources": sources[:3] # Return top 3 unique names
})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000)