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)