| from dotenv import load_dotenv |
| import os |
| import gradio as gr |
| from groq import Groq |
|
|
| load_dotenv() |
| api = os.getenv("groq_api_key") |
|
|
| def create_prompt(user_query, table_metadata): |
| system_prompt = """ |
| You are a SQL query generator specialized in generating SQL queries for a single table at a time. |
| Your task is to accurately convert natural language queries into SQL statements based on the user's intent and the provided table metadata. |
| |
| Rules: |
| - Single Table Only: Use only the table in the metadata. |
| - Metadata-Based Validation: Use only columns in the metadata. |
| - User Intent: Support filters, grouping, sorting, etc. |
| - SQL Syntax: Use standard SQL (DuckDB compatible). |
| - Output only valid SQL. No extra commentary. |
| |
| Input: |
| User Query: {user_query} |
| Table Metadata: {table_metadata} |
| |
| Output: |
| SQL Query (on a single line, nothing else). |
| """ |
| return system_prompt.strip(), f"User Query: {user_query}\nTable Metadata: {table_metadata}" |
|
|
| def generate_output(system_prompt, user_prompt): |
| client = Groq(api_key=api) |
| chat_completion = client.chat.completions.create( |
| messages=[ |
| {"role": "system", "content": system_prompt}, |
| {"role": "user", "content": user_prompt} |
| ], |
| model="llama3-70b-8192" |
| ) |
| response = chat_completion.choices[0].message.content.strip() |
| return response if response.lower().startswith("select") else "Can't perform the task at the moment." |
|
|
| |
| def response(payload): |
| user_query = payload.get("question", "") |
| table_metadata = payload.get("schema", "") |
| system_prompt, user_prompt = create_prompt(user_query, table_metadata) |
| return generate_output(system_prompt, user_prompt) |
|
|
| demo = gr.Interface( |
| fn=response, |
| inputs=gr.JSON(label="Input JSON (question, schema)"), |
| outputs="text", |
| title="SQL Generator (Groq + LLaMA3)", |
| description="Input: question & table metadata. Output: SQL using dynamic schema." |
| ) |
|
|
| demo.launch() |
|
|