| import logging | |
| import gradio as gr | |
| from .nlp import NLPToSQL | |
| from .db import Database | |
| nlp = NLPToSQL() | |
| db = Database() | |
| logging.basicConfig(level=logging.INFO) | |
| def chatbot(user_query): | |
| try: | |
| sql = nlp.query_to_sql(user_query) | |
| logging.info(f"Generated SQL: {sql}") | |
| result = db.execute_query(sql) | |
| if 'error' in result: | |
| return f"β Error: {result['error']}" | |
| if not result['data']: | |
| return "β οΈ No data found." | |
| # Formatting SQL output | |
| response = "**Query:**\n" + sql + "\n\n" | |
| response += "**Result:**\n" | |
| response += " | ".join(result['columns']) + "\n" | |
| response += "-"*50 + "\n" | |
| for row in result['data']: | |
| response += " | ".join(str(cell) for cell in row) + "\n" | |
| return response | |
| except Exception as e: | |
| logging.error(f"Error: {str(e)}") | |
| return f"β Error: {str(e)}" | |
| demo = gr.Interface( | |
| fn=chatbot, | |
| inputs=gr.Textbox(lines=2, placeholder="Ask your database anything..."), | |
| outputs="markdown", | |
| title="SQL Chat Assistant", | |
| description="Enter a natural language question, and get the corresponding SQL query & result." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", server_port=7860) | |
| # Flask-based application can also be used | |
| # import logging | |
| # from flask import Flask, request, render_template_string | |
| # from .nlp import NLPToSQL | |
| # from .db import Database | |
| # app = Flask(__name__) | |
| # nlp = NLPToSQL() | |
| # db = Database() | |
| # logging.basicConfig(level=logging.INFO) | |
| # HTML_TEMPLATE = """ | |
| # <!DOCTYPE html> | |
| # <html> | |
| # <head><title> Chat Assistant </title></head> | |
| # <body> | |
| # <h1> Database Chat Assistant</h1> | |
| # <form method="POST"> | |
| # <input type="text" name="query" placeholder= "Enter your query..." size="50"> | |
| # <button type="submit">Ask</button> | |
| # </form> | |
| # {% if response %} | |
| # <h3> Response: </h3> | |
| # <pre>{{ response }}</pre> | |
| # {% endif %} | |
| # {% if error %} | |
| # <p style = "color:red;">{{ error }} </p> | |
| # {% endif %} | |
| # </body> | |
| # </html> | |
| # """ | |
| # @app.route("/", methods=["GET", "POST"]) | |
| # def index(): | |
| # if request.method == 'POST': | |
| # user_query = request.form['query'] | |
| # try: | |
| # sql = nlp.query_to_sql(user_query) | |
| # logging.info(f"Generated SQL: {sql}") | |
| # result = db.execute_query(sql) | |
| # if 'error' in result: | |
| # return render_template_string(HTML_TEMPLATE, error=result['error']) | |
| # if not result['data']: | |
| # return render_template_string(HTML_TEMPLATE, error="No data found") | |
| # response = " | ".join(result['columns']) + "\n" | |
| # response += "-"*50 + "\n" | |
| # for row in result['data']: | |
| # response += " | ".join(str(cell) for cell in row) + "\n" | |
| # return render_template_string(HTML_TEMPLATE, response=response) | |
| # except Exception as e: | |
| # logging.error(f"Error: {str(e)}") | |
| # return render_template_string(HTML_TEMPLATE, error=f"Error: {str(e)}") | |
| # return render_template_string(HTML_TEMPLATE) | |
| # if __name__ == "__main__": | |
| # app.run(debug=True) |