myconsicouness / app.py
adityasugandhi
bug fix
7e4f48f
from flask import Flask, jsonify, request
from Inferencer import Inferncer
from pathlib import Path
from dataloader import DataLoader
import logging
app = Flask(__name__)
base_dir = Path(__file__).resolve().parent
haystack_dir = base_dir / '.haystack'
# Create the directory
haystack_dir.mkdir(parents=True, exist_ok=True)
UPLOAD_FOLDER = './data/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
inferencer = Inferncer()
data_loader = DataLoader()
#app logger
log_format = "%(asctime)s [%(levelname)s] - %(message)s"
logging.basicConfig(filename="app.log", level=logging.DEBUG, format=log_format)
logger = logging.getLogger(__name__)
# Initialize chroma_store as a global variable
# chroma_store = data_loader.dataloader()
# in_memory_store = data_loader.InMemory_dataloader()
chroma_store = None
in_memory_store = None
@app.route("/")
def home():
return "Welcome to the Flask app!"
@app.route('/upload', methods=['POST'])
def upload_document():
try:
if 'file' not in request.files:
return jsonify({"error": "No file provided"}), 400
file = request.files['file']
if file.filename == '':
return jsonify({"error": "No file selected"}), 400
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return jsonify({"message": "File uploaded successfully"}), 200
except Exception as e:
return jsonify({"error": str(e)})
@app.route("/sync", methods=["POST"])
def sync_and_run_dataloader():
global chroma_store
global in_memory_store# Access the global chroma_store variable
try:
# Optionally, you can add authentication or other checks here
# Call the dataloader function
chroma_store = data_loader.dataloader()
in_memory_store = data_loader.InMemory_dataloader()
return jsonify({"message": "DataLoader executed successfully", "result": "success"})
except Exception as e:
return jsonify({"error": str(e)})
@app.route("/ask", methods=["POST"])
def ask_question():
try:
data = request.get_json()
query = data.get("question", "")
model = data.get("model", "")
if chroma_store is None:
return jsonify({"error": "Chroma store not initialized. Run sync_and_run_dataloader first."})
if model == "OpenAI":
results = inferencer.OpenAI(query=query)
return jsonify({"results": results})
elif model == "LlamaCpp":
results = inferencer.LlamaCpp(query=query)
return jsonify({"results": results})
else:
return jsonify({"error": f"Invalid model specified: {model}"})
except Exception as e:
return jsonify({"error": str(e)})
if __name__ == "__main__":
app.run(debug=True)