{"repo": "0xkryvon/calm-15-chatbot", "files": {"app.py": {"8e3a9b15228796bb5a65bf6d50350424c2e19b38": {"t": 1785674065.9857936, "n": 3184, "h": "1808d8ed5a42749e", "c": "from flask import Flask, request, jsonify, make_response\nfrom flask_cors import CORS\nfrom llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings\nfrom llama_index.llms.deepseek import DeepSeek # New DeepSeek LLM integration\nimport os\nimport logging\nfrom dotenv import load_dotenv, dotenv_values\n\napp = Flask(__name__)\nload_dotenv()\nconfig = dotenv_values(\".env\")\n\nCORS(app, origins=[config.get(\"CLIENT_URL\", \"*\")])\n\n# Set DeepSeek API key\nDEEPSEEK_API_KEY = config.get(\"DEEPSEEK_API_KEY\")\nif not DEEPSEEK_API_KEY:\n app.logger.error(\"DEEPSEEK_API_KEY not found in .env file or environment variables.\")\n # Exit if API key is critical for startup\n raise ValueError(\"DeepSeek API key is required\")\n\n# Configure LlamaIndex settings with DeepSeek\nSettings.llm = DeepSeek(\n model=\"deepseek-chat\",\n api_key=DEEPSEEK_API_KEY,\n temperature=0.7\n)\n\n# Global variable for the index\nindex = None\n\ndef construct_index(directory_path):\n global index\n try:\n app.logger.info(f\"Constructing index from directory: {directory_path}\")\n documents = SimpleDirectoryReader(directory_path).load_data()\n if not documents:\n app.logger.error(f\"No documents found in directory: {directory_path}\")\n return None\n index = VectorStoreIndex.from_documents(documents)\n app.logger.info(\"Index constructed successfully.\")\n return index\n except Exception as e:\n app.logger.error(f\"Error constructing index: {e}\")\n return None\n\ndef generate_response(input_text):\n global index\n if index is None:\n app.logger.error(\"Index is not loaded.\")\n return \"Error: Chatbot index is not available. Please try again later.\"\n try:\n query_engine = index.as_query_engine()\n response = query_engine.query(input_text)\n return str(response)\n except Exception as e:\n app.logger.error(f\"Error generating response: {e}\")\n return \"Error: Could not generate a response.\"\n\n@app.route(\"/api/chatbot\", methods=[\"POST\"])\ndef chatbot():\n input_text = request.json.get(\"input_text\")\n if not input_text:\n return make_response(jsonify({\"error\": \"input_text is required\"}), 400)\n \n response_text = generate_response(input_text)\n return make_response(jsonify({\"response\": response_text}))\n\n@app.route(\"/api/chatbot/reload\", methods=[\"POST\"])\ndef reload_index_route():\n app.logger.info(\"Reloading index via API call...\")\n if construct_index(\"docs\"):\n return make_response(jsonify({\"message\": \"Index reloaded successfully\"}), 200)\n else:\n return make_response(jsonify({\"error\": \"Failed to reload index\"}), 500)\n\n@app.route(\"/api/chatbot/hello\", methods=[\"GET\"])\ndef hello():\n return make_response(jsonify({\n \"success\": True,\n \"message\": \"Hello from your DeepSeek-powered chatbot!\",\n \"data\": {}\n }), 200)\n\n# Initialize index\nif not os.path.exists(\"docs\"):\n app.logger.warning(\"The 'docs' directory does not exist. Please create it and add your documents.\")\n os.makedirs(\"docs\", exist_ok=True)\n\nconstruct_index(\"docs\")\n\nif __name__ == \"__main__\":\n app.run(debug=True, host=\"0.0.0.0\", port=5000)\n\n"}}}}