File size: 2,399 Bytes
33d02c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from flask import Flask, request, jsonify, render_template,send_from_directory
from flask_cors import CORS
import logging
from query_ai import query_gemini
from knowledge_base import search_knowledge_base, save_to_knowledge_base
from prompts import get_prompt
import os
# from speech_to_text import recognize_speech

# Initialize Flask app
app = Flask(__name__, static_folder="Static")
CORS(app, resources={r"/*": {"origins": "*"}})

# Configure logging
logging.basicConfig(level=logging.DEBUG)

@app.route("/")
def home():
    # return "Chatbot is running"
    return render_template("index.html")

@app.route('/chat', methods=['POST'])
def chat():
    try:
        data = request.json
        user_input = data.get("message", "").strip()
        query_type = data.get("format", "default")

        if not user_input:
            return jsonify({"response": "Please provide a valid message."})

        # ๐Ÿ”น Step 1: Check predefined prompts
        prompt_response = get_prompt(user_input.lower()) or "Let me find an answer for you."

        # ๐Ÿ”น Step 2: Search the knowledge base
        kb_response = search_knowledge_base(user_input)

        # ๐Ÿ”น Step 3: Construct final prompt
        final_prompt = f"{prompt_response}\n\nUser Query: {user_input}"
        if kb_response:
            final_prompt = f"{prompt_response}\n\nBased on the knowledge base: {kb_response}\n\nUser Query: {user_input}"

        # ๐Ÿ”น Step 4: Generate AI response
        response = query_gemini(final_prompt, query_type=query_type)

        # ๐Ÿ”น Step 5: Save response if it's new
        if not kb_response:
            save_to_knowledge_base(user_input, response)

        return jsonify({"response": response})

    except Exception as e:
        logging.error(f"Error in /chat endpoint: {e}")
        return jsonify({"response": "An error occurred while processing your request."})

# @app.route("/script/chatbot.js")
# def chatbot_script():
#     return send_from_directory("static", "chatbot.js")

@app.route('/speech', methods=['GET'])
def speech_to_text():
    """Endpoint to recognize speech and return text."""
    text = recognize_speech()
    return jsonify({"recognized_text": text})

if __name__ == '__main__':
    # port = int(os.environ.get("PORT", 10000))  # Use Render's default port
    app.run(host="0.0.0.0", debug=True)