support-system / app.py
ayush2917's picture
Update app.py
8d81f9d verified
import os
import time
import logging
from flask import Flask, request, jsonify, render_template
from datetime import datetime
from src.retrieval import DocumentRetriever
from src.generation import ResponseGenerator
from src.history import ChatHistory
app = Flask(__name__)
# Configuration
CONFIG = {
'cache_dir': '/cache',
'data_dir': '/app/data',
'max_history': 10
}
# Initialize logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Global state
models_loaded = False
start_time = time.time()
def initialize_services():
global models_loaded
try:
logger.info("Initializing services...")
# Initialize components
app.retriever = DocumentRetriever(
model_name='all-MiniLM-L6-v2',
cache_folder=CONFIG['cache_dir'],
data_path=os.path.join(CONFIG['data_dir'], 'rupeia_document.json')
)
app.generator = ResponseGenerator(
model_name='distilgpt2',
cache_dir=CONFIG['cache_dir']
)
app.history = ChatHistory(
storage_path=os.path.join(CONFIG['data_dir'], 'chat_history.json'),
max_entries=CONFIG['max_history']
)
models_loaded = True
logger.info(f"Services initialized in {time.time()-start_time:.2f}s")
except Exception as e:
logger.error(f"Initialization failed: {str(e)}")
raise
@app.route('/')
def home():
return render_template('index.html')
@app.route('/ask', methods=['POST'])
def chat():
if not models_loaded:
return jsonify({
"status": "initializing",
"message": "System is starting up, please try again shortly"
}), 503
try:
user_input = request.json.get('message', '').strip()
if not user_input:
return jsonify({"error": "Empty message"}), 400
# Retrieve relevant context
context = app.retriever.retrieve(user_input)
# Generate response
response = app.generator.generate(
prompt=user_input,
context=context
)
# Save to history
app.history.add_entry(
user_message=user_input,
bot_response=response
)
return jsonify({
"response": response,
"timestamp": datetime.utcnow().isoformat(),
"quickReplies": [] # You can add logic here to provide quick replies if needed
})
except Exception as e:
logger.error(f"Chat error: {str(e)}")
return jsonify({
"error": "An error occurred",
"details": str(e)
}), 500
@app.route('/api/history', methods=['GET'])
def get_history():
return jsonify(app.history.get_history())
if __name__ == '__main__':
initialize_services() # Initialize services before starting the app
app.run(host='0.0.0.0', port=8000)