| import os
|
| from flask import Flask, request, jsonify, render_template
|
| from transformers import pipeline
|
| import mysql.connector
|
| from groq import Groq
|
|
|
| app = Flask(__name__)
|
|
|
|
|
| pipe = pipeline("text-generation", model="defog/sqlcoder-7b-2")
|
|
|
|
|
| groq_client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
|
|
|
|
|
| DB_CONFIG = {
|
| 'host': 'auth-db579.hstgr.io',
|
| 'user': 'u121769371_ki_aiml_test',
|
| 'password': os.environ.get("DB_PASSWORD"),
|
| 'database': 'u121769371_ki_aiml_test'
|
| }
|
|
|
| def generate_sql(text):
|
| output = pipe(text, max_new_tokens=50)
|
| return output[0]['generated_text']
|
|
|
| def execute_query(query):
|
| try:
|
| connection = mysql.connector.connect(**DB_CONFIG)
|
| cursor = connection.cursor()
|
| cursor.execute(query)
|
| results = cursor.fetchall()
|
| cursor.close()
|
| connection.close()
|
| return results
|
| except mysql.connector.Error as err:
|
| print(f"Error: {err}")
|
| return None
|
|
|
| @app.route('/')
|
| def index():
|
| return render_template('index.html')
|
|
|
| @app.route('/chatbot', methods=['POST'])
|
| def chatbot():
|
| data = request.json
|
| user_query = data.get('text')
|
|
|
| if not user_query:
|
| return jsonify({"error": "No query provided"}), 400
|
|
|
| try:
|
|
|
| sql_query = generate_sql(user_query)
|
|
|
|
|
| query_result = execute_query(sql_query)
|
|
|
| if query_result is None:
|
| return jsonify({"error": "Database query execution failed"}), 500
|
|
|
|
|
| prompt = f"Original query: {user_query}\nSQL query: {sql_query}\nQuery result: {query_result}\nPlease provide a natural language summary of the query result."
|
|
|
| chat_completion = groq_client.chat.completions.create(
|
| messages=[
|
| {
|
| "role": "user",
|
| "content": prompt,
|
| }
|
| ],
|
| model="llama3-8b-8192",
|
| )
|
|
|
| natural_language_response = chat_completion.choices[0].message.content
|
|
|
| return jsonify({"response": natural_language_response})
|
|
|
| except Exception as e:
|
| return jsonify({"error": str(e)}), 500
|
|
|
| if __name__ == '__main__':
|
| app.run(host='0.0.0.0', port=8000)
|
|
|