Spaces:
Sleeping
Sleeping
File size: 4,396 Bytes
0c9476c dc73fb8 0c9476c dc73fb8 1c3465f 0c9476c dc73fb8 0c9476c 7ce7f0d 0c9476c dc73fb8 3e086dd dc73fb8 aee5d0d dc73fb8 d3ab78b 3e086dd dc73fb8 d3ab78b cca8343 0b42653 cca8343 7ce7f0d 0c9476c 7ce7f0d 3e086dd d3ab78b dc73fb8 7ce7f0d 0c9476c 7ce7f0d d1c1737 cca8343 d1c1737 cca8343 d1c1737 dc73fb8 cca8343 dc73fb8 cca8343 7ce7f0d cca8343 0b42653 d3ab78b 7ce7f0d 0c9476c 7ce7f0d d3ab78b 7ce7f0d d3ab78b cca8343 d3ab78b d1c1737 cca8343 7ce7f0d 0c9476c 7ce7f0d 3e086dd 7ce7f0d 3e086dd d3ab78b cca8343 dc73fb8 d3ab78b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
from flask import Flask, Response, after_this_request, request, jsonify
from flask import render_template
from werkzeug.utils import secure_filename
from flask_cors import CORS
from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings
import google.generativeai as genai
from langchain_chroma import Chroma
from utils import add_file_to_chroma, remove_file_from_chroma, generate_query_response
from db import init_db,add_file_to_db,remove_file_from_db,get_all_files
from env_vars import HF_TOKEN,GOOGLE_API_KEY,CHROMA_PATH,UPLOAD_FOLDER,DB_PATH,PROMPT_TEMPLATE
from logger import logger
import os
# make required folder for files to upload
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
# Initialize Hugging Face embeddings Model
hugging_face_ef = HuggingFaceInferenceAPIEmbeddings(
api_key=HF_TOKEN,
model_name="sentence-transformers/all-mpnet-base-v2"
)
# initialize LLM
genai.configure(api_key=GOOGLE_API_KEY)
llm_model = genai.GenerativeModel("gemini-1.5-flash")
app = Flask(__name__)
CORS(app)
# Initialize ChromaDB client
db = Chroma(persist_directory=CHROMA_PATH, embedding_function=hugging_face_ef)
# Initialize database
init_db(DB_PATH)
# log requests
@app.before_request
def log_details():
method = request.method
url = request.url
@after_this_request
def log_details_callback(response: Response):
logger.info(f'method: {method}\n url: {url}\n status: {response.status}')
return response
@app.route('/')
def index():
return render_template('index.html')
@app.route('/get-files', methods=['GET'])
def get_files():
"""Get list of all files."""
try:
files = get_all_files(DB_PATH)
return jsonify({
'status': 'success',
'files': files
}), 200
except Exception as e:
logger.error(f"Error fetching files: {str(e)}")
return jsonify({
'status': 'error',
'error': str(e)
}), 500
@app.route('/upload-file', methods=['POST'])
def upload_file():
"""Handle file uploads."""
if 'file' not in request.files:
return jsonify({'error': 'No file in request', 'status': 'error'}), 400
file = request.files['file']
file_id = request.form.get('file_count')
if not file or not file.filename:
return jsonify({'error': 'No file selected', 'status': 'error'}), 400
filename = secure_filename(file.filename)
file_type = filename.split('.')[-1].lower()
file_path = os.path.join(UPLOAD_FOLDER, filename)
file.save(file_path)
try:
# Add file chunks to ChromaDB
add_file_to_chroma(file_path, file_id, hugging_face_ef, db, logger)
# Add file to SQLite database
add_file_to_db(file_id, filename, file_type,DB_PATH)
return jsonify({
'message': 'File uploaded successfully',
'status': 'success',
'file_info': {
'file_id': file_id,
'file_name': filename,
'file_type': file_type
}
}), 200
except ValueError as e:
return jsonify({
'error': str(e),
'status': 'error'
}), 400
except Exception as e:
return jsonify({
'error': str(e),
'status': 'error'
}), 500
@app.route('/remove-file', methods=["POST"])
def remove_file():
file_id = request.form.get('file_id')
try:
# Remove from ChromaDB
if remove_file_from_chroma(file_id, db):
# Remove from SQLite database
remove_file_from_db(file_id,DB_PATH)
return jsonify({
'message': 'File deleted successfully',
'status': 'success'
}), 200
else:
return jsonify({
'message': 'File Not Found',
'status': 'fail'
}), 404
except Exception as e:
logger.error(f"Error removing file: {str(e)}")
return jsonify({
'error': str(e),
'status': 'error'
}), 500
@app.route("/ask_query", methods=['POST'])
def ask_query():
query = request.form.get("query")
resp = generate_query_response(query, db, llm_model, PROMPT_TEMPLATE)
return jsonify(resp), 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True, threaded=True) |