File size: 2,272 Bytes
df1aa82 66e8b15 e7aeb95 df1aa82 59166be 66e8b15 6348ca6 66e8b15 bfb27a7 59166be 2ecd2bd 59166be 29d69db 59166be 2ecd2bd 66e8b15 6348ca6 66e8b15 59166be 66e8b15 6348ca6 66e8b15 59166be 66e8b15 59166be df1aa82 6348ca6 bfb27a7 6348ca6 df1aa82 |
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 |
import gradio as gr
from urllib.parse import urlparse
import subprocess
import threading
import sys
LOG_FILE = "output.log"
def read_logs():
sys.stdout.flush()
with open(LOG_FILE, "r") as f:
return f.read()
previous_url = ""
ml_worker = None
def read_status():
if ml_worker:
return f"ML worker serving {previous_url}"
elif len(previous_url):
return f"ML worker exited for {previous_url}"
else:
return "ML worker not started"
def run_ml_worker(url, api_key, hf_token):
global ml_worker, previous_url
previous_url = url
ml_worker = subprocess.Popen(
[
"giskard", "worker", "start",
"-u", f"{url}", "-k", f"{api_key}", "-t", f"{hf_token}"
],
stdout=open(LOG_FILE, "w"), stderr=subprocess.STDOUT
)
args = ml_worker.args
print(f"Process {args} exited with {ml_worker.wait()}")
def stop_ml_worker():
global ml_worker, previous_url
if ml_worker is not None:
print(f"Stopping ML worker for {previous_url}")
ml_worker.terminate()
print("ML worker stopped")
return "ML worker stopped"
return "ML worker not started"
def start_ml_worker(url, api_key, hf_token):
# Always run an external ML worker
stop_ml_worker()
print(f"Starting ML worker for {url}")
thread = threading.Thread(target=run_ml_worker, args=(url, api_key, hf_token))
thread.start()
return f"ML worker running for {url}"
with gr.Blocks() as iface:
with gr.Row():
with gr.Column():
url_input = gr.Textbox(label="Giskard Hub URL")
api_key_input = gr.Textbox(label="Giskard Hub API Key", placeholder="gsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx")
hf_token_input = gr.Textbox(label="Hugging Face Spaces Token")
output = gr.Textbox(label="Status")
with gr.Row():
run_btn = gr.Button("Run")
run_btn.click(start_ml_worker, [url_input, api_key_input, hf_token_input], output)
stop_btn = gr.Button("Stop")
stop_btn.click(stop_ml_worker, None, output)
logs = gr.Textbox(label="Giskard ML worker log:")
iface.load(read_logs, None, logs, every=0.5)
iface.load(read_status, None, output, every=5)
iface.queue()
iface.launch()
|