Spaces:
Sleeping
Sleeping
File size: 2,664 Bytes
79d67e0 6cf00e4 79d67e0 |
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 |
import gradio as gr
import yaml
class WrappedGradioObject:
def __init__(self, title, gradio_element):
self.title = title
self.gradio_element = gradio_element
def launch(self):
return self.gradio_element.launch()
@staticmethod
def read_yaml(path):
with open(path) as f:
return yaml.safe_load(f)
class GradioInterfaceWrapper(WrappedGradioObject):
@classmethod
def from_yaml(cls, path):
"""Initializes Interface from YAML file."""
content_dict = cls.read_yaml(path)
return cls.create_interface(**content_dict)
@classmethod
def create_interface(cls, name, title, description, examples=None):
"""Creates Gradio-Element containing an interface."""
description = cls._prepend_link_to_description(name, title, description)
interface = gr.Interface.load(
name,
title=None, # Having the Tab-Name is sufficient.
description=description,
examples=examples,
)
return cls(title, interface)
@staticmethod
def _prepend_link_to_description(name, title, description):
without_huggingface = name.removeprefix("huggingface/")
link = f"https://huggingface.co/{without_huggingface}"
return f'<a href="{link}">{title}</a> </br> {description}'
class GradioTabWrapper(WrappedGradioObject):
@classmethod
def from_gradio_object_list(cls, title, gradio_objects):
"""Constructs a GradioTabWrapper from a title and a list of WrappedGradioObjects."""
interface = gr.TabbedInterface(
[obj.gradio_element for obj in gradio_objects],
[obj.title for obj in gradio_objects],
)
return cls(title, interface)
@classmethod
def from_yaml(cls, path):
content_dict = cls.read_yaml(path)
gradio_objects = [
cls._read_dependency(dependency)
for dependency in content_dict["dependencies"]
]
return cls.from_gradio_object_list(
content_dict["title"],
gradio_objects,
)
@staticmethod
def _read_dependency(path):
full_path = f"resources/{path}"
if path.startswith("interfaces"):
return GradioInterfaceWrapper.from_yaml(full_path)
if path.startswith("tabs"):
return GradioTabWrapper.from_yaml(full_path)
raise ValueError(
"Gradio Object Type could not be inferred from path name. Make sure "
"that all interface object yamls are in resources/interfaces, and that "
"all tab object yamls are in resources/tabs."
)
|