Spaces:
Runtime error
Runtime error
| from flask import Flask, request, jsonify, send_file, render_template, render_template_string | |
| from werkzeug.utils import secure_filename | |
| import os | |
| import util | |
| from docx import Document | |
| app = Flask(__name__) | |
| UPLOAD_FOLDER = 'uploads' | |
| app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER | |
| if not os.path.exists(UPLOAD_FOLDER): | |
| os.makedirs(UPLOAD_FOLDER) | |
| chat_history = {} | |
| def index(): | |
| return render_template('index.html') | |
| def check_db(db_name): | |
| if db_name in chat_history.keys(): | |
| return jsonify({'exists': True}), 200 | |
| else: | |
| return jsonify({'error': 'DB not found'}), 404 | |
| def ingest(): | |
| if 'file' not in request.files: | |
| return jsonify({'error': 'No file provided'}), 400 | |
| file = request.files['file'] | |
| db_name = secure_filename(util.get_unique_filename()) | |
| file_path = os.path.join(app.config['UPLOAD_FOLDER'], db_name) | |
| if file.filename.endswith('.txt'): | |
| content = file.read().decode('utf-8') | |
| doc = SimpleDocTemplate(file_path, pagesize=LETTER) | |
| styles = getSampleStyleSheet() | |
| content_paragraphs = [Paragraph(line, styles['Normal']) for line in content.splitlines()] | |
| doc.build(content_paragraphs) | |
| elif file.filename.endswith('.docx'): | |
| doc = Document(file) | |
| pdf_content = [] | |
| for para in doc.paragraphs: | |
| pdf_content.append(para.text) | |
| pdf_doc = SimpleDocTemplate(file_path, pagesize=LETTER) | |
| styles = getSampleStyleSheet() | |
| content_paragraphs = [Paragraph(line, styles['Normal']) for line in pdf_content] | |
| pdf_doc.build(content_paragraphs) | |
| elif file.filename.endswith('.pdf') : | |
| file.save(file_path) | |
| else : return jsonify({'error': 'Unsupported File Format', 'db_name': '0'}) | |
| util.ingest(file_path, db_name) | |
| return jsonify({'message': 'File ingested successfully', 'db_name': db_name}) | |
| def query(): | |
| data = request.json | |
| query_text = data['query'] | |
| db_name = data['db_name'] | |
| if db_name not in chat_history: | |
| chat_history[db_name] = [] | |
| recent_history = chat_history[db_name][-5:] | |
| history_context = "\n".join([f"User: {q}\nBot: {r}" for q, r in recent_history]) | |
| cont_aware_query = util.context_aware_query(history_context, query_text) if len(recent_history) > 0 else query_text | |
| print("Context Aware query:", cont_aware_query) | |
| try: | |
| response, sources_with_pages = util.query_rag(cont_aware_query, db_name) | |
| if sources_with_pages == []: | |
| response, sources_with_pages = util.query_rag(query_text, db_name) | |
| chat_history[db_name].append((query_text, response)) | |
| return jsonify({'response': response, 'sources': sources_with_pages}) | |
| except Exception as e: | |
| return jsonify({'error': str(e)}), 500 | |
| def get_history(db_name): | |
| if db_name in chat_history: | |
| history = chat_history[db_name] | |
| return jsonify({'history': history}) | |
| else: | |
| return jsonify({'error': 'No history found for this db_name'}), 404 | |
| def preview(db_name): | |
| if db_name == '0': | |
| return render_template('default-preview.html') | |
| file_path = os.path.join(UPLOAD_FOLDER, db_name) | |
| ext = db_name.split('.')[-1] | |
| if ext == 'pdf': | |
| # return send_file(file_path, mimetype='application/pdf') | |
| return send_file( | |
| file_path, | |
| mimetype='application/pdf', | |
| as_attachment=False, | |
| ) | |
| else: | |
| return jsonify({'error': 'Unsupported file type'}), 400 | |
| from reportlab.lib.pagesizes import LETTER | |
| from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer | |
| from reportlab.lib.styles import getSampleStyleSheet | |
| def export_chat(db_name): | |
| if db_name not in chat_history: | |
| return jsonify({'error': 'No history found for this db_name'}), 404 | |
| history = chat_history[db_name] | |
| pdf_filename = f"chat_history_{db_name}.pdf" | |
| pdf_filepath = os.path.join(app.config['UPLOAD_FOLDER'], pdf_filename) | |
| doc = SimpleDocTemplate(pdf_filepath, pagesize=LETTER) | |
| styles = getSampleStyleSheet() | |
| content = [] | |
| content.append(Paragraph(f"Chat History: {db_name}", styles['Title'])) | |
| content.append(Spacer(1, 12)) | |
| for i, (user, bot) in enumerate(history): | |
| content.append(Paragraph(f"Q{i+1}: {user}", styles['Normal'])) | |
| content.append(Spacer(1, 6)) | |
| content.append(Paragraph(f"A{i+1}: {bot}", styles['Normal'])) | |
| content.append(Spacer(1, 12)) | |
| doc.build(content) | |
| return send_file(pdf_filepath, as_attachment=True, download_name=pdf_filename) | |
| if __name__ == '__main__': | |
| app.run() | |