Spaces:
Sleeping
Sleeping
import gradio as gr | |
from huggingface_hub import InferenceClient | |
import os | |
from groq import Groq | |
from sqlalchemy import text | |
""" | |
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 | |
""" | |
import pandas as pd | |
import pandasql | |
from collections import defaultdict | |
# Create a sample DataFrame | |
data = [ | |
{"Name": "John", "Age": 25, "Gender": "male", "Votes": 100}, | |
{"Name": "Mary", "Age": 30, "Gender": "female", "Votes": 200}, | |
{"Name": "Bob", "Age": 28, "Gender": "male", "Votes": 150}, | |
{"Name": "Alice", "Age": 24, "Gender": "female", "Votes": 120}, | |
] | |
# types = defaultdict(str,'Votes'=int,'Votes Percentage'=float) | |
# {'Votes':int,'Votes Percentage':float} | |
# | |
# Create a pandas dataframe from the list of dictionaries | |
df = pd.read_csv('election_results.csv',dtype={'Votes':'int64'}) | |
def respond( | |
message, | |
history: list[tuple[str, str]], | |
): | |
client = Groq() | |
messages = [ | |
{ | |
"role": "system", | |
"content": "You are an election result analysis bot. Your task is to convert the user's natural language query into a SQL SELECT statement suitable for a pandas DataFrame named df.\n\nAvailable Columns:\n\nCandidate (string)\nParty (string)\nVotes (integer)\nVotes Percentage (decimal)\nConstituency (string)\nState (string)\n\nCase-Insensitive Text Comparisons:\n\nUse UPPER function to convert text columns (Candidate, Party, Constituency, State) to uppercase for case-insensitive comparisons.\nEmploy LIKE operator with wildcards (%) for pattern matching when appropriate.\n\nUser Input:\n\nThe system will provide the user's query in natural language.\n\nOutput Format:\n\nGenerate the SQL SELECT statement only, starting with SELECT. Do not add any other extra instruction text, your output will be directly executed, so send only the SQL Statement\n\nExample:\n\nUser Input: Find all candidates from Coimbatore who received more than 50% of the votes.\n\nYour Output:\nSELECT * FROM df\nWHERE UPPER(State) = 'COIMBATORE' AND Votes Percentage > 50" | |
} | |
] | |
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}) | |
completion = client.chat.completions.create( | |
model="llama3-70b-8192", | |
messages=messages, | |
temperature=1, | |
max_tokens=2048, | |
top_p=1, | |
stream=False, | |
stop=None, | |
) | |
sql_command = completion.choices[0].message.content | |
print(sql_command) | |
if sql_command.startswith('SELECT'): | |
result = pandasql.sqldf(sql_command, globals()) | |
yield result.to_string() | |
else: | |
yield str(sql_command) | |
""" | |
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface | |
""" | |
demo = gr.ChatInterface( | |
respond | |
) | |
if __name__ == "__main__": | |
demo.launch() |