LucaVivona commited on
Commit
d809aeb
1 Parent(s): bd75201

updates ⚒️

Browse files
README.md CHANGED
@@ -41,6 +41,56 @@ stream both [gradio](https://gradio.app) ( and later [streamlit](https://streaml
41
  - [**Run Gradio within Gradio-Flow**](#5-run-gradio-within-gradio-flow)
42
 
43
  - [**Application**](#application-%EF%B8%8F)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  ## App Architecture 🏗️
45
  ![architecture](https://github.com/commune-ai/Gradio-Flow/blob/gradio-flow/gradio-only/architecture.png)
46
 
 
41
  - [**Run Gradio within Gradio-Flow**](#5-run-gradio-within-gradio-flow)
42
 
43
  - [**Application**](#application-%EF%B8%8F)
44
+
45
+ ## Updates ⚒️
46
+ ### Backend 💽
47
+ - ``__init__`` function takes inputs within class wrapper
48
+ - better determine registered functions within classes
49
+ - more examples located in the ``backend/src/example``
50
+ - just import and launch or run them within the demoE.py file in ``backend/src``
51
+ - launch interface functions that takes the interface and appends it within the gradio-flow so if it's (load, from_pipline, Block, or any other prebuilt interface you have you can append them into Gradio-Flow)
52
+
53
+ ### Frontend 🖥️
54
+ - no new updates
55
+
56
+ ```python
57
+ def InterLauncher(name, interface, listen=2000, **kwargs):
58
+ port= kwargs["port"] if "port" in kwargs else DOCKER_PORT.determinePort()
59
+ print(listen)
60
+ try:
61
+ requests.post(f"http://{DOCKER_LOCAL_HOST}:{listen}/api/append/port", json={"port" : port, "host" : f'http://localhost:{port}', "file" : {name}, "name" : "Not Applicable", "kwargs" : kwargs})
62
+ except Exception as e:
63
+ print(f"**{bcolor.BOLD}{bcolor.FAIL}CONNECTION ERROR{bcolor.ENDC}** 🐛The listening api is either not up or you choose the wrong port.🐛 \n {e}")
64
+ return
65
+
66
+ interface.launch(server_port=port,
67
+ server_name=f"{DOCKER_LOCAL_HOST}",
68
+ inline= kwargs['inline'] if "inline" in kwargs else True,
69
+ share=kwargs['share'] if "share" in kwargs else None,
70
+ debug=kwargs['debug'] if "debug" in kwargs else False,
71
+ enable_queue=kwargs['enable_queue'] if "enable_queue" in kwargs else None,
72
+ max_threads=kwargs['max_threads'] if "max_threads" in kwargs else None,
73
+ auth=kwargs['auth'] if "auth" in kwargs else None,
74
+ auth_message=kwargs['auth_message'] if "auth_message" in kwargs else None,
75
+ prevent_thread_lock=kwargs['prevent_thread_lock'] if "prevent_thread_lock" in kwargs else False,
76
+ show_error=kwargs['show_error'] if "show_error" in kwargs else True,
77
+ show_tips=kwargs['show_tips'] if "show_tips" in kwargs else False,
78
+ height=kwargs['height'] if "height" in kwargs else 500,
79
+ width=kwargs['width'] if "width" in kwargs else 900,
80
+ encrypt=kwargs['encrypt'] if "encrypt" in kwargs else False,
81
+ favicon_path=kwargs['favicon_path'] if "favicon_path" in kwargs else None,
82
+ ssl_keyfile=kwargs['ssl_keyfile'] if "ssl_keyfile" in kwargs else None,
83
+ ssl_certfile=kwargs['ssl_certfile'] if "ssl_certfile" in kwargs else None,
84
+ ssl_keyfile_password=kwargs['ssl_keyfile_password'] if "ssl_keyfile_password" in kwargs else None,
85
+ quiet=kwargs['quiet'] if "quiet" in kwargs else False)
86
+
87
+ try:
88
+ requests.post(f"http://{DOCKER_LOCAL_HOST}:{ listen }/api/remove/port", json={"port" : port, "host" : f'http://localhost:{port}', "file" : 'Not Applicable', "name" : name, "kwargs" : kwargs})
89
+ except Exception as e:
90
+ print(f"**{bcolor.BOLD}{bcolor.FAIL}CONNECTION ERROR{bcolor.ENDC}** 🐛The api either lost connection or was turned off...🐛 \n {e}")
91
+ ```
92
+
93
+
94
  ## App Architecture 🏗️
95
  ![architecture](https://github.com/commune-ai/Gradio-Flow/blob/gradio-flow/gradio-only/architecture.png)
96
 
backend/.gitignore CHANGED
@@ -1 +1,2 @@
1
- ./**/__pycache__
 
 
1
+ ./**/__pycache__
2
+ __pycache__/
backend/src/demoC.py CHANGED
@@ -1,4 +1,5 @@
1
- from resources import GradioModule, register
 
2
 
3
  @GradioModule
4
  class Greeting:
@@ -14,8 +15,8 @@ class Greeting:
14
 
15
  if __name__ == "__main__":
16
  # run just gradio
17
- Greeting().launch()
18
  # run it within Gradio-flow
19
- # Greeting().launch(listen=2000)
20
 
21
 
 
1
+ from resources import GradioModule, register, InterLauncher
2
+ import gradio as gr
3
 
4
  @GradioModule
5
  class Greeting:
 
15
 
16
  if __name__ == "__main__":
17
  # run just gradio
18
+ # Greeting().launch()
19
  # run it within Gradio-flow
20
+ Greeting().launch(listen=2000)
21
 
22
 
backend/src/demoE.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ from example.examples import Pictionary, FSD, HelloWorld_2_0, stock_forecast
2
+
3
+ Pictionary("./example/data/labels.txt", "./example/data/pytorch_model.bin").launch(live=True, listen=2000, port=3002)
backend/src/demoF.py CHANGED
@@ -1,5 +1,6 @@
1
  import gradio as gr
2
  from resources import register, tabularGradio
 
3
 
4
  @register(["text"], ["text"], examples=[["Luca Vivona"]])
5
  def Hello_World(name):
@@ -11,6 +12,7 @@ def add(x, y):
11
 
12
  if __name__ == "__main__":
13
  # run single gradio
 
14
  tabularGradio([Hello_World(), add()], ["Hello World", "Add"])
15
 
16
  # run it within Gradio-Flow
 
1
  import gradio as gr
2
  from resources import register, tabularGradio
3
+ from example.examples import FSD, Pictionary
4
 
5
  @register(["text"], ["text"], examples=[["Luca Vivona"]])
6
  def Hello_World(name):
 
12
 
13
  if __name__ == "__main__":
14
  # run single gradio
15
+
16
  tabularGradio([Hello_World(), add()], ["Hello World", "Add"])
17
 
18
  # run it within Gradio-Flow
backend/src/demoL.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ from resources import GradioModule, register, InterLauncher
2
+ import gradio as gr
3
+
4
+ if __name__ == "__main__":
5
+ description = "Story generation with GPT"
6
+ examples = [["An adventurer is approached by a mysterious stranger in the tavern for a new quest."]]
7
+ demo = gr.Interface.load("models/EleutherAI/gpt-neo-1.3B", description=description, examples=examples)
8
+ InterLauncher("Demo", demo, listen=2000)
backend/src/example/data/labels.txt ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ airplane
2
+ alarm_clock
3
+ anvil
4
+ apple
5
+ axe
6
+ baseball
7
+ baseball_bat
8
+ basketball
9
+ beard
10
+ bed
11
+ bench
12
+ bicycle
13
+ bird
14
+ book
15
+ bread
16
+ bridge
17
+ broom
18
+ butterfly
19
+ camera
20
+ candle
21
+ car
22
+ cat
23
+ ceiling_fan
24
+ cell_phone
25
+ chair
26
+ circle
27
+ clock
28
+ cloud
29
+ coffee_cup
30
+ cookie
31
+ cup
32
+ diving_board
33
+ donut
34
+ door
35
+ drums
36
+ dumbbell
37
+ envelope
38
+ eye
39
+ eyeglasses
40
+ face
41
+ fan
42
+ flower
43
+ frying_pan
44
+ grapes
45
+ hammer
46
+ hat
47
+ headphones
48
+ helmet
49
+ hot_dog
50
+ ice_cream
51
+ key
52
+ knife
53
+ ladder
54
+ laptop
55
+ light_bulb
56
+ lightning
57
+ line
58
+ lollipop
59
+ microphone
60
+ moon
61
+ mountain
62
+ moustache
63
+ mushroom
64
+ pants
65
+ paper_clip
66
+ pencil
67
+ pillow
68
+ pizza
69
+ power_outlet
70
+ radio
71
+ rainbow
72
+ rifle
73
+ saw
74
+ scissors
75
+ screwdriver
76
+ shorts
77
+ shovel
78
+ smiley_face
79
+ snake
80
+ sock
81
+ spider
82
+ spoon
83
+ square
84
+ star
85
+ stop_sign
86
+ suitcase
87
+ sun
88
+ sword
89
+ syringe
90
+ t-shirt
91
+ table
92
+ tennis_racquet
93
+ tent
94
+ tooth
95
+ traffic_light
96
+ tree
97
+ triangle
98
+ umbrella
99
+ wheel
100
+ wristwatch
backend/src/example/data/pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:effb6ea6f1593c09e8247944028ed9c309b5ff1cef82ba38b822bee2ca4d0f3c
3
+ size 1656903
backend/src/example/examples.py CHANGED
@@ -1,19 +1,23 @@
1
  import gradio as gr
 
2
  import matplotlib
3
  import matplotlib.pyplot as plt
 
 
 
4
  import numpy as np
5
  import PIL
6
- from helper.compiler import GradioCompiler, register
7
 
 
 
8
 
9
 
10
- """
11
- @gradio_compile
12
  class Pictionary:
13
 
14
- def __init__(self) -> None:
15
- self.LABELS = Path('./src/examples/data/labels.txt').read_text().splitlines()
16
-
17
  self.model = nn.Sequential(
18
  nn.Conv2d(1, 32, 3, padding='same'),
19
  nn.ReLU(),
@@ -29,11 +33,11 @@ class Pictionary:
29
  nn.ReLU(),
30
  nn.Linear(256, len(self.LABELS)),
31
  )
32
- state_dict = torch.load('./src/examples/data/pytorch_model.bin', map_location='cpu')
33
  self.model.load_state_dict(state_dict, strict=False)
34
  self.model.eval()
35
 
36
- @register(inputs="sketchpad", outputs=gr.Label())
37
  def perdict(self, img) -> 'dict[str, float]':
38
  if type(img) == type(None): return {}
39
  x = torch.tensor(img, dtype=torch.float32).unsqueeze(0).unsqueeze(0) / 255.
@@ -43,9 +47,8 @@ class Pictionary:
43
  values, indices = torch.topk(probabilities, 5)
44
  confidences = {self.LABELS[i]: v.item() for i, v in zip(indices, values)}
45
  return confidences
46
- """
47
 
48
- @GradioCompiler
49
  class HelloWorld_2_0:
50
 
51
  @register(inputs=["text", "text", gr.Radio(["morning", "evening", "night"])], outputs="text")
@@ -65,14 +68,14 @@ class HelloWorld_2_0:
65
 
66
 
67
 
68
- @GradioCompiler
69
  class FSD:
70
 
71
  def get_new_val(self, old_val, nc):
72
  return np.round(old_val * (nc - 1)) / (nc - 1)
73
 
74
 
75
- def palette_reduce(self, img : PIL.Image.Image, nc : 'tuple[float, float, float]'=(0.0000, 0, 16)):
76
  pixels = np.array(img, dtype=float) / 255
77
  pixels = self.get_new_val(pixels, nc)
78
 
@@ -80,7 +83,7 @@ class FSD:
80
  return PIL.Image.fromarray(carr)
81
 
82
  @register(inputs=[gr.Image(), gr.Slider(0.00, 16)], outputs=gr.Gallery())
83
- def Floyd_Steinberg_dithering(self, img, nc : 'tuple[float, float, float]'=(0.0000, 0, 16) ) -> 'list[PIL.Image.Image]':
84
  pixels = np.array(img, dtype=float) / 255
85
  new_height, new_width, _ = img.shape
86
  for row in range(new_height):
@@ -100,19 +103,7 @@ class FSD:
100
  carr = np.array(pixels / np.max(pixels, axis=(0, 1)) * 255, dtype=np.uint8)
101
  return [PIL.Image.fromarray(carr), self.palette_reduce(img, nc) ]
102
 
103
-
104
-
105
- @GradioCompiler
106
- class C:
107
-
108
- def Hello(self):
109
- return "Hello"
110
-
111
- @register(inputs="text", outputs="text")
112
- def Greeting(self, name):
113
- return self.Hello() + " " + name
114
-
115
- @GradioCompiler
116
  class stock_forecast:
117
 
118
  def __init__(self):
 
1
  import gradio as gr
2
+ import sys
3
  import matplotlib
4
  import matplotlib.pyplot as plt
5
+ from pathlib import Path
6
+ import torch
7
+ from torch import nn
8
  import numpy as np
9
  import PIL
 
10
 
11
+ sys.path.insert(0, "../resources")
12
+ from resources.module import GradioModule, register
13
 
14
 
15
+ @GradioModule
 
16
  class Pictionary:
17
 
18
+ def __init__(self, txt, model) -> None:
19
+ self.LABELS = Path(txt).read_text().splitlines()
20
+ print(txt, model)
21
  self.model = nn.Sequential(
22
  nn.Conv2d(1, 32, 3, padding='same'),
23
  nn.ReLU(),
 
33
  nn.ReLU(),
34
  nn.Linear(256, len(self.LABELS)),
35
  )
36
+ state_dict = torch.load(model, map_location='cpu')
37
  self.model.load_state_dict(state_dict, strict=False)
38
  self.model.eval()
39
 
40
+ @register(inputs="sketchpad", outputs=gr.Label(), examples=None, live=True)
41
  def perdict(self, img) -> 'dict[str, float]':
42
  if type(img) == type(None): return {}
43
  x = torch.tensor(img, dtype=torch.float32).unsqueeze(0).unsqueeze(0) / 255.
 
47
  values, indices = torch.topk(probabilities, 5)
48
  confidences = {self.LABELS[i]: v.item() for i, v in zip(indices, values)}
49
  return confidences
 
50
 
51
+ @GradioModule
52
  class HelloWorld_2_0:
53
 
54
  @register(inputs=["text", "text", gr.Radio(["morning", "evening", "night"])], outputs="text")
 
68
 
69
 
70
 
71
+ @GradioModule
72
  class FSD:
73
 
74
  def get_new_val(self, old_val, nc):
75
  return np.round(old_val * (nc - 1)) / (nc - 1)
76
 
77
 
78
+ def palette_reduce(self, img : PIL.Image.Image, nc):
79
  pixels = np.array(img, dtype=float) / 255
80
  pixels = self.get_new_val(pixels, nc)
81
 
 
83
  return PIL.Image.fromarray(carr)
84
 
85
  @register(inputs=[gr.Image(), gr.Slider(0.00, 16)], outputs=gr.Gallery())
86
+ def Floyd_Steinberg_dithering(self, img, nc ):
87
  pixels = np.array(img, dtype=float) / 255
88
  new_height, new_width, _ = img.shape
89
  for row in range(new_height):
 
103
  carr = np.array(pixels / np.max(pixels, axis=(0, 1)) * 255, dtype=np.uint8)
104
  return [PIL.Image.fromarray(carr), self.palette_reduce(img, nc) ]
105
 
106
+ @GradioModule
 
 
 
 
 
 
 
 
 
 
 
 
107
  class stock_forecast:
108
 
109
  def __init__(self):
backend/src/resources/__pycache__/module.cpython-39.pyc CHANGED
Binary files a/backend/src/resources/__pycache__/module.cpython-39.pyc and b/backend/src/resources/__pycache__/module.cpython-39.pyc differ
 
backend/src/resources/module.py CHANGED
@@ -9,7 +9,7 @@ class Dock:
9
 
10
  def __init__(self) -> None:
11
  self.num_ports = 20
12
- self.port_range = (7860, 7880)
13
 
14
  def portConnection(self, port : int):
15
  s = socket.socket(
@@ -18,10 +18,11 @@ class Dock:
18
  if result == 0: return True
19
  return False
20
 
21
- def determinePort(self, max_trial_count=10):
22
  trial_count = 0
23
  while trial_count <= max_trial_count:
24
  port=random.randint(*self.port_range)
 
25
  if not self.portConnection(port):
26
  return port
27
  trial_count += 1
@@ -31,6 +32,41 @@ class Dock:
31
  DOCKER_LOCAL_HOST = '0.0.0.0'
32
  DOCKER_PORT = Dock()
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  def tabularGradio(funcs, names, name="Tabular Temp Name", **kwargs):
35
  """
36
  takes all gradio Interfaces, and names
@@ -153,14 +189,15 @@ def register(inputs, outputs, examples=None, **kwargs):
153
  allow_flagging=kwargs['allow_flagging'] if "allow_flagging" in kwargs else None,
154
  theme='default',
155
  )
 
156
  return decorator
157
  return register_gradio
158
 
159
  def GradioModule(cls):
160
  class Decorator:
161
 
162
- def __init__(self) -> None:
163
- self.__cls__ = cls()
164
  self.__get_funcs_attr()
165
  self.interface = self.__compile()
166
 
@@ -175,7 +212,9 @@ def GradioModule(cls):
175
  def __get_funcs_attr(self):
176
  for func in dir(self.__cls__):
177
  fn = getattr(self.__cls__, func, None)
178
- if not func.startswith("__") and fn.__name__ == "decorator":
 
 
179
  fn()
180
 
181
  def __compile(self):
 
9
 
10
  def __init__(self) -> None:
11
  self.num_ports = 20
12
+ self.port_range = (3002, 8000)
13
 
14
  def portConnection(self, port : int):
15
  s = socket.socket(
 
18
  if result == 0: return True
19
  return False
20
 
21
+ def determinePort(self, max_trial_count=20):
22
  trial_count = 0
23
  while trial_count <= max_trial_count:
24
  port=random.randint(*self.port_range)
25
+ print(port)
26
  if not self.portConnection(port):
27
  return port
28
  trial_count += 1
 
32
  DOCKER_LOCAL_HOST = '0.0.0.0'
33
  DOCKER_PORT = Dock()
34
 
35
+ def InterLauncher(name, interface, listen=2000, **kwargs):
36
+ port= kwargs["port"] if "port" in kwargs else DOCKER_PORT.determinePort()
37
+ print(listen)
38
+ try:
39
+ requests.post(f"http://{DOCKER_LOCAL_HOST}:{listen}/api/append/port", json={"port" : port, "host" : f'http://localhost:{port}', "file" : "Not Applicable", "name" : {name}, "kwargs" : kwargs})
40
+ except Exception as e:
41
+ print(f"**{bcolor.BOLD}{bcolor.FAIL}CONNECTION ERROR{bcolor.ENDC}** 🐛The listening api is either not up or you choose the wrong port.🐛 \n {e}")
42
+ return
43
+
44
+ interface.launch(server_port=port,
45
+ server_name=f"{DOCKER_LOCAL_HOST}",
46
+ inline= kwargs['inline'] if "inline" in kwargs else True,
47
+ share=kwargs['share'] if "share" in kwargs else None,
48
+ debug=kwargs['debug'] if "debug" in kwargs else False,
49
+ enable_queue=kwargs['enable_queue'] if "enable_queue" in kwargs else None,
50
+ max_threads=kwargs['max_threads'] if "max_threads" in kwargs else None,
51
+ auth=kwargs['auth'] if "auth" in kwargs else None,
52
+ auth_message=kwargs['auth_message'] if "auth_message" in kwargs else None,
53
+ prevent_thread_lock=kwargs['prevent_thread_lock'] if "prevent_thread_lock" in kwargs else False,
54
+ show_error=kwargs['show_error'] if "show_error" in kwargs else True,
55
+ show_tips=kwargs['show_tips'] if "show_tips" in kwargs else False,
56
+ height=kwargs['height'] if "height" in kwargs else 500,
57
+ width=kwargs['width'] if "width" in kwargs else 900,
58
+ encrypt=kwargs['encrypt'] if "encrypt" in kwargs else False,
59
+ favicon_path=kwargs['favicon_path'] if "favicon_path" in kwargs else None,
60
+ ssl_keyfile=kwargs['ssl_keyfile'] if "ssl_keyfile" in kwargs else None,
61
+ ssl_certfile=kwargs['ssl_certfile'] if "ssl_certfile" in kwargs else None,
62
+ ssl_keyfile_password=kwargs['ssl_keyfile_password'] if "ssl_keyfile_password" in kwargs else None,
63
+ quiet=kwargs['quiet'] if "quiet" in kwargs else False)
64
+
65
+ try:
66
+ requests.post(f"http://{DOCKER_LOCAL_HOST}:{ listen }/api/remove/port", json={"port" : port, "host" : f'http://localhost:{port}', "file" : 'Not Applicable', "name" : name, "kwargs" : kwargs})
67
+ except Exception as e:
68
+ print(f"**{bcolor.BOLD}{bcolor.FAIL}CONNECTION ERROR{bcolor.ENDC}** 🐛The api either lost connection or was turned off...🐛 \n {e}")
69
+
70
  def tabularGradio(funcs, names, name="Tabular Temp Name", **kwargs):
71
  """
72
  takes all gradio Interfaces, and names
 
189
  allow_flagging=kwargs['allow_flagging'] if "allow_flagging" in kwargs else None,
190
  theme='default',
191
  )
192
+ decorator.__decorator__ = "__gradio__"
193
  return decorator
194
  return register_gradio
195
 
196
  def GradioModule(cls):
197
  class Decorator:
198
 
199
+ def __init__(self, *args, **kwargs) -> None:
200
+ self.__cls__ = cls(*args, **kwargs)
201
  self.__get_funcs_attr()
202
  self.interface = self.__compile()
203
 
 
212
  def __get_funcs_attr(self):
213
  for func in dir(self.__cls__):
214
  fn = getattr(self.__cls__, func, None)
215
+
216
+ if callable(fn) and not func.startswith("__") and "__decorator__" in dir(fn) and fn.__decorator__ == "__gradio__":
217
+ print(func, callable(fn))
218
  fn()
219
 
220
  def __compile(self):
frontend/public/index.html CHANGED
@@ -35,7 +35,27 @@
35
  </head>
36
  <body>
37
  <noscript>You need to enable JavaScript to run this app.</noscript>
38
- <div id="root"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  <!--
40
  This HTML file is a template.
41
  If you open it directly in the browser, you will see an empty page.
 
35
  </head>
36
  <body>
37
  <noscript>You need to enable JavaScript to run this app.</noscript>
38
+ <div id="Gradio-Flow"></div>
39
+ <script>
40
+ var frame = document.getElementById("Iframe");
41
+
42
+ frame.onload = function()
43
+ // function execute while load the iframe
44
+
45
+ {
46
+ // set the height of the iframe as
47
+ // the height of the iframe content
48
+ frame.style.height =
49
+ frame.contentWindow.document.body.scrollHeight + 'px';
50
+ console.log(frame.contentWindow.document.body.scrollHeight)
51
+
52
+ // set the width of the iframe as the
53
+ // width of the iframe content
54
+ frame.style.width =
55
+ frame.contentWindow.document.body.scrollWidth+'px';
56
+
57
+ }
58
+ </script>
59
  <!--
60
  This HTML file is a template.
61
  If you open it directly in the browser, you will see an empty page.
frontend/src/Components/Navagation/navbar.js CHANGED
@@ -202,7 +202,7 @@ export default class Navbar extends Component{
202
  </div>
203
 
204
  <div className={`rounded-md text-center ${this.state.open ? "" : "px-0"} py-3`} onClick={() => {this.handelModal(true)}}>
205
- <div className={` text-center bg-transparent w-full h-10 border border-slate-300 hover:border-sky-500 hover:animate-pulse border-dashed rounded-md py-2 pl-5 ${this.state.open ? "pr-3" : "hidden"} shadow-sm sm:text-sm`}>
206
  <Icon className=" block mr-auto ml-auto" name="plus"/>
207
  </div>
208
  </div>
 
202
  </div>
203
 
204
  <div className={`rounded-md text-center ${this.state.open ? "" : "px-0"} py-3`} onClick={() => {this.handelModal(true)}}>
205
+ <div className={` text-center bg-transparent w-full h-10 border border-slate-300 hover:border-Retro-purple hover:animate-pulse border-dashed rounded-md py-2 pl-5 ${this.state.open ? "pr-3" : "hidden"} shadow-sm sm:text-sm`}>
206
  <Icon className=" block mr-auto ml-auto" name="plus"/>
207
  </div>
208
  </div>
frontend/src/Components/Nodes/custom.js CHANGED
@@ -22,14 +22,15 @@ import React from "react"
22
  render(){
23
 
24
  console.log(this.state.reachable)
 
25
 
26
  return (
27
  <>
28
  { this.state.selected && this.state.reachable ?
29
- <div className='relative h-[540px] w-[600px] overflow-hidden m-0 p-0' onClick={()=>this.handelSelected()}>
30
- <div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-10`}></div>
31
- <iframe src={this.state.data.host} title={this.state.data.label} frameBorder={0} allowFullScreen className=" h-full w-full p-2 overflow-y-scroll"></iframe>
32
- </div> :
33
  <>
34
  <div className='break-words'>
35
  <div className=' h-auto text-center pointer-events-none'>
 
22
  render(){
23
 
24
  console.log(this.state.reachable)
25
+ var frame = document.getElementById("Iframe");
26
 
27
  return (
28
  <>
29
  { this.state.selected && this.state.reachable ?
30
+ <div className='relative h-[540px] w-[600px] overflow-hidden m-0 p-0' onClick={()=>this.handelSelected()}>
31
+ <div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-10`}></div>
32
+ <iframe src={this.state.data.host} title={this.state.data.label} frameBorder={0} allowFullScreen className=" h-full w-full p-2 overflow-y-scroll"></iframe>
33
+ </div>:
34
  <>
35
  <div className='break-words'>
36
  <div className=' h-auto text-center pointer-events-none'>
frontend/src/Components/ReactFlow/ReactFlowEnv.js CHANGED
@@ -71,8 +71,8 @@ export default function ReactEnviorment() {
71
 
72
  return (
73
  <>
74
- <div className=' absolute top-4 right-5 z-50' >
75
- <h1 className='text-3xl' onClick={()=> setTheme(theme === "" ? "dark" : "")}>{theme === "dark" ? '🌙' : '☀️'}</h1>
76
  </div>
77
  <div className={`flex h-screen w-screen ${theme} transition-all`}>
78
  <Navbar/>
 
71
 
72
  return (
73
  <>
74
+ <div className=' absolute top-4 right-5 z-50' onClick={()=> setTheme(theme === "" ? "dark" : "")}>
75
+ <h1 className='text-4xl' >{theme === "dark" ? '🌙' : '☀️'}</h1>
76
  </div>
77
  <div className={`flex h-screen w-screen ${theme} transition-all`}>
78
  <Navbar/>
frontend/src/css/dist/output.css CHANGED
@@ -570,14 +570,6 @@ video {
570
  bottom: 0px;
571
  }
572
 
573
- .top-4 {
574
- top: 1rem;
575
- }
576
-
577
- .right-5 {
578
- right: 1.25rem;
579
- }
580
-
581
  .-right-3 {
582
  right: -0.75rem;
583
  }
@@ -594,14 +586,26 @@ video {
594
  bottom: 0px;
595
  }
596
 
597
- .z-50 {
598
- z-index: 50;
 
 
 
 
 
 
 
 
599
  }
600
 
601
  .z-10 {
602
  z-index: 10;
603
  }
604
 
 
 
 
 
605
  .-z-10 {
606
  z-index: -10;
607
  }
@@ -666,14 +670,26 @@ video {
666
  height: auto;
667
  }
668
 
669
- .h-\[540px\] {
670
- height: 540px;
671
- }
672
-
673
  .h-full {
674
  height: 100%;
675
  }
676
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
677
  .w-10 {
678
  width: 2.5rem;
679
  }
@@ -682,14 +698,30 @@ video {
682
  width: 100%;
683
  }
684
 
685
- .w-\[600px\] {
686
- width: 600px;
 
 
 
 
687
  }
688
 
689
  .w-screen {
690
  width: 100vw;
691
  }
692
 
 
 
 
 
 
 
 
 
 
 
 
 
693
  .flex-1 {
694
  flex: 1 1 0%;
695
  }
@@ -704,6 +736,10 @@ video {
704
  cursor: pointer;
705
  }
706
 
 
 
 
 
707
  .items-center {
708
  align-items: center;
709
  }
@@ -748,6 +784,10 @@ video {
748
  border-style: dashed;
749
  }
750
 
 
 
 
 
751
  .border-black {
752
  --tw-border-opacity: 1;
753
  border-color: rgb(0 0 0 / var(--tw-border-opacity));
@@ -900,6 +940,14 @@ video {
900
  padding-top: 0.5rem;
901
  }
902
 
 
 
 
 
 
 
 
 
903
  .text-left {
904
  text-align: left;
905
  }
@@ -912,11 +960,6 @@ video {
912
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
913
  }
914
 
915
- .text-3xl {
916
- font-size: 1.875rem;
917
- line-height: 2.25rem;
918
- }
919
-
920
  .text-sm {
921
  font-size: 0.875rem;
922
  line-height: 1.25rem;
@@ -932,11 +975,26 @@ video {
932
  line-height: 1.5rem;
933
  }
934
 
 
 
 
 
 
935
  .text-lg {
936
  font-size: 1.125rem;
937
  line-height: 1.75rem;
938
  }
939
 
 
 
 
 
 
 
 
 
 
 
940
  .font-medium {
941
  font-weight: 500;
942
  }
@@ -1026,6 +1084,16 @@ video {
1026
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
1027
  }
1028
 
 
 
 
 
 
 
 
 
 
 
1029
  .focus\:border-sky-500:focus {
1030
  --tw-border-opacity: 1;
1031
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
@@ -1077,14 +1145,6 @@ video {
1077
  width: 15rem;
1078
  }
1079
 
1080
- .sm\:w-\[250pxs\] {
1081
- width: 250pxs;
1082
- }
1083
-
1084
- .sm\:w-\[250px\] {
1085
- width: 250px;
1086
- }
1087
-
1088
  .sm\:text-sm {
1089
  font-size: 0.875rem;
1090
  line-height: 1.25rem;
 
570
  bottom: 0px;
571
  }
572
 
 
 
 
 
 
 
 
 
573
  .-right-3 {
574
  right: -0.75rem;
575
  }
 
586
  bottom: 0px;
587
  }
588
 
589
+ .top-0 {
590
+ top: 0px;
591
+ }
592
+
593
+ .top-4 {
594
+ top: 1rem;
595
+ }
596
+
597
+ .right-5 {
598
+ right: 1.25rem;
599
  }
600
 
601
  .z-10 {
602
  z-index: 10;
603
  }
604
 
605
+ .z-50 {
606
+ z-index: 50;
607
+ }
608
+
609
  .-z-10 {
610
  z-index: -10;
611
  }
 
670
  height: auto;
671
  }
672
 
 
 
 
 
673
  .h-full {
674
  height: 100%;
675
  }
676
 
677
+ .h-\[95\%\] {
678
+ height: 95%;
679
+ }
680
+
681
+ .h-\[500px\] {
682
+ height: 500px;
683
+ }
684
+
685
+ .h-\[300px\] {
686
+ height: 300px;
687
+ }
688
+
689
+ .h-\[540px\] {
690
+ height: 540px;
691
+ }
692
+
693
  .w-10 {
694
  width: 2.5rem;
695
  }
 
698
  width: 100%;
699
  }
700
 
701
+ .w-\[1000px\] {
702
+ width: 1000px;
703
+ }
704
+
705
+ .w-\[95\%\] {
706
+ width: 95%;
707
  }
708
 
709
  .w-screen {
710
  width: 100vw;
711
  }
712
 
713
+ .w-\[900px\] {
714
+ width: 900px;
715
+ }
716
+
717
+ .w-\[800px\] {
718
+ width: 800px;
719
+ }
720
+
721
+ .w-\[600px\] {
722
+ width: 600px;
723
+ }
724
+
725
  .flex-1 {
726
  flex: 1 1 0%;
727
  }
 
736
  cursor: pointer;
737
  }
738
 
739
+ .resize {
740
+ resize: both;
741
+ }
742
+
743
  .items-center {
744
  align-items: center;
745
  }
 
784
  border-style: dashed;
785
  }
786
 
787
+ .border-none {
788
+ border-style: none;
789
+ }
790
+
791
  .border-black {
792
  --tw-border-opacity: 1;
793
  border-color: rgb(0 0 0 / var(--tw-border-opacity));
 
940
  padding-top: 0.5rem;
941
  }
942
 
943
+ .pt-\[56\.25\%\] {
944
+ padding-top: 56.25%;
945
+ }
946
+
947
+ .pt-\[57\.25\%\] {
948
+ padding-top: 57.25%;
949
+ }
950
+
951
  .text-left {
952
  text-align: left;
953
  }
 
960
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
961
  }
962
 
 
 
 
 
 
963
  .text-sm {
964
  font-size: 0.875rem;
965
  line-height: 1.25rem;
 
975
  line-height: 1.5rem;
976
  }
977
 
978
+ .text-3xl {
979
+ font-size: 1.875rem;
980
+ line-height: 2.25rem;
981
+ }
982
+
983
  .text-lg {
984
  font-size: 1.125rem;
985
  line-height: 1.75rem;
986
  }
987
 
988
+ .text-4xl {
989
+ font-size: 2.25rem;
990
+ line-height: 2.5rem;
991
+ }
992
+
993
+ .text-5xl {
994
+ font-size: 3rem;
995
+ line-height: 1;
996
+ }
997
+
998
  .font-medium {
999
  font-weight: 500;
1000
  }
 
1084
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
1085
  }
1086
 
1087
+ .hover\:border-Retro-purple:hover {
1088
+ --tw-border-opacity: 1;
1089
+ border-color: rgb(151 0 204 / var(--tw-border-opacity));
1090
+ }
1091
+
1092
+ .hover\:border-l-Retro-purple:hover {
1093
+ --tw-border-opacity: 1;
1094
+ border-left-color: rgb(151 0 204 / var(--tw-border-opacity));
1095
+ }
1096
+
1097
  .focus\:border-sky-500:focus {
1098
  --tw-border-opacity: 1;
1099
  border-color: rgb(14 165 233 / var(--tw-border-opacity));
 
1145
  width: 15rem;
1146
  }
1147
 
 
 
 
 
 
 
 
 
1148
  .sm\:text-sm {
1149
  font-size: 0.875rem;
1150
  line-height: 1.25rem;
frontend/src/css/iframe.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ .Iframe_class{
2
+ position: absolute;
3
+ width: 100%!important;
4
+ height: 100%!important;
5
+ }
frontend/src/index.js CHANGED
@@ -5,7 +5,7 @@ import App from './App';
5
  //import Navbar from './Components/Navagation/navbar';
6
  import reportWebVitals from './reportWebVitals';
7
 
8
- const root = ReactDOM.createRoot(document.getElementById('root'));
9
  root.render(
10
  <React.StrictMode>
11
  < App/>
 
5
  //import Navbar from './Components/Navagation/navbar';
6
  import reportWebVitals from './reportWebVitals';
7
 
8
+ const root = ReactDOM.createRoot(document.getElementById('Gradio-Flow'));
9
  root.render(
10
  <React.StrictMode>
11
  < App/>