Spaces:
No application file
No application file
File size: 1,804 Bytes
6e5a6d2 | 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 | 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) |