from flask import Flask, request, jsonify import pandas as pd import logging from chatbot import preprocess_query, Retriever, IntentClassifier, ResponseGenerator app = Flask(__name__) logging.basicConfig(filename='server.log', level=logging.INFO, format='%(asctime)s - %(message)s') dataset = pd.read_csv("dataset.csv") dataset["question"] = dataset["question"].str.lower().str.replace(r"[^\w\s?]", "", regex=True) dataset["answer"] = dataset["answer"].str.replace(r"\*{2}([^*]+)\*{2}", r"*\1*", regex=True) dataset["intent"] = dataset["intent"].str.lower().replace("greeting", "other") retriever = Retriever(dataset) classifier = IntentClassifier() generator = ResponseGenerator() @app.route('/query', methods=['POST']) def handle_query(): try: data = request.get_json() query = data.get('question', '') if not query: return jsonify({'error': 'No question provided'}), 400 logging.info(f"Received query: {query}") preprocessed_query = preprocess_query(query) retrieved_q, similarity, intent = retriever.retrieve(query) if not retrieved_q: intent = classifier.predict(preprocessed_query) logging.info(f"Fallback intent: {intent}") response, top_matches = generator.generate(query, retrieved_q, dataset, intent, similarity) logging.info(f"Response: {response}") return jsonify({ 'response': response, 'similarity': float(similarity), 'intent': intent, 'retrieved_question': retrieved_q if retrieved_q else 'none' }) except Exception as e: logging.error(f"Error processing query: {str(e)}") return jsonify({'error': str(e)}), 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)