Spaces:
No application file
No application file
| 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() | |
| 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) |