File size: 3,563 Bytes
ac66ae2 cbbb9fd 7465957 cbbb9fd df44c11 083fde1 7465957 c8534fb 251d88f 7465957 c8534fb 251d88f 7465957 251d88f c8534fb df44c11 467c88a df44c11 467c88a df44c11 df9a90e 186a997 df9a90e 483c87c df44c11 9ae3ad1 df44c11 92146e5 cbbb9fd 2acdb22 c8534fb 251d88f df44c11 92146e5 c8534fb 251d88f cbbb9fd 251d88f cbbb9fd 251d88f cbbb9fd 0fb434b 251d88f c8534fb 2b03f9f cd72e2e df44c11 a184b8b 2371111 df44c11 94ca6da cd72e2e df44c11 a184b8b 2371111 083fde1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import gradio as gr
import os
from datasets import load_dataset
from huggingface_hub import HfApi, login
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
# Run on NVidia A10G Large (sleep after 1 hour)
# Model IDs:
#
# google/gemma-2-9b-it
# meta-llama/Meta-Llama-3-8B-Instruct
# Datasets:
#
# gretelai/synthetic_text_to_sql
profile = "bstraehle"
action_1 = "Prompt base model"
action_2 = "Prompt fine-tuned model"
action_3 = "Fine-tune base model"
system_prompt = "You are a text to SQL query translator. Given a question in English, generate a SQL query based on the provided SCHEMA. Do not generate any additional text. SCHEMA: "
user_prompt = "What is the total trade value and average price for each trader and stock in the trade_history table?"
schema = "CREATE TABLE trade_history (id INT, trader_id INT, stock VARCHAR(255), price DECIMAL(5,2), quantity INT, trade_time TIMESTAMP);"
base_model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
fine_tuned_model_id = "bstraehle/Meta-Llama-3-8B-Instruct"
dataset = "gretelai/synthetic_text_to_sql"
def prompt_model(model_id, system_prompt, user_prompt):
pipe = pipeline("text-generation", model=model_id)
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt},
{"role": "assistant", "content": ""}
]
output = pipe(messages, model_kwargs={"torch_dtype": torch.bfloat16}, device="cuda")
return output[0]["generated_text"][-1]["content"]
def fine_tune_model(model_id):
tokenizer = download_model(model_id)
model_repo_name = upload_model(model_id, tokenizer)
return model_repo_name
def download_model(model_id):
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
model.save_pretrained(model_id)
return tokenizer
#def download_dataset(dataset):
# ds = load_dataset(dataset)
# return ""
def upload_model(model_id, tokenizer):
model_name = model_id[model_id.rfind('/')+1:]
model_repo_name = f"{profile}/{model_name}"
login(token=os.environ["HF_TOKEN"])
api = HfApi()
api.create_repo(repo_id=model_repo_name)
api.upload_folder(
folder_path=model_id,
repo_id=model_repo_name
)
tokenizer.push_to_hub(model_repo_name)
return model_repo_name
def process(action, system_prompt, user_prompt, schema, base_model_id, fine_tuned_model_id, dataset):
if action == action_1:
result = prompt_model(base_model_id, system_prompt, user_prompt)
elif action == action_2:
result = prompt_model(fine_tuned_model_id, system_prompt, user_prompt)
elif action == action_3:
result = fine_tune_model(base_model_id)
return result
demo = gr.Interface(fn=process,
inputs=[gr.Radio([action_1, action_2, action_3], label = "Action", value = action_2),
gr.Textbox(label = "System Prompt", value = system_prompt, lines = 2),
gr.Textbox(label = "User Prompt", value = user_prompt, lines = 2),
gr.Textbox(label = "Schema", value = schema, lines = 2),
gr.Textbox(label = "Base Model ID", value = base_model_id, lines = 1),
gr.Textbox(label = "Fine-Tuned Model ID", value = fine_tuned_model_id, lines = 1),
gr.Textbox(label = "Dataset", value = dataset, lines = 1)],
outputs=[gr.Textbox(label = "Completion")])
demo.launch() |