Spaces:
Running
on
Zero
Running
on
Zero
Upload app.py
Browse files
app.py
CHANGED
|
@@ -2061,6 +2061,13 @@ with gr.Blocks(theme=args.theme, elem_id="main", fill_width=True, fill_height=Fa
|
|
| 2061 |
def _generate_image(argv: List[Any]) -> Generator[Tuple[str, Optional[List[str]], Optional[str]], None, None]:
|
| 2062 |
# Delegate to existing generator
|
| 2063 |
yield from sd_gen_generate_pipeline(*argv)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2064 |
|
| 2065 |
# 3) Signature-clone decorator: keep one signature across both endpoints
|
| 2066 |
def clone_signature(src):
|
|
@@ -2072,23 +2079,35 @@ with gr.Blocks(theme=args.theme, elem_id="main", fill_width=True, fill_height=Fa
|
|
| 2072 |
|
| 2073 |
# 4) Implementations: both share the same signature via clone_signature
|
| 2074 |
@clone_signature(_signature_src)
|
| 2075 |
-
def generate_image(**kwargs) -> Tuple[str, Optional[List[str]], Optional[str]]:
|
| 2076 |
-
|
| 2077 |
-
|
| 2078 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2079 |
for last in _generate_image(argv):
|
| 2080 |
pass
|
| 2081 |
return last
|
| 2082 |
|
| 2083 |
@clone_signature(_signature_src)
|
| 2084 |
-
def generate_image_stream(**kwargs) -> Generator[Tuple[str, Optional[List[str]], Optional[str]], None, None]:
|
| 2085 |
-
|
| 2086 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2087 |
yield from _generate_image(argv)
|
| 2088 |
|
| 2089 |
# 5) Register two APIs with identical, named kwargs
|
| 2090 |
gr.api(generate_image, api_name="generate_image", show_api=True, queue=True, concurrency_id="gpu")
|
| 2091 |
-
gr.api(generate_image_stream, api_name="generate_image_stream", show_api=True, queue=True, concurrency_id="gpu")
|
| 2092 |
|
| 2093 |
gr.LoginButton()
|
| 2094 |
gr.DuplicateButton(value="Duplicate Space for private use (This demo does not work on CPU. Requires GPU Space)")
|
|
|
|
| 2061 |
def _generate_image(argv: List[Any]) -> Generator[Tuple[str, Optional[List[str]], Optional[str]], None, None]:
|
| 2062 |
# Delegate to existing generator
|
| 2063 |
yield from sd_gen_generate_pipeline(*argv)
|
| 2064 |
+
|
| 2065 |
+
_API_SIG = inspect.signature(_signature_src)
|
| 2066 |
+
|
| 2067 |
+
def _bind_api_args(*args: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 2068 |
+
bound = _API_SIG.bind_partial(*args, **kwargs)
|
| 2069 |
+
bound.apply_defaults()
|
| 2070 |
+
return bound.arguments
|
| 2071 |
|
| 2072 |
# 3) Signature-clone decorator: keep one signature across both endpoints
|
| 2073 |
def clone_signature(src):
|
|
|
|
| 2079 |
|
| 2080 |
# 4) Implementations: both share the same signature via clone_signature
|
| 2081 |
@clone_signature(_signature_src)
|
| 2082 |
+
def generate_image(*args: Any, **kwargs: Any) -> Tuple[str, Optional[List[str]], Optional[str]]:
|
| 2083 |
+
params = _bind_api_args(*args, **kwargs)
|
| 2084 |
+
_load_model(
|
| 2085 |
+
params["model_name"],
|
| 2086 |
+
params["vae_model"],
|
| 2087 |
+
params["task"],
|
| 2088 |
+
params["controlnet_model"],
|
| 2089 |
+
)
|
| 2090 |
+
argv = _argv_from_kwargs(params)
|
| 2091 |
+
last: Tuple[str, Optional[List[str]], Optional[str]] = ("COMPLETE", None, None)
|
| 2092 |
for last in _generate_image(argv):
|
| 2093 |
pass
|
| 2094 |
return last
|
| 2095 |
|
| 2096 |
@clone_signature(_signature_src)
|
| 2097 |
+
def generate_image_stream(*args: Any, **kwargs: Any) -> Generator[Tuple[str, Optional[List[str]], Optional[str]], None, None]:
|
| 2098 |
+
params = _bind_api_args(*args, **kwargs)
|
| 2099 |
+
_load_model(
|
| 2100 |
+
params["model_name"],
|
| 2101 |
+
params["vae_model"],
|
| 2102 |
+
params["task"],
|
| 2103 |
+
params["controlnet_model"],
|
| 2104 |
+
)
|
| 2105 |
+
argv = _argv_from_kwargs(params)
|
| 2106 |
yield from _generate_image(argv)
|
| 2107 |
|
| 2108 |
# 5) Register two APIs with identical, named kwargs
|
| 2109 |
gr.api(generate_image, api_name="generate_image", show_api=True, queue=True, concurrency_id="gpu")
|
| 2110 |
+
gr.api(generate_image_stream, api_name="generate_image_stream", show_api=True, queue=True, concurrency_id="gpu").stream()
|
| 2111 |
|
| 2112 |
gr.LoginButton()
|
| 2113 |
gr.DuplicateButton(value="Duplicate Space for private use (This demo does not work on CPU. Requires GPU Space)")
|