Spaces:
Running
Running
import gradio as gr | |
import gspread | |
from oauth2client.service_account import ServiceAccountCredentials | |
import json | |
import os | |
import requests | |
# Load Google Sheets credentials from secrets | |
creds_json = os.getenv("GOOGLE_SHEETS_KEY_JSON") | |
creds_dict = json.loads(creds_json) | |
# Google Sheets setup | |
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] | |
creds = ServiceAccountCredentials.from_json_keyfile_dict(creds_dict, scope) | |
client = gspread.authorize(creds) | |
sheet = client.open("QF - Quant Request").sheet1 # Use the correct sheet name | |
def validate_repo(link): | |
"""Check if the repository exists on Hugging Face.""" | |
# Extract repo_id from the link (format: {username}/{model_name} or {dataset_name}) | |
repo_id = link.split("https://huggingface.co/")[-1].strip("/") | |
url = f"https://huggingface.co/api/models/{repo_id}" # Adjust the URL for datasets if needed | |
response = requests.head(url) | |
return response.status_code == 200 | |
def check_quant_exists(link): | |
"""Check if the quantization request already exists in the Google Sheet.""" | |
extracted_text = link.split("https://huggingface.co/")[-1] | |
existing_texts = sheet.col_values(1) # Assuming the extracted text is in the first column | |
return extracted_text in existing_texts | |
def check_quant_factory_quant_exists(link): | |
"""Check if a GGUF quantized model exists in the QuantFactory repository.""" | |
# Extract the model name from the original link | |
model_name = link.split('/')[-1] # Get the last item from the split list, which is the model name | |
# Create the QuantFactory GGUF quant link | |
quant_factory_link = f"https://huggingface.co/QuantFactory/{model_name}-GGUF" | |
# Check if the QuantFactory GGUF repo exists | |
response = requests.head(quant_factory_link) | |
if response.status_code == 200: | |
return True, quant_factory_link | |
else: | |
return False, quant_factory_link | |
def submit_link(link): | |
# Normalize the input link | |
if not link.startswith("https://huggingface.co"): | |
link = f"https://huggingface.co/{link}" | |
# Validate the repo | |
if not validate_repo(link): | |
return "Invalid model or repository link. Please provide a valid Hugging Face link." | |
# Check if the GGUF quantized model already exists in QuantFactory | |
quant_exists, quant_link = check_quant_factory_quant_exists(link) | |
if quant_exists: | |
model_name = link.split('/')[-1] # Extract the model name | |
# Return a formatted Markdown string to create a clickable hyperlink | |
return f"Quant already exists at [QuantFactory/{model_name}-GGUF]({quant_link})." | |
# Check if the quant request already exists in the Google Sheet | |
if check_quant_exists(link): | |
return "Quant requests have already been made for this model." | |
# Extract text after "huggingface.co/" | |
extracted_text = link.split("https://huggingface.co/")[-1] | |
# Append the row with the extracted text and default status "Pending" | |
row_index = len(sheet.get_all_values()) + 1 | |
sheet.append_row(["", ""]) # Append an empty row first to ensure correct row index | |
# Set the hyperlink formula in the first column | |
sheet.update_cell(row_index, 1, f'=HYPERLINK("{link}", "{extracted_text}")') | |
# Copy content from cell B2 to the new row in column B | |
b2_value = sheet.cell(2, 2).value | |
sheet.update_cell(row_index, 2, b2_value) | |
return "Request submitted successfully." | |
# Gradio Interface | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(scale=1): # Left column | |
gr.Markdown("## QuantFactory - Model Request") | |
gr.Markdown("*NOTE: Due to limited resources, currently we can only quantize models with upto 20B parameters.*") | |
link_input = gr.Textbox(label="Hugging Face Link") | |
submit_button = gr.Button("Submit") | |
result = gr.Markdown() # Use Markdown to render the output as a clickable hyperlink | |
submit_button.click(fn=submit_link, inputs=link_input, outputs=result) | |
with gr.Column(scale=1): # Right column | |
gr.Image("image.png") # Display the image on the right | |
demo.launch() | |