import os import gradio as gr from huggingface_hub import InferenceClient """ For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co./docs/huggingface_hub/v0.22.2/en/guides/inference """ hf_token = os.getenv("user_token") # client = InferenceClient("Qwen/Qwen2.5-Coder-3B-Instruct", token=hf_token) client = InferenceClient("defog/llama-3-sqlcoder-8b", token=hf_token) def respond( message, history: list[tuple[str, str]], system_message, max_tokens, temperature, top_p, ): # sytems = """ # ### Instructions: # Your task is to convert a question into a SQL query, given a Postgres database schema. # Adhere to these rules: # - **Deliberately go through the question and database schema word by word** to appropriately answer the question # - **Use Table Aliases** to prevent ambiguity. For example, `SELECT table1.col1, table2.col1 FROM table1 JOIN table2 ON table1.id = table2.id`. # - When creating a ratio, always cast the numerator as float # ### Input: # Generate a SQL query that answers the question `{question}`. # This query will run on a database whose schema is represented in this string: # CREATE TABLE products ( # product_id INTEGER PRIMARY KEY, -- Unique ID for each product # name VARCHAR(50), -- Name of the product # price DECIMAL(10,2), -- Price of each unit of the product # quantity INTEGER -- Current quantity in stock # ); # CREATE TABLE customers ( # customer_id INTEGER PRIMARY KEY, -- Unique ID for each customer # name VARCHAR(50), -- Name of the customer # address VARCHAR(100) -- Mailing address of the customer # ); # CREATE TABLE salespeople ( # salesperson_id INTEGER PRIMARY KEY, -- Unique ID for each salesperson # name VARCHAR(50), -- Name of the salesperson # region VARCHAR(50) -- Geographic sales region # ); # CREATE TABLE sales ( # sale_id INTEGER PRIMARY KEY, -- Unique ID for each sale # product_id INTEGER, -- ID of product sold # customer_id INTEGER, -- ID of customer who made purchase # salesperson_id INTEGER, -- ID of salesperson who made the sale # sale_date DATE, -- Date the sale occurred # quantity INTEGER -- Quantity of product sold # ); # CREATE TABLE product_suppliers ( # supplier_id INTEGER PRIMARY KEY, -- Unique ID for each supplier # product_id INTEGER, -- Product ID supplied # supply_price DECIMAL(10,2) -- Unit price charged by supplier # ); # -- sales.product_id can be joined with products.product_id # -- sales.customer_id can be joined with customers.customer_id # -- sales.salesperson_id can be joined with salespeople.salesperson_id # -- product_suppliers.product_id can be joined with products.product_id # ### Response: # Based on your instructions, here is the SQL query I have generated to answer the question `{question}`: # ```sql # """ sytems2= """ <|begin_of_text|><|start_header_id|>user<|end_header_id|> Generate a SQL query to answer this question: `{question}` DDL statements: CREATE TABLE products ( product_id INTEGER PRIMARY KEY, -- Unique ID for each product name VARCHAR(50), -- Name of the product price DECIMAL(10,2), -- Price of each unit of the product quantity INTEGER -- Current quantity in stock ); CREATE TABLE customers ( customer_id INTEGER PRIMARY KEY, -- Unique ID for each customer name VARCHAR(50), -- Name of the customer address VARCHAR(100) -- Mailing address of the customer ); CREATE TABLE salespeople ( salesperson_id INTEGER PRIMARY KEY, -- Unique ID for each salesperson name VARCHAR(50), -- Name of the salesperson region VARCHAR(50) -- Geographic sales region ); CREATE TABLE sales ( sale_id INTEGER PRIMARY KEY, -- Unique ID for each sale product_id INTEGER, -- ID of product sold customer_id INTEGER, -- ID of customer who made purchase salesperson_id INTEGER, -- ID of salesperson who made the sale sale_date DATE, -- Date the sale occurred quantity INTEGER -- Quantity of product sold ); CREATE TABLE product_suppliers ( supplier_id INTEGER PRIMARY KEY, -- Unique ID for each supplier product_id INTEGER, -- Product ID supplied supply_price DECIMAL(10,2) -- Unit price charged by supplier ); -- sales.product_id can be joined with products.product_id -- sales.customer_id can be joined with customers.customer_id -- sales.salesperson_id can be joined with salespeople.salesperson_id -- product_suppliers.product_id can be joined with products.product_id <|eot_id|><|start_header_id|>assistant<|end_header_id|> The following SQL query best answers the question `{question}`: ```sql """ messages = [{"role": "system", "content": sytems2}] for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) messages.append({"role": "user", "content": message}) response = "" for message in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = message.choices[0].delta.content response += token yield response """ For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface """ demo = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox(value="You are a friendly Chatbot.", label="System message"), gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), gr.Slider( minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)", ), ], ) if __name__ == "__main__": demo.launch()