| | 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() |
| |
|