1littlecoder's picture
initial import of code
049ec21 unverified
raw
history blame
4.9 kB
import gradio as gr
import os
from huggingface_hub import HfApi
import subprocess
def create_config_yaml(
model_name,
model1,
model1_layers,
model2,
model2_layers,
merge_method,
base_model,
parameters,
dtype,
):
yaml_config = (
f" slices:\n"
" - sources:\n"
f" - model: {model1}\n"
f" layer_range: {model1_layers}\n"
f" - model: {model2}\n"
f" layer_range: {model2_layers}\n"
f" merge_method: {merge_method}\n"
f" base_model: {base_model}\n"
f" parameters:\n"
f" {parameters}\n"
f" dtype: {dtype}\n"
)
print("Writing YAML config to 'config.yaml'...")
try:
with open("config.yaml", "w", encoding="utf-8") as f:
f.write(yaml_config)
print("File 'config.yaml' written successfully.")
except Exception as e:
print(f"Error writing file: {e}")
return yaml_config
def execute_merge_command():
# Define the command and arguments
command = "mergekit-yaml"
args = ["config.yaml", "./output-model-directory"]
# Execute the command
result = subprocess.run([command] + args, capture_output=True, text=True)
# Check if the command was executed successfully
if result.returncode == 0:
print("Command executed successfully")
return f"Output:\n{result.stdout}"
else:
print("Error in executing command")
return f"Error:\n{result.stderr}"
# Function to push to HF Hub (for the third tab)
def push_to_hf_hub(model_name, yaml_config):
# Username and API token setup
username = "arcee-ai"
api_token = os.getenv("HF_TOKEN")
if api_token is None:
return "Hugging Face API token not set. Please set the HF_TOKEN environment variable."
# Initialize HfApi with token
api = HfApi(token=api_token)
repo_id = f"{username}/{model_name}"
try:
# Create a new repository on Hugging Face
api.create_repo(repo_id=repo_id, repo_type="model")
# For demonstration, let's just create a yaml file inside a folder
# os.makedirs("merge", exist_ok=True)
with open("config.yaml", "w") as file:
file.write(yaml_config)
# Upload the contents of the 'merge' folder to the repository
api.upload_folder(repo_id=repo_id, folder_path="merge")
return f"Successfully pushed to HF Hub: {repo_id}"
except Exception as e:
return str(e)
# make sure to add the themes as well
with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo")) as app:
gr.Markdown("# Mergekit GUI") # Title for your Gradio app
with gr.Tab("Config YAML"):
# Inputs for the YAML config
with gr.Row():
model_name_input = gr.Textbox(label="Model Name")
model1_input = gr.Textbox(label="Model 1")
model1_layers_input = gr.Textbox(
label="Model 1 Layer Range", placeholder="[start, end]"
)
model2_input = gr.Textbox(label="Model 2")
model2_layers_input = gr.Textbox(
label="Model 2 Layer Range", placeholder="[start, end]"
)
merge_method_input = gr.Dropdown(
label="Merge Method", choices=["slerp", "linear"]
)
base_model_input = gr.Textbox(label="Base Model")
parameters_input = gr.Textbox(
label="Parameters", placeholder="Formatted as a list of dicts"
)
dtype_input = gr.Textbox(label="Data Type", value="bfloat16")
create_button = gr.Button("Create Config YAML")
create_button.click(
fn=create_config_yaml,
inputs=[
model_name_input,
model1_input,
model1_layers_input,
model2_input,
model2_layers_input,
merge_method_input,
base_model_input,
parameters_input,
dtype_input,
],
outputs=[],
)
with gr.Tab("Merge"):
# Placeholder for Merge tab contents
# Not yet tested
merge_output = gr.Textbox(label="Merge Output", interactive=False)
merge_button = gr.Button("Execute Merge Command")
merge_button.click(fn=execute_merge_command, inputs=[], outputs=merge_output)
with gr.Tab("Push to HF Hub"):
push_model_name_input = gr.Textbox(label="Model Name", interactive=False)
push_yaml_config_input = gr.Textbox(label="YAML Config", interactive=False)
push_output = gr.Textbox(label="Push Output", interactive=False)
push_button = gr.Button("Push to HF Hub")
push_button.click(
fn=push_to_hf_hub,
inputs=[push_model_name_input, push_yaml_config_input],
outputs=push_output,
)
app.launch()