Skip to content

Commit 546d14e

Browse files
authored
add test + demo (#8524)
1 parent bdaa678 commit 546d14e

File tree

7 files changed

+105
-3
lines changed

7 files changed

+105
-3
lines changed

.changeset/lemon-planets-kiss.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"gradio": patch
3+
---
4+
5+
fix:add test + demo

demo/sub_block_render/cheetah.jpg

51.9 KB
Loading

demo/sub_block_render/frog.jpg

123 KB
Loading

demo/sub_block_render/run.ipynb

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"cells": [{"cell_type": "markdown", "id": "302934307671667531413257853548643485645", "metadata": {}, "source": ["# Gradio Demo: sub_block_render"]}, {"cell_type": "code", "execution_count": null, "id": "272996653310673477252411125948039410165", "metadata": {}, "outputs": [], "source": ["!pip install -q gradio "]}, {"cell_type": "code", "execution_count": null, "id": "288918539441861185822528903084949547379", "metadata": {}, "outputs": [], "source": ["# Downloading files from the demo repo\n", "import os\n", "!wget -q https://github.com/gradio-app/gradio/raw/main/demo/sub_block_render/cheetah.jpg\n", "!wget -q https://github.com/gradio-app/gradio/raw/main/demo/sub_block_render/frog.jpg"]}, {"cell_type": "code", "execution_count": null, "id": "44380577570523278879349135829904343037", "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "import os\n", "from pathlib import Path\n", "\n", "from PIL import Image\n", "\n", "\n", "root = Path(os.path.abspath(''))\n", "\n", "\n", "def infer(\n", " text,\n", " guidance_scale,\n", "):\n", "\n", " img = (\n", " Image.open(root / \"cheetah.jpg\")\n", " if text == \"Cheetah\"\n", " else Image.open(root / \"frog.jpg\")\n", " )\n", " img = img.resize((224, 224))\n", "\n", " return ([img, img, img, img], \"image\")\n", "\n", "\n", "block = gr.Blocks()\n", "\n", "examples = [\n", " [\"A serious capybara at work, wearing a suit\", 7],\n", " [\"A Squirtle fine dining with a view to the London Eye\", 7],\n", " [\"A tamale food cart in front of a Japanese Castle\", 7],\n", " [\"a graffiti of a robot serving meals to people\", 7],\n", " [\"a beautiful cabin in Attersee, Austria, 3d animation style\", 7],\n", "]\n", "\n", "\n", "with block as demo:\n", " with gr.Row(elem_id=\"prompt-container\", equal_height=True):\n", " text = gr.Textbox(\n", " label=\"Enter your prompt\",\n", " show_label=False,\n", " max_lines=1,\n", " placeholder=\"Enter your prompt\",\n", " elem_id=\"prompt-text-input\",\n", " )\n", "\n", " gallery = gr.Gallery(\n", " label=\"Generated images\", show_label=False, elem_id=\"gallery\", rows=2, columns=2\n", " )\n", " out_txt = gr.Textbox(\n", " label=\"Prompt\",\n", " placeholder=\"Enter a prompt to generate an image\",\n", " lines=3,\n", " elem_id=\"prompt-text-input\",\n", " )\n", "\n", " guidance_scale = gr.Slider(\n", " label=\"Guidance Scale\", minimum=0, maximum=50, value=7.5, step=0.1\n", " )\n", "\n", " ex = gr.Examples(\n", " examples=examples,\n", " fn=infer,\n", " inputs=[text, guidance_scale],\n", " outputs=[gallery, out_txt],\n", " cache_examples=True,\n", " )\n", "\n", " text.submit(\n", " infer,\n", " inputs=[text, guidance_scale],\n", " outputs=[gallery, out_txt],\n", " concurrency_id=\"infer\",\n", " concurrency_limit=8,\n", " )\n", "\n", "with gr.Blocks() as demo:\n", " block.render()\n", "\n", "\n", "if __name__ == \"__main__\":\n", " demo.queue(max_size=10, api_open=False).launch(show_api=False)\n"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}

demo/sub_block_render/run.py

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import gradio as gr
2+
import os
3+
from pathlib import Path
4+
5+
from PIL import Image
6+
7+
8+
root = Path(os.path.dirname(__file__))
9+
10+
11+
def infer(
12+
text,
13+
guidance_scale,
14+
):
15+
16+
img = (
17+
Image.open(root / "cheetah.jpg")
18+
if text == "Cheetah"
19+
else Image.open(root / "frog.jpg")
20+
)
21+
img = img.resize((224, 224))
22+
23+
return ([img, img, img, img], "image")
24+
25+
26+
block = gr.Blocks()
27+
28+
examples = [
29+
["A serious capybara at work, wearing a suit", 7],
30+
["A Squirtle fine dining with a view to the London Eye", 7],
31+
["A tamale food cart in front of a Japanese Castle", 7],
32+
["a graffiti of a robot serving meals to people", 7],
33+
["a beautiful cabin in Attersee, Austria, 3d animation style", 7],
34+
]
35+
36+
37+
with block as demo:
38+
with gr.Row(elem_id="prompt-container", equal_height=True):
39+
text = gr.Textbox(
40+
label="Enter your prompt",
41+
show_label=False,
42+
max_lines=1,
43+
placeholder="Enter your prompt",
44+
elem_id="prompt-text-input",
45+
)
46+
47+
gallery = gr.Gallery(
48+
label="Generated images", show_label=False, elem_id="gallery", rows=2, columns=2
49+
)
50+
out_txt = gr.Textbox(
51+
label="Prompt",
52+
placeholder="Enter a prompt to generate an image",
53+
lines=3,
54+
elem_id="prompt-text-input",
55+
)
56+
57+
guidance_scale = gr.Slider(
58+
label="Guidance Scale", minimum=0, maximum=50, value=7.5, step=0.1
59+
)
60+
61+
ex = gr.Examples(
62+
examples=examples,
63+
fn=infer,
64+
inputs=[text, guidance_scale],
65+
outputs=[gallery, out_txt],
66+
cache_examples=True,
67+
)
68+
69+
text.submit(
70+
infer,
71+
inputs=[text, guidance_scale],
72+
outputs=[gallery, out_txt],
73+
concurrency_id="infer",
74+
concurrency_limit=8,
75+
)
76+
77+
with gr.Blocks() as demo:
78+
block.render()
79+
80+
81+
if __name__ == "__main__":
82+
demo.queue(max_size=10, api_open=False).launch(show_api=False)

gradio/blocks.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1352,7 +1352,7 @@ def render(self):
13521352
)
13531353

13541354
root_context.blocks.update(self.blocks)
1355-
dependency_offset = len(root_context.fns)
1355+
dependency_offset = max(root_context.fns.keys(), default=-1) + 1
13561356
existing_api_names = [
13571357
dep.api_name
13581358
for dep in root_context.fns.values()
@@ -1379,8 +1379,8 @@ def render(self):
13791379
root_context.fns[i].get_config() for i in dependency.cancels
13801380
]
13811381
dependency.cancels = get_cancelled_fn_indices(updated_cancels)
1382-
root_context.fns[root_context.fn_id] = dependency
1383-
root_context.fn_id += 1
1382+
root_context.fns[dependency._id] = dependency
1383+
root_context.fn_id = max(root_context.fns.keys(), default=-1) + 1
13841384
Context.root_block.temp_file_sets.extend(self.temp_file_sets)
13851385
Context.root_block.proxy_urls.update(self.proxy_urls)
13861386

js/app/test/sub_block_render.spec.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { test, expect } from "@gradio/tootils";
2+
3+
test("submit works", async ({ page }) => {
4+
await page.getByTestId("textbox").first().focus();
5+
await page.keyboard.press("Enter");
6+
7+
await expect(page.getByLabel("Prompt", { exact: true })).toHaveValue("image");
8+
});
9+
10+
test("examples work", async ({ page }) => {
11+
await page.getByText("A serious capybara at work, wearing a suit").click();
12+
13+
await expect(page.getByLabel("Prompt", { exact: true })).toHaveValue("image");
14+
});

0 commit comments

Comments
 (0)