Download llm.py from mobinln/csv2sql: direct link, hf CLI and curl.
- Browser
- Download file 2.34 kB
-
https://huggingface.co/spaces/mobinln/csv2sql/resolve/a0141bf0206d268281fb14cd5ccade0b166dbcea/llm.py
- Command line
-
hf download hf://spaces/mobinln/csv2sql@a0141bf0206d268281fb14cd5ccade0b166dbcea/llm.py
-
curl -L -o llm.py https://huggingface.co/spaces/mobinln/csv2sql/resolve/a0141bf0206d268281fb14cd5ccade0b166dbcea/llm.py
2.34 kB
| import streamlit as st | |
| from llama_cpp import Llama | |
| from sql import get_table_schema | |
| def load_llm(repo_id, filename): | |
| llm = Llama.from_pretrained( | |
| repo_id=repo_id, | |
| filename=filename, | |
| verbose=True, | |
| use_mmap=True, | |
| use_mlock=True, | |
| n_threads=4, | |
| n_threads_batch=4, | |
| n_ctx=8000, | |
| ) | |
| print(f"{repo_id} loaded successfully. ✅") | |
| return llm | |
| def generate_system_prompt(table_name, table_schema): | |
| """ | |
| Generates a prompt to provide context about a table's schema for LLM to convert natural language to SQL. | |
| Args: | |
| table_name (str): The name of the table. | |
| table_schema (list): A list of tuples where each tuple contains information about the columns in the table. | |
| Returns: | |
| str: The generated prompt to be used by the LLM. | |
| """ | |
| prompt = f"""You are an expert in writing SQL queries for relational databases, specially sqlite. | |
| You will be provided with a database schema and a natural | |
| language question, and your task is to generate an accurate SQL query. | |
| The database has a table named '{table_name}' with the following schema:\n\n""" | |
| prompt += "Columns:\n" | |
| for col in table_schema: | |
| column_name = col[1] | |
| column_type = col[2] | |
| prompt += f"- {column_name} ({column_type})\n" | |
| prompt += "\nGenerate a SQL query based on the following natural language question. ONLY return the SQL query and nothing else." | |
| return prompt | |
| # Streamed response emulator | |
| def response_generator(llm, messages, question, table_name, db_name): | |
| table_schema = get_table_schema(db_name, table_name) | |
| llm_prompt = generate_system_prompt(table_name, table_schema) | |
| user_prompt = f"""Question: {question}""" | |
| print(messages, llm_prompt, user_prompt) | |
| history = [{"content": llm_prompt.format(table_name=table_name), "role": "system"}] | |
| for val in messages: | |
| history.append(val) | |
| history.append({"role": "user", "content": user_prompt}) | |
| response = llm.create_chat_completion( | |
| messages=history, | |
| max_tokens=2048, | |
| temperature=0.7, | |
| top_p=0.95, | |
| ) | |
| answer = response["choices"][0]["message"]["content"] | |
| query = answer.replace("```sql", "").replace("```", "") | |
| query = query.strip() | |
| return query | |