Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 4,631 Bytes
bae4131 3119795 7ccf9d4 3119795 7ccf9d4 d1ed69b 7ccf9d4 d1ed69b 7ccf9d4 bae4131 6454c0e d1ed69b 6454c0e 3119795 7ccf9d4 bae4131 7ccf9d4 bae4131 3d76e98 7ccf9d4 23510fc 7ccf9d4 3d76e98 4a9b060 3d76e98 7ccf9d4 3d76e98 7ccf9d4 23510fc 7ccf9d4 bae4131 23510fc 7ccf9d4 23510fc 7ccf9d4 816857c 7ccf9d4 23510fc 7ccf9d4 bae4131 d1ed69b 7ccf9d4 b975b7b 7ccf9d4 bae4131 b975b7b d1ed69b 7ccf9d4 |
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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
import os
import sys
import time # Needed for file existence check
import gradio as gr
import yaml
from loguru import logger
from huggingface_hub import whoami
from yourbench_space.config import generate_and_save_config
from yourbench_space.utils import (
CONFIG_PATH,
UPLOAD_DIRECTORY,
SubprocessManager,
save_files,
)
UPLOAD_DIRECTORY.mkdir(parents=True, exist_ok=True)
logger.remove()
logger.add(sys.stderr, level="INFO")
command = ["uv", "run", "yourbench", f"--config={CONFIG_PATH}"]
manager = SubprocessManager(command)
def generate_and_return(hf_org, hf_prefix):
"""Handles config generation and validates file existence before enabling download"""
generate_and_save_config(hf_org, hf_prefix) # No need to store the return value
# Wait until the config file is actually created
for _ in range(5):
if CONFIG_PATH.exists():
break
time.sleep(0.5)
if CONFIG_PATH.exists():
return "✅ Config saved!", gr.update(value=str(CONFIG_PATH), visible=True, interactive=True)
else:
return "❌ Config generation failed.", gr.update(visible=False, interactive=False)
def prepare_task(oauth_token: gr.OAuthToken | None, model_token: str):
"""Prepares and starts the subprocess with environment variables."""
new_env = os.environ.copy()
if oauth_token:
new_env["HF_TOKEN"] = oauth_token.token
new_env["MODEL_API_KEY"] = model_token
manager.start_process(custom_env=new_env)
def update_hf_org_dropdown(oauth_token: gr.OAuthToken | None):
"""Updates the dropdown with the user's Hugging Face organizations"""
if oauth_token is None:
print("Please deploy this on Spaces and log in to view the list of available organizations")
return gr.Dropdown([], label="Organization")
try:
user_info = whoami(oauth_token.token)
org_names = [org["name"] for org in user_info.get("orgs", [])]
user_name = user_info.get("name", "Unknown User")
org_names.insert(0, user_name)
return gr.Dropdown(org_names, value=user_name, label="Organization")
except Exception as e:
print(f"Error retrieving user info: {e}")
return gr.Dropdown([], label="Organization")
def enable_button(files):
"""Enables the button if files are uploaded"""
return gr.update(interactive=bool(files))
with gr.Blocks() as app:
gr.Markdown("## YourBench Setup")
with gr.Row():
login_btn = gr.LoginButton()
with gr.Tab("Setup"):
with gr.Row():
with gr.Accordion("Hugging Face Settings"):
hf_org_dropdown = gr.Dropdown(choices=[], label="Organization", allow_custom_value=True)
app.load(update_hf_org_dropdown, inputs=None, outputs=hf_org_dropdown)
hf_dataset_prefix = gr.Textbox(label="Dataset Prefix", value="yourbench", info="Prefix applied to all datasets")
with gr.Accordion("Upload documents"):
file_input = gr.File(label="Upload text files", file_count="multiple", file_types=[".txt", ".md", ".html"])
output = gr.Textbox(label="Log")
file_input.upload(lambda files: save_files([file.name for file in files]), file_input, output)
preview_button = gr.Button("Generate New Config", interactive=False)
log_message = gr.Textbox(label="Log Message", visible=True)
download_button = gr.File(label="Download Config", visible=False, interactive=False)
file_input.change(enable_button, inputs=file_input, outputs=preview_button)
preview_button.click(
generate_and_return,
inputs=[hf_org_dropdown, hf_dataset_prefix],
outputs=[log_message, download_button],
)
with gr.Tab("Run Generation"):
log_output = gr.Code(label="Log Output", language=None, lines=20, interactive=False)
log_timer = gr.Timer(0.05, active=True)
log_timer.tick(manager.read_and_get_output, outputs=log_output)
with gr.Row():
process_status = gr.Checkbox(label="Process Status", interactive=False)
status_timer = gr.Timer(0.05, active=True)
status_timer.tick(manager.is_running, outputs=process_status)
with gr.Row():
start_button = gr.Button("Start Task")
start_button.click(prepare_task, inputs=[hf_org_dropdown])
stop_button = gr.Button("Stop Task")
stop_button.click(manager.stop_process)
kill_button = gr.Button("Kill Task")
kill_button.click(manager.kill_process)
app.launch(allowed_paths=["/app"]) |