App.py(Python Web framework using flask)

 from flask import Flask, request, jsonify, render_template

import json
from difflib import get_close_matches
from typing import Optional, List, Dict

# File path as a constant
KNOWLEDGE_BASE_FILE = 'knowledgeBase.json'

app = Flask(__name__)

def load_knowledge_base(file_path: str) -> Dict:
    with open(file_path, 'r') as file:
        data = json.load(file)
    return data

def save_knowledge_base(file_path: str, data: Dict) -> None:
    with open(file_path, 'w') as file:
        json.dump(data, file, indent=2)

def find_best_match(user_question: str, questions: List[str]) -> Optional[str]:
    matches = get_close_matches(user_question, questions, n=1, cutoff=0.75)
    return matches[0] if matches else None

def get_answer_for_question(question: str, knowledge_base: Dict) -> Optional[str]:
    return knowledge_base["questions"].get(question)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/chat', methods=['POST'])
def chat():
    user_input = request.json.get('message')
    if not user_input:
        return jsonify({"error": "No message provided"}), 400

    knowledge_base = load_knowledge_base(KNOWLEDGE_BASE_FILE)
    knowledge_base["questions"] = {q["question"]: q["answer"] for q in knowledge_base["questions"]}

    all_questions = list(knowledge_base["questions"].keys())
    best_match = find_best_match(user_input, all_questions)

    if best_match:
        answer = get_answer_for_question(best_match, knowledge_base)
        return jsonify({"response": answer})
    else:
        return jsonify({"response": "I don't know the answer to that. Can you teach me?", "needs_training": True})

@app.route('/train', methods=['POST'])
def train():
    user_input = request.json.get('message')
    new_answer = request.json.get('answer')
    if not user_input or not new_answer:
        return jsonify({"error": "No message or answer provided"}), 400

    knowledge_base = load_knowledge_base(KNOWLEDGE_BASE_FILE)
    knowledge_base["questions"].append({"question": user_input, "answer": new_answer})
    save_knowledge_base(KNOWLEDGE_BASE_FILE, {"questions": knowledge_base["questions"]})

    return jsonify({"response": "Thank you! I learned a new response!"})

if __name__ == '__main__':
    app.run(debug=True)

Comments

Popular posts from this blog

styles.css