inoki-giskard commited on
Commit
66e8b15
1 Parent(s): 93b6465

Run only one ML worker

Browse files
Files changed (1) hide show
  1. app.py +28 -5
app.py CHANGED
@@ -1,12 +1,33 @@
1
  import gradio as gr
2
- import asyncio
3
  from giskard.ml_worker.ml_worker import MLWorker
4
  from pydantic import AnyHttpUrl
5
  from giskard.settings import settings
6
  from urllib.parse import urlparse
7
 
8
- def run_ml_worker(url, api_key, hf_token):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  # Always run an external ML worker
 
 
 
 
 
10
  parsed_url = urlparse(url)
11
  backend_url = AnyHttpUrl(
12
  url=f"{parsed_url.scheme if parsed_url.scheme else 'http'}://{parsed_url.hostname}"
@@ -17,8 +38,10 @@ def run_ml_worker(url, api_key, hf_token):
17
  )
18
  print(f"Starting ML worker for {backend_url}")
19
  ml_worker = MLWorker(False, backend_url, api_key, hf_token)
20
- asyncio.run(ml_worker.start())
21
- return "ML worker finished its work"
 
 
22
 
23
- iface = gr.Interface(fn=run_ml_worker, inputs=["text", "text", "text"], outputs="text")
24
  iface.launch()
 
1
  import gradio as gr
2
+
3
  from giskard.ml_worker.ml_worker import MLWorker
4
  from pydantic import AnyHttpUrl
5
  from giskard.settings import settings
6
  from urllib.parse import urlparse
7
 
8
+ import asyncio
9
+ import threading
10
+
11
+ previous_url = ""
12
+ ml_worker = None
13
+
14
+
15
+ def run_ml_worker(ml_worker: MLWorker):
16
+ loop = asyncio.new_event_loop()
17
+ asyncio.set_event_loop(loop)
18
+
19
+ loop.run_until_complete(ml_worker.start())
20
+ loop.close()
21
+
22
+
23
+ def start_ml_worker(url, api_key, hf_token):
24
+ global ml_worker, previous_url
25
  # Always run an external ML worker
26
+ if ml_worker is not None:
27
+ print(f"Stopping ML worker for {previous_url}")
28
+ ml_worker.stop()
29
+ print("ML worker stopped")
30
+
31
  parsed_url = urlparse(url)
32
  backend_url = AnyHttpUrl(
33
  url=f"{parsed_url.scheme if parsed_url.scheme else 'http'}://{parsed_url.hostname}"
 
38
  )
39
  print(f"Starting ML worker for {backend_url}")
40
  ml_worker = MLWorker(False, backend_url, api_key, hf_token)
41
+ previous_url = backend_url
42
+ thread = threading.Thread(target=run_ml_worker, args=(ml_worker,))
43
+ thread.start()
44
+ return f"ML worker running for {backend_url}"
45
 
46
+ iface = gr.Interface(fn=start_ml_worker, inputs=["text", "text", "text"], outputs="text")
47
  iface.launch()