diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..b352b374a47108a820a7aecb82c50139ee4ef883 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,27 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +gradio/demo/blocks_flipper/screenshot.gif filter=lfs diff=lfs merge=lfs -text +gradio/demo/blocks_neural_instrument_coding/sax.wav filter=lfs diff=lfs merge=lfs -text +gradio/demo/calculator/screenshot.gif filter=lfs diff=lfs merge=lfs -text +gradio/demo/chatbot_core_components/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/chatbot_core_components_simple/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/dataset/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/gallery_component/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/hello_world_2/screenshot.gif filter=lfs diff=lfs merge=lfs -text +gradio/demo/image_mod/screenshot.png filter=lfs diff=lfs merge=lfs -text +gradio/demo/kitchen_sink/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/rt-detr-object-detection/3285790-hd_1920_1080_30fps.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/demo/sales_projections/screenshot.gif filter=lfs diff=lfs merge=lfs -text +gradio/demo/sepia_filter/screenshot.gif filter=lfs diff=lfs merge=lfs -text +gradio/demo/unispeech-speaker-verification/samples/kirsten_dunst.wav filter=lfs diff=lfs merge=lfs -text +gradio/demo/video_component/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/guides/assets/hf_demo.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/guides/cn/assets/hf_demo.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/js/component-test/src/lib/images/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/js/spa/test/files/file_test.ogg filter=lfs diff=lfs merge=lfs -text +gradio/js/spa/test/files/world.mp4 filter=lfs diff=lfs merge=lfs -text +gradio/test/test_files/rotated_image.jpeg filter=lfs diff=lfs merge=lfs -text +node_modules/clarinet/samples/npm.json filter=lfs diff=lfs merge=lfs -text +node_modules/clarinet/samples/twitter.json filter=lfs diff=lfs merge=lfs -text +node_modules/clarinet/test/twitter.js filter=lfs diff=lfs merge=lfs -text diff --git a/.gradio/flagged/dataset3.csv b/.gradio/flagged/dataset3.csv new file mode 100644 index 0000000000000000000000000000000000000000..42d3efeb962aed1d0c876219c63638242d298c1a --- /dev/null +++ b/.gradio/flagged/dataset3.csv @@ -0,0 +1,2 @@ +name,is_morning,temperature,output 0,output 1,timestamp +Rei,false,20,Good evening Rei. It is 20 degrees today,'-6.67,2024-11-17 04:50:44.018497 diff --git a/.gradio/flagged/dataset4.csv b/.gradio/flagged/dataset4.csv new file mode 100644 index 0000000000000000000000000000000000000000..00a9a9409bdb83e3d1a66832d5f54432f86f3d0c --- /dev/null +++ b/.gradio/flagged/dataset4.csv @@ -0,0 +1,2 @@ +input_img,output,timestamp +.gradio/flagged/input_img/a98cdcb20c751cdea650/a new day - fondo completa.jpg,.gradio/flagged/output/814cb1f4f4281fc56236/image.webp,2024-11-17 04:53:32.100201 diff --git a/.gradio/flagged/dataset5.csv b/.gradio/flagged/dataset5.csv new file mode 100644 index 0000000000000000000000000000000000000000..2dd33ebc95744243d66f4a0ac2f1aede9807257f --- /dev/null +++ b/.gradio/flagged/dataset5.csv @@ -0,0 +1,30 @@ +text,output,timestamp +"'hazme la letra de una canción en castellano, que tenga la misma estructura a esta: {[Pre-Hook] +Ka-hóhh, ka-ha-ka, +(Ka-hohh, ya, ya-hóhh) + +[Hook] +Pilaŋ áŋpetu, ka-ha-ka, +(Grateful day, Ka-hohh, ya, ya-hóhh) + +Wíŋyaŋ, wíŋyaŋ, hééé, +(Sun, sun, shine, lé-ló) + +Čhaŋnúŋpa owaŋyaŋke, ka-hóhh, +(Sacred pipe, ka-hóhh) + +[Pre-Hook] +Ka-hóhh, ka-ha-ka, +(Ka-hohh, ya, ya-hóhh) + +[Hook] +Pilaŋ áŋpetu, ka-ha-ka, +(Grateful day, Ka-hohh, ya, ya-hóhh) + +Háu waŋblí, oškáte, +(Hawk speaks, in joy) + +[Outro] +Pilaŋ áŋpetu, ka-ha-ka, +(Grateful day, Ka-hohh, ya, ya-hóhh)}","[{""token"": ""hazme la letra de una canci\u00f3n en castellano, que tenga la misma estructura a esta: {[Pre-Hook]\nKa-h\u00f3hh, ka-ha-ka,\n(Ka-hohh, ya, ya-h\u00f3hh)\n\n[Hook]\nPila\u014b \u00e1\u014bpetu, ka-ha-ka,\n(Grateful day, Ka-hohh, ya, ya-h\u00f3hh)\n\nW\u00ed\u014bya\u014b, w\u00ed\u014bya\u014b, h\u00e9\u00e9\u00e9,\n(Sun, sun, shine, l\u00e9-l\u00f3)\n\n\u010cha\u014bn\u00fa\u014bpa owa\u014bya\u014bke, ka-h\u00f3hh,\n(Sacred pipe, ka-h\u00f3hh)\n\n[Pre-Hook]\nKa-h\u00f3hh, ka-ha-ka,\n(Ka-hohh, ya, ya-h\u00f3hh)\n\n[Hook]\nPila\u014b \u00e1\u014bpetu, ka-ha-ka,\n(Grateful day, Ka-hohh, ya, ya-h\u00f3hh)\n\nH\u00e1u wa\u014bbl\u00ed, o\u0161k\u00e1te,\n(Hawk speaks, in joy)\n\n[Outro]\nPila\u014b \u00e1\u014bpetu, ka-ha-ka,\n(Grateful day, Ka-hohh, ya, ya-h\u00f3hh)}"", ""class_or_confidence"": null}]",2024-12-07 00:13:40.443441 +Does Chicago have any stores and does Joe live here?,"[{""token"": ""Does Chicago have any stores and does Joe live here?"", ""class_or_confidence"": null}]",2024-12-14 10:11:53.275861 diff --git a/.gradio/flagged/input_img/a98cdcb20c751cdea650/a new day - fondo completa.jpg b/.gradio/flagged/input_img/a98cdcb20c751cdea650/a new day - fondo completa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e40865b6d8003ceafb1c22082cedecd820522845 Binary files /dev/null and b/.gradio/flagged/input_img/a98cdcb20c751cdea650/a new day - fondo completa.jpg differ diff --git a/.gradio/flagged/output/814cb1f4f4281fc56236/image.webp b/.gradio/flagged/output/814cb1f4f4281fc56236/image.webp new file mode 100644 index 0000000000000000000000000000000000000000..60c3eebd80828678aeec49b1f2693a1be8cadbcd Binary files /dev/null and b/.gradio/flagged/output/814cb1f4f4281fc56236/image.webp differ diff --git a/__pycache__/gradio_tool.cpython-311.pyc b/__pycache__/gradio_tool.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39dc53f4e79f42bdda089419188df42da3e202e4 Binary files /dev/null and b/__pycache__/gradio_tool.cpython-311.pyc differ diff --git a/app.py b/app.py index 12374b3a9725fd777d8bbe1c4960ab65957ca439..33bddb295e1fc487113e4375c6452a80f1aaf86e 100644 --- a/app.py +++ b/app.py @@ -1,19 +1,30 @@ -import gradio as gr +from gradio_tool import GradioTool +import os -def greet(name): - return "Hello " + name + "!" +class StableDiffusionTool(GradioTool): + """Tool for calling stable diffusion from llm""" -demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox") - -demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀 + def __init__( + self, + name="StableDiffusion", + description=( + "An image generator. Use this to generate images based on " + "text input. Input should be a description of what the image should " + "look like. The output will be a path to an image file." + ), + src="gradio-client-demos/stable-diffusion", + hf_token=None, + ) -> None: + super().__init__(name, description, src, hf_token) + def create_job(self, query: str) -> Job: + return self.client.submit(query, "", 9, fn_index=1) -from gradio_client import Client + def postprocess(self, output: str) -> str: + return [os.path.join(output, i) for i in os.listdir(output) if not i.endswith("json")][0] -client = Client("http://127.0.0.1:7860/") -result = client.predict( - name="Hello!!", - intensity=0, - api_name="/predict" -) -print(result) + def _block_input(self, gr) -> "gr.components.Component": + return gr.Textbox() + + def _block_output(self, gr) -> "gr.components.Component": + return gr.Image() diff --git a/app2.py b/app2.py new file mode 100644 index 0000000000000000000000000000000000000000..12374b3a9725fd777d8bbe1c4960ab65957ca439 --- /dev/null +++ b/app2.py @@ -0,0 +1,19 @@ +import gradio as gr + +def greet(name): + return "Hello " + name + "!" + +demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox") + +demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀 + + +from gradio_client import Client + +client = Client("http://127.0.0.1:7860/") +result = client.predict( + name="Hello!!", + intensity=0, + api_name="/predict" +) +print(result) diff --git a/app3.py b/app3.py new file mode 100644 index 0000000000000000000000000000000000000000..fa3767406ac84806fd5644cf88d55ad87f309e36 --- /dev/null +++ b/app3.py @@ -0,0 +1,14 @@ +import gradio as gr + +def greet(name, is_morning, temperature): + salutation = "Good morning" if is_morning else "Good evening" + greeting = f"{salutation} {name}. It is {temperature} degrees today" + celsius = (temperature - 32) * 5 / 9 + return greeting, round(celsius, 2) + +demo = gr.Interface( + fn=greet, + inputs=["text", "checkbox", gr.Slider(0, 100)], + outputs=["text", "number"], +) +demo.launch() diff --git a/app33.py b/app33.py new file mode 100644 index 0000000000000000000000000000000000000000..42eecf4bd25913539315594a6122e18cbbb544b1 --- /dev/null +++ b/app33.py @@ -0,0 +1,36 @@ +import gradio as gr + +def calculator(num1, operation, num2): + if operation == "add": + return num1 + num2 + elif operation == "subtract": + return num1 - num2 + elif operation == "multiply": + return num1 * num2 + elif operation == "divide": + if num2 == 0: + raise gr.Error("Cannot divide by zero!") + return num1 / num2 + +demo = gr.Interface( + calculator, + [ + "number", + gr.Radio(["add", "subtract", "multiply", "divide"]), + "number" + ], + "number", + examples=[ + [45, "add", 3], + [3.14, "divide", 2], + [144, "multiply", 2.5], + [0, "subtract", 1.2], + ], + title="Toy Calculator", + description="Here's a sample toy calculator.", +) + +demo.launch() + + + diff --git a/app5.py b/app5.py new file mode 100644 index 0000000000000000000000000000000000000000..1bb45ace890fd666f137e90dff6769c58c16a7b2 --- /dev/null +++ b/app5.py @@ -0,0 +1,37 @@ +import torch +from diffusers.utils import load_image +from diffusers import FluxControlNetModel +from diffusers.pipelines import FluxControlNetPipeline + +# Load pipeline +controlnet = FluxControlNetModel.from_pretrained( + "jasperai/Flux.1-dev-Controlnet-Upscaler", + torch_dtype=torch.bfloat16 +) +pipe = FluxControlNetPipeline.from_pretrained( + "black-forest-labs/FLUX.1-dev", + controlnet=controlnet, + torch_dtype=torch.bfloat16 +) +pipe.to("cuda") + +# Load a control image +control_image = load_image( + "https://huggingface.co./jasperai/Flux.1-dev-Controlnet-Upscaler/resolve/main/examples/input.jpg" +) + +w, h = control_image.size + +# Upscale x4 +control_image = control_image.resize((w * 4, h * 4)) + +image = pipe( + prompt="", + control_image=control_image, + controlnet_conditioning_scale=0.6, + num_inference_steps=40, + guidance_scale=3.5, + height=control_image.size[1], + width=control_image.size[0] +).images[0] +image diff --git a/diffusers-upscaler.py b/diffusers-upscaler.py new file mode 100644 index 0000000000000000000000000000000000000000..5042b4e7c3805a974df4c6b26a4acfe0174b3ff1 --- /dev/null +++ b/diffusers-upscaler.py @@ -0,0 +1,38 @@ +import torch +from diffusers.utils import load_image +from diffusers import FluxControlNetModel +from diffusers.pipelines import FluxControlNetPipeline + +# Load pipeline +controlnet = FluxControlNetModel.from_pretrained( + "jasperai/Flux.1-dev-Controlnet-Upscaler", + torch_dtype=torch.bfloat16 +) +pipe = FluxControlNetPipeline.from_pretrained( + "black-forest-labs/FLUX.1-dev", + controlnet=controlnet, + torch_dtype=torch.bfloat16 +) +pipe.to("cpu") + +# Load a control image +control_image = load_image( + "https://huggingface.co./jasperai/Flux.1-dev-Controlnet-Upscaler/resolve/main/examples/input.jpg" +) + +w, h = control_image.size + +# Upscale x4 +control_image = control_image.resize((w * 4, h * 4)) + +image = pipe( + prompt="", + control_image=control_image, + controlnet_conditioning_scale=0.6, + num_inference_steps=28, + guidance_scale=3.5, + height=control_image.size[1], + width=control_image.size[0] +).images[0] +image + diff --git a/diffusers_flux.py b/diffusers_flux.py new file mode 100644 index 0000000000000000000000000000000000000000..2fe268dd9c2d898d5a4d806b5da51803308806af --- /dev/null +++ b/diffusers_flux.py @@ -0,0 +1,6 @@ +from diffusers import DiffusionPipeline + +pipe = DiffusionPipeline.from_pretrained("jasperai/Flux.1-dev-Controlnet-Upscaler") + +prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" +image = pipe(prompt).images[0] diff --git a/example.py b/example.py new file mode 100644 index 0000000000000000000000000000000000000000..55534da3550f526176dc06e1009bd7ff78e22bb2 --- /dev/null +++ b/example.py @@ -0,0 +1,20 @@ +from transformers import pipeline + +import gradio as gr + +ner_pipeline = pipeline("ner") + +examples = [ + "Does Chicago have any stores and does Joe live here?", +] + +def ner(text): + output = ner_pipeline(text) + return {"text": text, "entities": output} + +demo = gr.Interface(ner, + gr.Textbox(placeholder="Enter sentence here..."), + gr.HighlightedText(), + examples=examples) + +demo.launch() diff --git a/gradio/.changeset/README.md b/gradio/.changeset/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e5b6d8d6a67ad0dca8f20117fbfc72e076882d00 --- /dev/null +++ b/gradio/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/gradio/.changeset/changeset.cjs b/gradio/.changeset/changeset.cjs new file mode 100644 index 0000000000000000000000000000000000000000..de9958bc8a440d5849e42c1f18f2696986004329 --- /dev/null +++ b/gradio/.changeset/changeset.cjs @@ -0,0 +1,332 @@ +const { getPackagesSync } = require("@manypkg/get-packages"); +const dependents_graph = require("@changesets/get-dependents-graph"); + +const gh = require("@changesets/get-github-info"); +const { existsSync, readFileSync, writeFileSync } = require("fs"); +const { join } = require("path"); + +const { getInfo, getInfoFromPullRequest } = gh; +const pkg_data = getPackagesSync(process.cwd()); +const { packages, rootDir } = pkg_data; +const dependents = dependents_graph.getDependentsGraph({ + packages, + root: pkg_data.rootPackage +}); + +/** + * @typedef {{packageJson: {name: string, python?: boolean}, dir: string}} Package + */ + +/** + * @typedef {{summary: string, id: string, commit: string, releases: {name: string}}} Changeset + */ + +/** + * + * @param {string} package_name The name of the package to find the directories for + * @returns {string[]} The directories for the package + */ +function find_packages_dirs(package_name) { + /** @type {string[]} */ + let package_dirs = []; + + /** @type {Package | undefined} */ + const _package = packages.find((p) => p.packageJson.name === package_name); + if (!_package) throw new Error(`Package ${package_name} not found`); + + package_dirs.push(_package.dir); + if (_package.packageJson.python) { + package_dirs.push(join(_package.dir, "..")); + } + return package_dirs; +} + +let lines = { + _handled: [] +}; + +const changelogFunctions = { + /** + * + * @param {Changeset[]} changesets The changesets that have been created + * @param {any} dependenciesUpdated The dependencies that have been updated + * @param {any} options The options passed to the changelog generator + * @returns {Promise} The release line for the dependencies + */ + getDependencyReleaseLine: async ( + changesets, + dependenciesUpdated, + options + ) => { + if (!options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + if (dependenciesUpdated.length === 0) return ""; + + const changesetLink = `- Updated dependencies [${( + await Promise.all( + changesets.map(async (cs) => { + if (cs.commit) { + let { links } = await getInfo({ + repo: options.repo, + commit: cs.commit + }); + return links.commit; + } + }) + ) + ) + .filter((_) => _) + .join(", ")}]:`; + + const updatedDepenenciesList = dependenciesUpdated.map( + /** + * + * @param {any} dependency The dependency that has been updated + * @returns {string} The formatted dependency + */ + (dependency) => { + const updates = dependents.get(dependency.name); + + if (updates && updates.length > 0) { + updates.forEach((update) => { + if (!lines[update]) { + lines[update] = { + dirs: find_packages_dirs(update), + current_changelog: "", + feat: [], + fix: [], + highlight: [], + previous_version: packages.find( + (p) => p.packageJson.name === update + ).packageJson.version, + dependencies: [] + }; + + const changelog_path = join( + //@ts-ignore + lines[update].dirs[1] || lines[update].dirs[0], + "CHANGELOG.md" + ); + + if (existsSync(changelog_path)) { + //@ts-ignore + lines[update].current_changelog = readFileSync( + changelog_path, + "utf-8" + ) + .replace(`# ${update}`, "") + .trim(); + } + } + lines[update].dependencies.push( + ` - ${dependency.name}@${dependency.newVersion}` + ); + }); + } + + return ` - ${dependency.name}@${dependency.newVersion}`; + } + ); + + writeFileSync( + join(rootDir, ".changeset", "_changelog.json"), + JSON.stringify(lines, null, 2) + ); + + return [changesetLink, ...updatedDepenenciesList].join("\n"); + }, + /** + * + * @param {{summary: string, id: string, commit: string, releases: {name: string}[]}} changeset The changeset that has been created + * @param {any} type The type of changeset + * @param {any} options The options passed to the changelog generator + * @returns {Promise} The release line for the changeset + */ + getReleaseLine: async (changeset, type, options) => { + if (!options || !options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + + let prFromSummary; + let commitFromSummary; + /** + * @type {string[]} + */ + let usersFromSummary = []; + + const replacedChangelog = changeset.summary + .replace(/^\s*(?:pr|pull|pull\s+request):\s*#?(\d+)/im, (_, pr) => { + let num = Number(pr); + if (!isNaN(num)) prFromSummary = num; + return ""; + }) + .replace(/^\s*commit:\s*([^\s]+)/im, (_, commit) => { + commitFromSummary = commit; + return ""; + }) + .replace(/^\s*(?:author|user):\s*@?([^\s]+)/gim, (_, user) => { + usersFromSummary.push(user); + return ""; + }) + .trim(); + + const [firstLine, ...futureLines] = replacedChangelog + .split("\n") + .map((l) => l.trimRight()); + + const links = await (async () => { + if (prFromSummary !== undefined) { + let { links } = await getInfoFromPullRequest({ + repo: options.repo, + pull: prFromSummary + }); + if (commitFromSummary) { + links = { + ...links, + commit: `[\`${commitFromSummary}\`](https://github.com/${options.repo}/commit/${commitFromSummary})` + }; + } + return links; + } + const commitToFetchFrom = commitFromSummary || changeset.commit; + if (commitToFetchFrom) { + let { links } = await getInfo({ + repo: options.repo, + commit: commitToFetchFrom + }); + return links; + } + return { + commit: null, + pull: null, + user: null + }; + })(); + + const user_link = /\[(@[^]+)\]/.exec(links.user); + const users = + usersFromSummary && usersFromSummary.length + ? usersFromSummary + .map((userFromSummary) => `@${userFromSummary}`) + .join(", ") + : user_link + ? user_link[1] + : links.user; + + const prefix = [ + links.pull === null ? "" : `${links.pull}`, + links.commit === null ? "" : `${links.commit}` + ] + .join(" ") + .trim(); + + const suffix = users === null ? "" : ` Thanks ${users}!`; + + /** + * @typedef {{[key: string]: string[] | {dirs: string[], current_changelog: string, feat: {summary: string}[], fix: {summary: string}[], highlight: {summary: string}[]}}} ChangesetMeta + */ + + /** + * @type { ChangesetMeta & { _handled: string[] } }} + */ + + if (lines._handled.includes(changeset.id)) { + return "done"; + } + lines._handled.push(changeset.id); + + changeset.releases.forEach((release) => { + if (!lines[release.name]) { + lines[release.name] = { + dirs: find_packages_dirs(release.name), + current_changelog: "", + feat: [], + fix: [], + highlight: [], + previous_version: packages.find( + (p) => p.packageJson.name === release.name + ).packageJson.version, + dependencies: [] + }; + } + + const changelog_path = join( + //@ts-ignore + lines[release.name].dirs[1] || lines[release.name].dirs[0], + "CHANGELOG.md" + ); + + if (existsSync(changelog_path)) { + //@ts-ignore + lines[release.name].current_changelog = readFileSync( + changelog_path, + "utf-8" + ) + .replace(`# ${release.name}`, "") + .trim(); + } + + const [, _type, summary] = changeset.summary + .trim() + .match(/^(feat|fix|highlight)\s*:\s*([^]*)/im) || [ + , + "feat", + changeset.summary + ]; + + let formatted_summary = ""; + + if (_type === "highlight") { + const [heading, ...rest] = summary.trim().split("\n"); + const _heading = `${heading} ${prefix ? `(${prefix})` : ""}`; + const _rest = rest.concat(["", suffix]); + + formatted_summary = `${_heading}\n${_rest.join("\n")}`; + } else { + formatted_summary = handle_line(summary, prefix, suffix); + } + + //@ts-ignore + lines[release.name][_type].push({ + summary: formatted_summary + }); + }); + + writeFileSync( + join(rootDir, ".changeset", "_changelog.json"), + JSON.stringify(lines, null, 2) + ); + + return `\n\n-${prefix ? `${prefix} -` : ""} ${firstLine}\n${futureLines + .map((l) => ` ${l}`) + .join("\n")}`; + } +}; + +/** + * @param {string} str The changelog entry + * @param {string} prefix The prefix to add to the first line + * @param {string} suffix The suffix to add to the last line + * @returns {string} The formatted changelog entry + */ +function handle_line(str, prefix, suffix) { + const [_s, ...lines] = str.split("\n").filter(Boolean); + + const desc = `${prefix ? `${prefix} -` : ""} ${_s.replace( + /[\s\.]$/, + "" + )}. ${suffix}`; + + if (_s.length === 1) { + return desc; + } + + return [desc, ...lines.map((l) => ` ${l}`)].join("/n"); +} + +module.exports = changelogFunctions; diff --git a/gradio/.changeset/config.json b/gradio/.changeset/config.json new file mode 100644 index 0000000000000000000000000000000000000000..d3179effbd17a8db280e2e6cfeabb65be0393502 --- /dev/null +++ b/gradio/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", + "changelog": ["./changeset.cjs", { "repo": "gradio-app/gradio" }], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": ["@self/spaces-test", "@self/cdn-test"] +} diff --git a/gradio/.changeset/fix_changelogs.cjs b/gradio/.changeset/fix_changelogs.cjs new file mode 100644 index 0000000000000000000000000000000000000000..5d7138d99fa07fb3c9aef525d6f1b949fb1c6e09 --- /dev/null +++ b/gradio/.changeset/fix_changelogs.cjs @@ -0,0 +1,149 @@ +const { join } = require("path"); +const { readFileSync, existsSync, writeFileSync, unlinkSync } = require("fs"); +const { getPackagesSync } = require("@manypkg/get-packages"); + +const RE_PKG_NAME = /^[\w-]+\b/; +const pkg_meta = getPackagesSync(process.cwd()); + +/** + * @typedef {{dirs: string[], highlight: {summary: string}[], feat: {summary: string}[], fix: {summary: string}[], current_changelog: string}} ChangesetMeta + */ + +/** + * @typedef {{[key: string]: ChangesetMeta}} ChangesetMetaCollection + */ + +function run() { + if (!existsSync(join(pkg_meta.rootDir, ".changeset", "_changelog.json"))) { + console.warn("No changesets to process"); + return; + } + + /** + * @type { ChangesetMetaCollection & { _handled: string[] } }} + */ + const { _handled, ...packages } = JSON.parse( + readFileSync( + join(pkg_meta.rootDir, ".changeset", "_changelog.json"), + "utf-8" + ) + ); + + /** + * @typedef { {packageJson: {name: string, version: string, python: boolean}, dir: string} } PackageMeta + */ + + /** + * @type { {[key:string]: PackageMeta} } + */ + const all_packages = pkg_meta.packages.reduce((acc, pkg) => { + acc[pkg.packageJson.name] = /**@type {PackageMeta} */ ( + /** @type {unknown} */ (pkg) + ); + return acc; + }, /** @type {{[key:string] : PackageMeta}} */ ({})); + + for (const pkg_name in packages) { + const { dirs, highlight, feat, fix, current_changelog, dependencies } = + /**@type {ChangesetMeta} */ (packages[pkg_name]); + + if (pkg_name === "@gradio/lite") { + const target = all_packages.gradio.packageJson.version.split("."); + + const current_version = packages[pkg_name].previous_version.split("."); + + if (!packages.gradio) { + const patch = parseInt(current_version[2]) + 1; + const new_version = [target[0], target[1], patch]; + all_packages[pkg_name].packageJson.version = new_version.join("."); + } else { + if (parseInt(target[1]) > parseInt(current_version[1])) { + all_packages[pkg_name].packageJson.version = target.join("."); + } else if (parseInt(target[1]) === parseInt(current_version[1])) { + const patch = parseInt(current_version[2]) + 1; + const new_version = [target[0], target[1], patch]; + all_packages[pkg_name].packageJson.version = new_version.join("."); + } + } + + writeFileSync( + join(all_packages[pkg_name].dir, "package.json"), + JSON.stringify(all_packages[pkg_name].packageJson, null, "\t") + "\n" + ); + } + + const { version, python } = all_packages[pkg_name].packageJson; + + const highlights = highlight?.map((h) => `${h.summary}`) || []; + const features = feat?.map((f) => `- ${f.summary}`) || []; + const fixes = fix?.map((f) => `- ${f.summary}`) || []; + const deps = Array.from(new Set(dependencies?.map((d) => d.trim()))) || []; + + const release_notes = /** @type {[string[], string][]} */ ([ + [highlights, "### Highlights"], + [features, "### Features"], + [fixes, "### Fixes"], + [deps, "### Dependency updates"] + ]) + .filter(([s], i) => s.length > 0) + .map(([lines, title]) => { + if (title === "### Highlights") { + return `${title}\n\n${lines.join("\n\n")}`; + } + + return `${title}\n\n${lines.join("\n")}`; + }) + .join("\n\n"); + + const new_changelog = `# ${pkg_name} + +## ${version} + +${release_notes} + +${current_changelog.replace(`# ${pkg_name}`, "").trim()} +`.trim(); + + dirs.forEach((dir) => { + writeFileSync(join(dir, "CHANGELOG.md"), new_changelog); + }); + + if (python) { + bump_local_dependents(pkg_name, version); + } + } + + unlinkSync(join(pkg_meta.rootDir, ".changeset", "_changelog.json")); + + /** + * @param {string} pkg_to_bump The name of the package to bump + * @param {string} version The version to bump to + * @returns {void} + * */ + function bump_local_dependents(pkg_to_bump, version) { + for (const pkg_name in all_packages) { + const { + dir, + packageJson: { python } + } = all_packages[pkg_name]; + + if (!python) continue; + + const requirements_path = join(dir, "..", "requirements.txt"); + const requirements = readFileSync(requirements_path, "utf-8").split("\n"); + + const pkg_index = requirements.findIndex((line) => { + const m = line.trim().match(RE_PKG_NAME); + if (!m) return false; + return m[0] === pkg_to_bump; + }); + + if (pkg_index !== -1) { + requirements[pkg_index] = `${pkg_to_bump}==${version}`; + writeFileSync(requirements_path, requirements.join("\n")); + } + } + } +} + +run(); diff --git a/gradio/.changeset/full-pigs-post.md b/gradio/.changeset/full-pigs-post.md new file mode 100644 index 0000000000000000000000000000000000000000..c7c3fe71bafb65e70f285129e88015c54dfe312b --- /dev/null +++ b/gradio/.changeset/full-pigs-post.md @@ -0,0 +1,6 @@ +--- +"@gradio/core": patch +"gradio": patch +--- + +fix:Fix css preload when serving from proxied subpaths diff --git a/gradio/.config/.prettierignore b/gradio/.config/.prettierignore new file mode 100644 index 0000000000000000000000000000000000000000..b5411e40f32bb225d41ac57e0c1591df9254d56b --- /dev/null +++ b/gradio/.config/.prettierignore @@ -0,0 +1,35 @@ +**/*.md +**/js/app/public/** +**/pnpm-workspace.yaml +**/js/app/dist/** +**/js/wasm/dist/** +**/js/preview/dist/** +**/client/js/dist/** +**/js/*/dist/** +**/pnpm-lock.yaml +**/js/plot/src/Plot.svelte +**/.svelte-kit/** +**/demo/** +**/gradio/** +**/.pnpm-store/** +**/.venv/** + +/guides/** +**/.mypy_cache/** +!test-strategy.md +**/js/_space-test/** +../js/lite/src/theme.css +../js/storybook/theme.css +**/gradio_cached_examples/** +**/storybook-static/** +**/.vscode/** +sweep.yaml +**/.vercel/** +**/build/** +**/src/lib/json/**/* +**/playwright/.cache/**/* +**/theme/src/pollen.css +**/venv/** +../js/app/src/api_docs/CodeSnippet.svelte +../js/app/src/api_docs/RecordingSnippet.svelte +../.changeset/pre.json diff --git a/gradio/.config/.prettierrc.json b/gradio/.config/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..4e22682cf517a25f86164c671cd9ef3e08a559ec --- /dev/null +++ b/gradio/.config/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "useTabs": true, + "singleQuote": false, + "trailingComma": "none", + "printWidth": 80, + "plugins": ["prettier-plugin-svelte"], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/gradio/.config/basevite.config.ts b/gradio/.config/basevite.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..36c6b9640af7331d306265a596858dad488c5502 --- /dev/null +++ b/gradio/.config/basevite.config.ts @@ -0,0 +1,95 @@ +import { defineConfig } from "vite"; +import { svelte } from "@sveltejs/vite-plugin-svelte"; +import sveltePreprocess from "svelte-preprocess"; +// @ts-ignore +import custom_media from "postcss-custom-media"; +import global_data from "@csstools/postcss-global-data"; +// @ts-ignore +import prefixer from "postcss-prefix-selector"; +import { readFileSync } from "fs"; +import { join } from "path"; +import { fileURLToPath } from "url"; + +const __dirname = fileURLToPath(new URL(".", import.meta.url)); +const version_path = join(__dirname, "..", "gradio", "package.json"); +const theme_token_path = join( + __dirname, + "..", + "js", + "theme", + "src", + "tokens.css" +); + +const version = JSON.parse(readFileSync(version_path, { encoding: "utf-8" })) + .version.trim() + .replace(/\./g, "-"); + +//@ts-ignore +export default defineConfig(({ mode }) => { + const production = mode === "production"; + + return { + server: { + port: 9876 + }, + resolve: { + conditions: ["gradio"] + }, + build: { + sourcemap: false, + target: "esnext", + minify: production, + rollupOptions: { + external: ["virtual:component-loader"] + } + }, + define: { + BUILD_MODE: production ? JSON.stringify("prod") : JSON.stringify("dev"), + BACKEND_URL: production + ? JSON.stringify("") + : JSON.stringify("http://localhost:7860/"), + GRADIO_VERSION: JSON.stringify(version) + }, + css: { + postcss: { + plugins: [ + prefixer({ + prefix: `.gradio-container-${version}`, + // @ts-ignore + transform(prefix, selector, prefixedSelector, fileName) { + if (selector.indexOf("gradio-container") > -1) { + return prefix; + } else if ( + selector.indexOf(":root") > -1 || + selector.indexOf("dark") > -1 || + fileName.indexOf(".svelte") > -1 + ) { + return selector; + } + return prefixedSelector; + } + }), + custom_media() + ] + } + }, + plugins: [ + svelte({ + inspector: false, + compilerOptions: { + dev: !production + }, + hot: !process.env.VITEST && !production, + preprocess: sveltePreprocess({ + postcss: { + plugins: [ + global_data({ files: [theme_token_path] }), + custom_media() + ] + } + }) + }) + ] + }; +}); diff --git a/gradio/.config/copy_frontend.py b/gradio/.config/copy_frontend.py new file mode 100644 index 0000000000000000000000000000000000000000..a62ac6711de8d871653e34ce7ded9366fb9b322e --- /dev/null +++ b/gradio/.config/copy_frontend.py @@ -0,0 +1,63 @@ +from __future__ import annotations + +import shutil +import pathlib +from typing import Any + +from hatchling.builders.hooks.plugin.interface import BuildHookInterface + + +def copy_js_code(root: str | pathlib.Path): + NOT_COMPONENT = [ + "app", + "node_modules", + "storybook", + "playwright-report", + "workbench", + "tooltils", + "component-test", + "core", + "spa", + ] + for entry in (pathlib.Path(root) / "js").iterdir(): + if ( + entry.is_dir() + and not str(entry.name).startswith("_") + and not str(entry.name) in NOT_COMPONENT + ): + + def ignore(s, names): + ignored = [] + for n in names: + if ( + n.startswith("CHANGELOG") + or n.startswith("README.md") + or n.startswith("node_modules") + or ".test." in n + or ".stories." in n + or ".spec." in n + ): + ignored.append(n) + return ignored + + shutil.copytree( + str(entry), + str(pathlib.Path("gradio") / "_frontend_code" / entry.name), + ignore=ignore, + dirs_exist_ok=True, + ) + shutil.copytree( + str(pathlib.Path(root) / "client" / "js"), + str(pathlib.Path("gradio") / "_frontend_code" / "client"), + ignore=lambda d, names: ["node_modules", "test"], + dirs_exist_ok=True, + ) + + +class BuildHook(BuildHookInterface): + def initialize(self, version: str, build_data: dict[str, Any]) -> None: + copy_js_code(self.root) + + +if __name__ == "__main__": + copy_js_code(pathlib.Path("..").resolve()) diff --git a/gradio/.config/demos.json b/gradio/.config/demos.json new file mode 100644 index 0000000000000000000000000000000000000000..d532f2a348ade5fec69b64f8bc3e268e9b3e5a70 --- /dev/null +++ b/gradio/.config/demos.json @@ -0,0 +1,34 @@ +[ + "audio_debugger", + "blocks_essay", + "blocks_group", + "blocks_js_methods", + "blocks_layout", + "blocks_multiple_event_triggers", + "blocks_update", + "calculator", + "cancel_events", + "chatbot_multimodal", + "chatinterface_streaming_echo", + "clear_components", + "code", + "fake_gan", + "fake_diffusion_with_gif", + "file_explorer_component_events", + "image_mod_default_image", + "image_editor_events", + "image_segmentation", + "interface_random_slider", + "kitchen_sink", + "kitchen_sink_random", + "matrix_transpose", + "mini_leaderboard", + "model3D", + "native_plots", + "reverse_audio", + "stt_or_tts", + "stream_audio", + "stream_frames", + "video_component", + "zip_files" +] diff --git a/gradio/.config/eslint.config.js b/gradio/.config/eslint.config.js new file mode 100644 index 0000000000000000000000000000000000000000..294bb9293e4389ed5f85cf9b481470e5b89c4c8c --- /dev/null +++ b/gradio/.config/eslint.config.js @@ -0,0 +1,164 @@ +import globals from "globals"; +import ts_plugin from "@typescript-eslint/eslint-plugin"; +import js_plugin from "@eslint/js"; +import jsdoc from "eslint-plugin-jsdoc"; + +import typescriptParser from "@typescript-eslint/parser"; +import sveltePlugin from "eslint-plugin-svelte"; +import svelteParser from "svelte-eslint-parser"; + +const ts_rules_disabled = Object.fromEntries( + Object.keys(ts_plugin.rules).map((rule) => [ + `@typescript-eslint/${rule}`, + "off" + ]) +); +const js_rules_disabled = Object.fromEntries( + Object.keys(js_plugin.configs.all.rules).map((rule) => [rule, "off"]) +); + +const jsdoc_rules_disabled = Object.fromEntries( + Object.keys(jsdoc.configs.recommended.rules).map((rule) => [ + `jsdoc/${rule}`, + "off" + ]) +); + +const js_rules = { + ...js_rules_disabled, + "no-console": ["error", { allow: ["warn", "error", "debug", "info"] }], + "no-constant-condition": "error", + "no-dupe-args": "error", + "no-extra-boolean-cast": "error", + "no-unexpected-multiline": "error", + "no-unreachable": "error", + "array-callback-return": "error", + complexity: "error", + "no-else-return": "error", + "no-useless-return": "error", + "no-undef": "error" +}; + +const ts_rules = { + ...ts_rules_disabled, + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/explicit-function-return-type": [ + "error", + { allowExpressions: true } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/no-inferrable-types": "error" +}; + +const jsdoc_rules = { + ...jsdoc_rules_disabled, + "jsdoc/require-param-description": "error", + "jsdoc/require-returns-description": "error" +}; + +const { browser, es2021, node } = globals; + +export default [ + { + ignores: [ + "**/.svelte-kit/**/*", + "**/node_modules/**", + "**/dist/**", + "**/.config/*", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.node-test.ts", + "js/spa/test/**/*", + "**/*vite.config.ts", + "**/_website/**/*", + "**/app/**/*", + "**/_spaces-test/**/*", + "**/preview/test/**/*", + "**/component-test/**/*", + "**/js/wasm/src/webworker/**/*" + ] + }, + { + files: ["**/*.js", "**/*.cjs"], + languageOptions: { + globals: { + ...browser, + ...es2021, + ...node + } + }, + + plugins: { + "eslint:recommended": js_plugin, + jsdoc + }, + rules: { ...js_rules, ...jsdoc_rules } + }, + + { + files: ["**/*.ts"], + languageOptions: { + parser: typescriptParser, + parserOptions: { + project: "./tsconfig.json", + extraFileExtensions: [".svelte"] + }, + globals: { + ...browser, + ...es2021, + ...node + } + }, + + plugins: { + "@typescript-eslint": ts_plugin, + "eslint:recommended": js_plugin, + jsdoc + }, + rules: { + ...ts_rules, + ...js_rules, + ...jsdoc_rules, + "no-undef": "off" + } + }, + { + files: ["**/client/js/**"], + languageOptions: { + parserOptions: { + project: "./client/js/tsconfig.json" + } + } + }, + { + files: ["**/*.svelte"], + languageOptions: { + parser: svelteParser, + parserOptions: { + parser: typescriptParser, + project: "./tsconfig.json", + extraFileExtensions: [".svelte"] + }, + globals: { + ...browser, + ...es2021 + } + }, + plugins: { + svelte: sveltePlugin, + "@typescript-eslint": ts_plugin, + "eslint:recommended": js_plugin, + jsdoc + }, + rules: { + ...ts_rules, + ...js_rules, + ...jsdoc_rules, + ...sveltePlugin.configs.recommended.rules, + "svelte/no-at-html-tags": "off", + "no-undef": "off" + } + } +]; diff --git a/gradio/.config/lite-builder/pyproject.toml b/gradio/.config/lite-builder/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..99fc873684d2e80719da4323a84d9b9838ca39d6 --- /dev/null +++ b/gradio/.config/lite-builder/pyproject.toml @@ -0,0 +1,33 @@ +[build-system] +requires = ["hatchling",] +build-backend = "hatchling.build" + +[project] +name = "lite-builder" +description = "Python library for easily interacting with trained machine learning models" +license = "Apache-2.0" +version = "0.0.2" +requires-python = ">=3.8" +authors = [ + { name = "Abubakar Abid", email = "gradio-team@huggingface.co" }, + { name = "Ali Abid", email = "gradio-team@huggingface.co" }, + { name = "Ali Abdalla", email = "gradio-team@huggingface.co" }, + { name = "Dawood Khan", email = "gradio-team@huggingface.co" }, + { name = "Ahsen Khaliq", email = "gradio-team@huggingface.co" }, + { name = "Pete Allen", email = "gradio-team@huggingface.co" }, + { name = "Ömer Faruk Özdemir", email = "gradio-team@huggingface.co" }, + { name = "Freddy A Boulton", email = "gradio-team@huggingface.co" }, + { name = "Hannah Blair", email = "gradio-team@huggingface.co" }, +] +keywords = ["machine learning", "reproducibility", "visualization"] + +classifiers = [ + 'Development Status :: 5 - Production/Stable', +] + +[tool.hatch.build] +sources = ["src"] +only-packages = true + +[project.entry-points.hatch] +lite_builder = "lite_builder.hooks" diff --git a/gradio/.config/lite-builder/src/lite_builder/__init__.py b/gradio/.config/lite-builder/src/lite_builder/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/gradio/.config/lite-builder/src/lite_builder/builder.py b/gradio/.config/lite-builder/src/lite_builder/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..d709cc056c995a0f358f5d130b9647c17ff63d6e --- /dev/null +++ b/gradio/.config/lite-builder/src/lite_builder/builder.py @@ -0,0 +1,5 @@ +from hatchling.builders.wheel import WheelBuilder + + +class LiteBuilder(WheelBuilder): + PLUGIN_NAME = 'lite' \ No newline at end of file diff --git a/gradio/.config/lite-builder/src/lite_builder/hooks.py b/gradio/.config/lite-builder/src/lite_builder/hooks.py new file mode 100644 index 0000000000000000000000000000000000000000..d5497878a6f0cfb06d1b074c52071551de99d68c --- /dev/null +++ b/gradio/.config/lite-builder/src/lite_builder/hooks.py @@ -0,0 +1,6 @@ +from hatchling.plugin import hookimpl +from .builder import LiteBuilder + +@hookimpl +def hatch_register_builder(): + return LiteBuilder \ No newline at end of file diff --git a/gradio/.config/playwright-ct.config.ts b/gradio/.config/playwright-ct.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..c72eea9dad61e32711f9c9787c956120ca1cd328 --- /dev/null +++ b/gradio/.config/playwright-ct.config.ts @@ -0,0 +1,41 @@ +import { defineConfig, devices } from "@playwright/experimental-ct-svelte"; +import config from "./basevite.config"; + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "../", + /* The base directory, relative to the config file, for snapshot files created with toMatchSnapshot and toHaveScreenshot. */ + snapshotDir: "./__snapshots__", + /* Maximum time one test can run for. */ + timeout: 10 * 1000, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + + /* Port to use for Playwright component endpoint. */ + ctPort: 3100, + ctViteConfig: config({ mode: "development", command: "build" }) + }, + testMatch: "*.component.spec.ts", + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] } + } + ] +}); diff --git a/gradio/.config/playwright-setup.js b/gradio/.config/playwright-setup.js new file mode 100644 index 0000000000000000000000000000000000000000..8ec01138ed14ce560523d090562d6f3b6b589fb4 --- /dev/null +++ b/gradio/.config/playwright-setup.js @@ -0,0 +1,179 @@ +import { spawn } from "node:child_process"; +import { join, basename } from "path"; +import { fileURLToPath } from "url"; +import { readdirSync, writeFileSync } from "fs"; +import net from "net"; + +import kl from "kleur"; + +const __dirname = fileURLToPath(new URL(".", import.meta.url)); +const TEST_APP_PATH = join(__dirname, "./test.py"); +const TEST_FILES_PATH = join(__dirname, "..", "js", "spa", "test"); +const ROOT = join(__dirname, ".."); + +const test_files = readdirSync(TEST_FILES_PATH) + .filter( + (f) => + f.endsWith("spec.ts") && + !f.endsWith(".skip.spec.ts") && + !f.endsWith(".component.spec.ts") && + !f.endsWith(".reload.spec.ts") + ) + .map((f) => ({ + module_name: `${basename(f, ".spec.ts")}.run`, + dir_name: basename(f, ".spec.ts") + })); + +export default async function global_setup() { + const verbose = process.env.GRADIO_TEST_VERBOSE; + + const port = await find_free_port(7860, 8860); + process.env.GRADIO_E2E_TEST_PORT = port; + + process.stdout.write(kl.yellow("\nCreating test gradio app.\n\n")); + + const test_cases = []; + // check if there is a testcase file in the same directory as the test file + // if there is, append that to the file + test_files.forEach((value) => { + const test_case_dir = join(ROOT, "demo", value.dir_name); + + readdirSync(test_case_dir) + .filter((f) => f.endsWith("_testcase.py")) + .forEach((f) => { + test_cases.push({ + module_name: `${value.dir_name}.${basename(f, ".py")}`, + dir_name: `${value.dir_name}_${basename(f, ".py")}` + }); + }); + }); + + const all_test_files = test_files.concat(test_cases); + const test_app = make_app(all_test_files, port); + process.stdout.write(kl.yellow("App created. Starting test server.\n\n")); + + process.stdout.write(kl.bgBlue(" =========================== \n")); + process.stdout.write(kl.bgBlue(" === PYTHON STARTUP LOGS === \n")); + process.stdout.write(kl.bgBlue(" =========================== \n\n")); + + writeFileSync(TEST_APP_PATH, test_app); + + const app = await spawn_gradio_app(TEST_APP_PATH, port, verbose); + + process.stdout.write( + kl.green(`\n\nServer started. Running tests on port ${port}.\n`) + ); + + return () => { + process.stdout.write(kl.green(`\nTests complete, cleaning up!\n`)); + + kill_process(app); + }; +} +const INFO_RE = /^INFO:/; + +function spawn_gradio_app(app, port, verbose) { + const PORT_RE = new RegExp(`:${port}`); + + return new Promise((res, rej) => { + const _process = spawn(`python`, [app], { + shell: true, + stdio: "pipe", + cwd: ROOT, + env: { + ...process.env, + PYTHONUNBUFFERED: "true", + GRADIO_ANALYTICS_ENABLED: "False", + GRADIO_IS_E2E_TEST: "1" + } + }); + _process.stdout.setEncoding("utf8"); + + function std_out(data) { + const _data = data.toString(); + const is_info = INFO_RE.test(_data); + + if (is_info) { + process.stdout.write(kl.yellow(_data)); + } + + if (!is_info) { + process.stdout.write(`${_data}\n`); + } + + if (PORT_RE.test(_data)) { + process.stdout.write(kl.bgBlue("\n =========== END =========== ")); + + res(_process); + + if (!verbose) { + _process.stdout.off("data", std_out); + _process.stderr.off("data", std_out); + } + } + } + + _process.stdout.on("data", std_out); + _process.stderr.on("data", std_out); + _process.on("exit", () => kill_process(_process)); + _process.on("close", () => kill_process(_process)); + _process.on("disconnect", () => kill_process(_process)); + }); +} + +function kill_process(process) { + process.kill("SIGKILL"); +} + +function make_app(demos, port) { + return ` +import uvicorn +from fastapi import FastAPI +import gradio as gr + +${demos.map((obj) => `from demo.${obj.module_name} import demo as ${obj.dir_name}`).join("\n")} + +app = FastAPI() +${demos + .map( + (obj) => + `app = gr.mount_gradio_app(app, ${obj.dir_name}, path="/${obj.dir_name}", max_file_size=${ + obj.dir_name == "upload_file_limit_test" ? "'15kb'" : "None" + })` + ) + .join("\n")} + +config = uvicorn.Config(app, port=${port}, log_level="info") +server = uvicorn.Server(config=config) +server.run()`; +} + +export async function find_free_port(start_port, end_port) { + for (let port = start_port; port < end_port; port++) { + if (await is_free_port(port)) { + return port; + } + } + + throw new Error( + `Could not find free ports: there were not enough ports available.` + ); +} + +export function is_free_port(port) { + return new Promise((accept, reject) => { + const sock = net.createConnection(port, "127.0.0.1"); + sock.once("connect", () => { + sock.end(); + accept(false); + }); + sock.once("error", (e) => { + sock.destroy(); + if (e.code === "ECONNREFUSED") { + accept(true); + } else { + reject(e); + } + }); + }); +} diff --git a/gradio/.config/playwright.config.js b/gradio/.config/playwright.config.js new file mode 100644 index 0000000000000000000000000000000000000000..d7eb6f9f4cd08e0decd5594b9fd068210d0b5f53 --- /dev/null +++ b/gradio/.config/playwright.config.js @@ -0,0 +1,73 @@ +import { defineConfig, devices } from "@playwright/test"; + +const base = defineConfig({ + use: { + screenshot: "only-on-failure", + trace: "retain-on-failure", + bypassCSP: true, + launchOptions: { + args: [ + "--disable-web-security", + "--use-fake-device-for-media-stream", + "--use-fake-ui-for-media-stream", + "--use-file-for-fake-audio-capture=../gradio/test_data/test_audio.wav" + ] + } + }, + expect: { timeout: 10000 }, + timeout: 30000, + testMatch: /.*\.spec\.ts/, + testDir: "..", + workers: process.env.CI ? 1 : undefined, + retries: 3 +}); + +const normal = defineConfig(base, { + globalSetup: process.env.CUSTOM_TEST ? undefined : "./playwright-setup.js", + projects: [ + { + name: "firefox", + use: { ...devices["Desktop Firefox"] }, + testMatch: /.stream_(audio|video)_out\.spec\.ts/ + }, + { + name: "chrome", + use: { + ...devices["Desktop Chrome"], + permissions: ["clipboard-read", "clipboard-write", "microphone"] + }, + testIgnore: /.stream_(audio|video)_out\.spec\.ts/ + } + ] +}); + +const lite = defineConfig(base, { + webServer: { + command: "python -m http.server 8000 --directory ../js/lite", + url: "http://localhost:8000/", + reuseExistingServer: !process.env.CI + }, + testMatch: [ + "**/file_component_events.spec.ts", + "**/kitchen_sink.spec.ts", + "**/gallery_component_events.spec.ts", + "**/image_remote_url.spec.ts", // To detect the bugs on Lite fixed in https://github.com/gradio-app/gradio/pull/8011 and https://github.com/gradio-app/gradio/pull/8026 + "**/outbreak_forecast.spec.ts" // To test matplotlib on Lite + ], + workers: 1, + retries: 3, + timeout: 60000, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] } + }, + { + name: "firefox", + use: { ...devices["Desktop Firefox"] }, + testIgnore: "**/kitchen_sink.*" // This test requires the camera permission but it's not supported on FireFox: https://github.com/microsoft/playwright/issues/11714 + } + ] +}); + +export default !!process.env.GRADIO_E2E_TEST_LITE ? lite : normal; diff --git a/gradio/.config/playwright/index.html b/gradio/.config/playwright/index.html new file mode 100644 index 0000000000000000000000000000000000000000..229f296a9e5a3df9f93a2fe378fc31e3b4fff879 --- /dev/null +++ b/gradio/.config/playwright/index.html @@ -0,0 +1,12 @@ + + + + + + Testing Page + + +
+ + + diff --git a/gradio/.config/playwright/index.ts b/gradio/.config/playwright/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ac6de14bf2ed6d010d48977f7e17bb756307d5ce --- /dev/null +++ b/gradio/.config/playwright/index.ts @@ -0,0 +1,2 @@ +// Import styles, initialize component theme here. +// import '../src/common.css'; diff --git a/gradio/.config/postcss.config.cjs b/gradio/.config/postcss.config.cjs new file mode 100644 index 0000000000000000000000000000000000000000..81b1976568fb4a99716139d8c63d14a8f5d99390 --- /dev/null +++ b/gradio/.config/postcss.config.cjs @@ -0,0 +1,8 @@ +const tailwindcss = require("tailwindcss"); +const autoprefixer = require("autoprefixer"); +const nested = require("tailwindcss/nesting"); +const tw_config = require("./tailwind.config.cjs"); + +module.exports = { + plugins: [nested, tailwindcss(tw_config), autoprefixer] +}; diff --git a/gradio/.config/setup_vite_tests.ts b/gradio/.config/setup_vite_tests.ts new file mode 100644 index 0000000000000000000000000000000000000000..aebff9e828948c749a969cfaf87c6cd0dcde7877 --- /dev/null +++ b/gradio/.config/setup_vite_tests.ts @@ -0,0 +1,8 @@ +import type { TestingLibraryMatchers } from "@testing-library/jest-dom/matchers"; +import "@testing-library/jest-dom/vitest"; + +declare module "vitest" { + interface Assertion + extends jest.Matchers, + TestingLibraryMatchers {} +} diff --git a/gradio/.config/svelte.config.js b/gradio/.config/svelte.config.js new file mode 100644 index 0000000000000000000000000000000000000000..be776c561024a0f9648b2ca69d72cba56eb33d7e --- /dev/null +++ b/gradio/.config/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; + +export default { + preprocess: vitePreprocess() +}; diff --git a/gradio/.config/tailwind.config.cjs b/gradio/.config/tailwind.config.cjs new file mode 100644 index 0000000000000000000000000000000000000000..fe92c25a4ef936efc0d55db7bc77b6ecb8c3a1d0 --- /dev/null +++ b/gradio/.config/tailwind.config.cjs @@ -0,0 +1,12 @@ +module.exports = { + content: [ + "./src/**/*.{html,js,svelte,ts}", + "**/@gradio/**/*.{html,js,svelte,ts}" + ], + + theme: { + extend: {} + }, + + plugins: [require("@tailwindcss/forms")] +}; diff --git a/gradio/.config/vitest.config.ts b/gradio/.config/vitest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..be7741d0a246b2cba227684aeee2b391553883bf --- /dev/null +++ b/gradio/.config/vitest.config.ts @@ -0,0 +1,3 @@ +import config from "../js/spa/vite.config"; + +export default config; diff --git a/gradio/.devcontainer/devcontainer.json b/gradio/.devcontainer/devcontainer.json new file mode 100644 index 0000000000000000000000000000000000000000..49c3e5f12d1eacef047a9c973b79feadd0217915 --- /dev/null +++ b/gradio/.devcontainer/devcontainer.json @@ -0,0 +1,41 @@ +// See https://containers.dev +{ + "name": "Python 3", + "image": "mcr.microsoft.com/devcontainers/python:1-3.9", + + // See https://containers.dev/features + "features": { + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/node:1": {}, + "ghcr.io/devcontainers-contrib/features/ffmpeg-apt-get:1": {} + }, + + "hostRequirements": { + "cpus": 4, + "memory": "8gb", + "storage": "32gb" + }, + + "customizations": { + "vscode": { + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "ms-python.black-formatter", + "ms-toolsai.jupyter", + "esbenp.prettier-vscode", + "svelte.svelte-vscode", + "phoenisx.cssvar" + ], + "remote.autoForwardPorts": false + } + }, + + "forwardPorts": [7860, 9876], + "portsAttributes": { + "7860": { "label": "gradio port" }, + "9876": { "label": "gradio dev port" } + }, + + "postCreateCommand": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && chmod +x scripts/install_gradio.sh scripts/install_test_requirements.sh scripts/build_frontend.sh && ./scripts/install_gradio.sh && ./scripts/install_test_requirements.sh && ./scripts/build_frontend.sh" +} diff --git a/gradio/.dockerignore b/gradio/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..17e4ab12138394634531c56b0c9eb6ae130ca5a7 --- /dev/null +++ b/gradio/.dockerignore @@ -0,0 +1,41 @@ +# Python build +.eggs/ +gradio.egg-info/* +!gradio.egg-info/requires.txt +!gradio.egg-info/PKG-INFO +dist/ +*.pyc +__pycache__/ +*.py[cod] +*$py.class +build/ + +# JS build +gradio/templates/frontend/static +gradio/templates/frontend/cdn + +# Secrets +.env + +# Gradio run artifacts +*.db +*.sqlite3 +gradio/launches.json +gradio/hash_seed.txt + +# Tests +.coverage +coverage.xml +test.txt + +# Demos +demo/tmp.zip +demo/flagged +demo/files/*.avi +demo/files/*.mp4 + +# Etc +.idea/* +.DS_Store +*.bak +workspace.code-workspace \ No newline at end of file diff --git a/gradio/.editorconfig b/gradio/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..f4e045fdb9a018c79ddf8e8c52de8b01eecd38ce --- /dev/null +++ b/gradio/.editorconfig @@ -0,0 +1,8 @@ + +root = true + +[{js/**,client/js/**}] +end_of_line = lf +insert_final_newline = true +indent_style = tab +tab_width = 2 diff --git a/gradio/.git-blame-ignore-revs b/gradio/.git-blame-ignore-revs new file mode 100644 index 0000000000000000000000000000000000000000..5acfdd111f027eb9964e437655316a6cb290d957 --- /dev/null +++ b/gradio/.git-blame-ignore-revs @@ -0,0 +1,14 @@ +# https://github.com/gradio-app/gradio/pull/4487 - refactor components.py to separate files +69f36f98535c904e7cac2b4942cecc747ed7443c +# Format the codebase +cc0cff893f9d7d472788adc2510c123967b384fe +# Switch from black to ruff +8a70e83db9c7751b46058cdd2514e6bddeef6210 +# format (#4810) +7fa5e766ce0f89f1fb84c329e62c9df9c332120a +# lint website +4bf301324b3b180fa32166ff1774312b01334c88 +# format frontend with prettier +980b9f60eb49ed81e4957debe7b23a559a4d4b51 +# Refactor component directories (#5074) +1419538ea795caa391e3de809379f10639e9e764 diff --git a/gradio/.github/ISSUE_TEMPLATE/bug_report_template.yml b/gradio/.github/ISSUE_TEMPLATE/bug_report_template.yml new file mode 100644 index 0000000000000000000000000000000000000000..dc795e6d8b38d73911f1b15116041fdf81a04a81 --- /dev/null +++ b/gradio/.github/ISSUE_TEMPLATE/bug_report_template.yml @@ -0,0 +1,69 @@ +name: "\U0001F41E Bug report" +description: Report a bug on Gradio +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! Before you get started, please [search to see](https://github.com/gradio-app/gradio/issues) if an issue already exists for the bug you encountered + - type: textarea + id: bug-description + attributes: + label: Describe the bug + description: Please provide a concise description of what the bug is, in clear English. If you intend to submit a PR for this issue, tell us in the description. + placeholder: Bug description + validations: + required: true + - type: checkboxes + attributes: + label: Have you searched existing issues? 🔎 + description: Please search to see if an issue already exists for the issue you encountered. + options: + - label: I have searched and found no existing issues + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction + description: Please provide a minimal example, with code, that can be run to reproduce the issue. Do NOT provide screenshots of code, or link to external repos or applications. Use ``` to format code blocks. + placeholder: Reproduction + value: | + ```python + import gradio as gr + + ``` + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: Screenshot + description: If relevant, please include screenshot(s) of your Gradio app so that we can understand what the issue is. + - type: textarea + id: logs + attributes: + label: Logs + description: "Please include the full stacktrace of the errors you get from Python or Javascript. If you are running in a colab notebooks, you can get the logs with by setting `debug=True`, i.e: `gradio.Interface.launch(debug=True)`" + render: shell + - type: textarea + id: system-info + attributes: + label: System Info + description: Please ensure you are running the latest version of Gradio. You can get the Gradio version and all its dependencies by running `gradio environment` + render: shell + validations: + required: true + - type: dropdown + id: severity + attributes: + label: Severity + description: Select the severity of this issue + options: + - I can work around it + - Blocking usage of gradio + validations: + required: true + - type: markdown + attributes: + value: | + 📌 Please ensure that you have filled all of the required sections above, and that the reproduction you have provided is [minimal, complete, and reproducible](https://stackoverflow.com/help/minimal-reproducible-example). Incomplete issues will be closed. diff --git a/gradio/.github/ISSUE_TEMPLATE/config.yml b/gradio/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..f7f293887d8b1e8e499fbd7da0943f0bcd389750 --- /dev/null +++ b/gradio/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 💡 General questions + url: https://discord.com/invite/feTf9x3ZSB + about: Have general questions about how to use Gradio? Please ask in our community Discord for quicker responses diff --git a/gradio/.github/ISSUE_TEMPLATE/feature_request.md b/gradio/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..c51010af86e60376e2eddbfd091a92785aa1683f --- /dev/null +++ b/gradio/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: ⚡ Feature request +about: Suggest an improvement or new feature or a new Guide for Gradio +title: '' +labels: '' +assignees: '' + +--- +- [ ] I have searched to see if a similar issue already exists. + + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/gradio/.github/PULL_REQUEST_TEMPLATE.md b/gradio/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000000000000000000000000000000..93ad225b3946105cfec45d8a460b70d2646a0fc6 --- /dev/null +++ b/gradio/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +## Description + +Please include a concise summary, in clear English, of the changes in this pull request. If it closes an issue, please mention it here. + +Closes: #(issue) + +## 🎯 PRs Should Target Issues + +Before your create a PR, please check to see if there is [an existing issue](https://github.com/gradio-app/gradio/issues) for this change. If not, please create an issue before you create this PR, unless the fix is very small. + +Not adhering to this guideline will result in the PR being closed. + +## Testing and Formatting Your Code + +1. PRs will only be merged if tests pass on CI. We recommend at least running the backend tests locally, please set up [your Gradio environment locally](https://github.com/gradio-app/gradio/blob/main/CONTRIBUTING.md) and run the backed tests: `bash scripts/run_backend_tests.sh` + +2. Please run these bash scripts to automatically format your code: `bash scripts/format_backend.sh`, and (if you made any changes to non-Python files) `bash scripts/format_frontend.sh` + diff --git a/gradio/.github/actions/changes/action.yml b/gradio/.github/actions/changes/action.yml new file mode 100644 index 0000000000000000000000000000000000000000..44353f21e41092c1fe04930a19635b203142c67d --- /dev/null +++ b/gradio/.github/actions/changes/action.yml @@ -0,0 +1,78 @@ +name: "prepare" +description: "Prepare workflow" + +inputs: + token: + description: "GitHub token" + filter: + description: "Which filter to use" + +outputs: + should_run: + description: "Whether to run the workflow" + value: ${{ steps.pr.outputs.should_run }} + pr_number: + description: "PR number" + value: ${{ steps.pr.outputs.pr_number }} + sha: + description: "SHA of the HEAD commit of the PR" + value: ${{ steps.pr.outputs.sha }} + source_repo: + description: "Source repo" + value: ${{ steps.pr.outputs.source_repo }} + source_branch: + description: "Source branch" + value: ${{ steps.pr.outputs.source_branch }} + labels: + description: "Labels on the PR" + value: ${{ steps.pr.outputs.labels }} + run_id: + description: "Run ID" + value: ${{ steps.pr.outputs.run_id }} + gradio_version: + description: "Gradio version" + value: ${{ steps.pr.outputs.gradio_version }} + +runs: + using: "composite" + steps: + - uses: actions/checkout@v4 + - uses: gradio-app/github/actions/filter-paths@main + id: changes + with: + token: ${{ inputs.token }} + filter: ${{ inputs.filter }} + - name: get gradio version + id: gradio_version + shell: bash + run: | + GRADIO_VERSION=$(curl -s https://pypi.org/pypi/gradio/json | grep -o '"version":"[^"]*"' | cut -d'"' -f4 | head -n 1) + echo "gradio_version=$GRADIO_VERSION" >> $GITHUB_OUTPUT + - name: convert to JSON + uses: gradio-app/github/actions/input-to-json@main + with: + path: output.json + sha: ${{ github.event.pull_request.head.sha || github.sha }} + source_repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + source_branch: ${{ github.event.pull_request.head.ref || github.ref }} + pr_number: ${{ github.event.pull_request.number || 'false'}} + should_run: ${{ steps.changes.outputs.match }} + labels: "[${{ join(github.event.pull_request.labels.*.name, ', ') }}]" + run_id: ${{ github.run_id }} + gradio_version: ${{ steps.gradio_version.outputs.gradio_version }} + - name: cat json + run: cat output.json + shell: bash + - name: upload JSON + uses: actions/upload-artifact@v4 + with: + name: changes + path: output.json + - name: set outputs + id: pr + uses: gradio-app/github/actions/json-to-output@main + with: + path: output.json + - name: echo outputs + run: echo "${{ toJson(steps.pr.outputs) }}" + shell: bash diff --git a/gradio/.github/actions/install-all-deps/action.yml b/gradio/.github/actions/install-all-deps/action.yml new file mode 100644 index 0000000000000000000000000000000000000000..f80010391770246005ff2234dceea41eaf1d9713 --- /dev/null +++ b/gradio/.github/actions/install-all-deps/action.yml @@ -0,0 +1,96 @@ +name: "install all deps" +description: "Install all deps" + +inputs: + skip_build: + description: "Skip build" + default: "false" + build_lite: + description: "Build lite" + default: "false" + test: + description: "Test" + default: "false" + python_version: + description: "Python version" + default: "3.10" + os: + description: "OS" + default: "ubuntu-latest" +outputs: + venv_activate: + description: "Venv activate" + value: ${{ steps.venv.outputs.venv_activate }} + +runs: + using: "composite" + steps: + - name: Set venv binary path (linux) + if: ${{ inputs.os == 'ubuntu-latest' }} + shell: bash + run: | + echo "VENV_ACTIVATE=venv/bin/activate" >> $GITHUB_ENV + - name: Set venv binary path (windows) + if: ${{ inputs.os == 'windows-latest' }} + shell: bash + run: | + echo "VENV_ACTIVATE=venv\\\Scripts\\\activate" >> $GITHUB_ENV + - name: log venv binary path + id: venv + shell: bash + run: | + echo "venv_activate=$VENV_ACTIVATE" >> $GITHUB_OUTPUT + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python_version }} + cache: pip + cache-dependency-path: | + client/python/requirements.txt + requirements.txt + test/requirements.txt + - name: Create env + shell: bash + run: | + python -m pip install --upgrade virtualenv + python -m virtualenv venv + - name: Install uv + shell: bash + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + - uses: actions/cache@v4 + id: cache + with: + path: | + venv/** + client/python/venv + restore-keys: | + gradio-lib-${{inputs.python_version}}-${{inputs.os}}-latest-pip- + key: "gradio-lib-${{inputs.python_version}}-${{inputs.os}}-latest-pip-${{ hashFiles('client/python/requirements.txt') }}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('test/requirements.txt') }}-${{ hashFiles('client/python/test/requirements.txt') }}${{ inputs.test == 'true' && '-test' || ''}}" + - name: Install ffmpeg + uses: FedericoCarboni/setup-ffmpeg@583042d32dd1cabb8bd09df03bde06080da5c87c # @v2 + - name: Install test dependencies + if: inputs.test == 'true' && steps.cache.outputs.cache-hit != 'true' + shell: bash + run: | + . ${{ env.VENV_ACTIVATE }} + uv pip install -r test/requirements.txt + uv pip install -r client/python/test/requirements.txt + - name: Install Gradio and Client Libraries Locally (Linux) + shell: bash + run: | + . ${{ env.VENV_ACTIVATE }} + uv pip install -e client/python + uv pip install -e ".[oauth]" + - name: install-frontend + uses: "gradio-app/gradio/.github/actions/install-frontend-deps@main" + with: + skip_build: ${{ inputs.skip_build }} + build_lite: ${{ inputs.build_lite }} + - name: generate json + shell: bash + if: inputs.os == 'ubuntu-latest' + run: | + . ${{ env.VENV_ACTIVATE }} + uv pip install boto3 && python js/_website/generate_jsons/generate.py diff --git a/gradio/.github/actions/install-frontend-deps/action.yml b/gradio/.github/actions/install-frontend-deps/action.yml new file mode 100644 index 0000000000000000000000000000000000000000..b465a253ea6bb435154d81dd298213b3c934b719 --- /dev/null +++ b/gradio/.github/actions/install-frontend-deps/action.yml @@ -0,0 +1,54 @@ +name: "install frontend" +description: "Install frontend deps" + +inputs: + skip_build: + description: "Skip build" + default: "false" + build_lite: + description: "Build lite" + default: "false" + +runs: + using: "composite" + steps: + - uses: actions/cache@v4 + id: frontend-core-cache + if: inputs.skip_build == 'false' + with: + path: | + gradio/templates/** + key: gradio-lib-front-end-${{ hashFiles('js/**', 'client/js/**')}} + - uses: actions/cache@v4 + id: frontend-lite-cache + if: inputs.build_lite == 'true' + with: + path: | + js/lite/dist/** + key: gradio-lib-front-end-lite-${{ hashFiles('js/**', 'client/js/**', 'gradio/**', 'requirements.txt')}} + - name: Install pnpm + uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # @v4 + with: + version: 9.1.x + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: pnpm + cache-dependency-path: pnpm-lock.yaml + - name: Install deps + shell: bash + run: pnpm i --frozen-lockfile --ignore-scripts + - name: Build Css + shell: bash + run: pnpm css + - name: Build frontend + if: inputs.skip_build == 'false' && steps.frontend-core-cache.outputs.cache-hit != 'true' + shell: bash + run: pnpm build + - name: Build frontend lite + if: inputs.build_lite == 'true' && steps.frontend-lite-cache.outputs.cache-hit != 'true' + shell: bash + run: | + . venv/bin/activate + python -m pip install -U build hatch packaging>=23.2 # packaging>=23.2 is needed to build Lite due to https://github.com/pypa/hatch/issues/1381 + pnpm build:lite diff --git a/gradio/.github/configs/semgrep_rules.yaml b/gradio/.github/configs/semgrep_rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e96b4808fcb0936bb44353f8d314b2ac03cfdc32 --- /dev/null +++ b/gradio/.github/configs/semgrep_rules.yaml @@ -0,0 +1,110 @@ +rules: + - id: third-party-action-not-pinned-to-commit-sha + patterns: + - pattern-inside: "{steps: ...}" + - pattern: | + uses: "$USES" + - metavariable-pattern: + metavariable: $USES + language: generic + patterns: + - pattern-not-regex: ^[.]/ + - pattern-not-regex: ^actions/ + - pattern-not-regex: ^github/ + - pattern-not-regex: ^gradio-app/gradio + - pattern-not-regex: ^gradio-app/github + - pattern-not-regex: "@[0-9a-f]{40}$" + - pattern-not-regex: ^docker://.*@sha256:[0-9a-f]{64}$ + - pattern-not-regex: ^docker://docker$ + message: + An action sourced from a third-party repository on GitHub is not pinned + to a full length commit SHA. Pinning an action to a full length commit SHA + is currently the only way to use an action as an immutable release. + Pinning to a particular SHA helps mitigate the risk of a bad actor adding + a backdoor to the action's repository, as they would need to generate a + SHA-1 collision for a valid Git object payload. + languages: + - yaml + severity: WARNING + metadata: + cwe: + - "CWE-1357: Reliance on Insufficiently Trustworthy Component" + - "CWE-353: Missing Support for Integrity Check" + owasp: A06:2021 - Vulnerable and Outdated Components + references: + - https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components + - https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions + category: security + technology: + - github-actions + subcategory: + - vuln + likelihood: LOW + impact: LOW + confidence: HIGH + license: Commons Clause License Condition v1.0[LGPL-2.1-only] + vulnerability_class: + - Cryptographic Issues + - Other + + - id: insecure-file-permissions + languages: + - python + severity: ERROR + message: These permissions `$BITS` are widely permissive and grant access to + more people than may be necessary. A good default is `0o644` which gives + read and write access to yourself and read access to everyone else. + patterns: + - pattern-inside: os.$METHOD(...) + - pattern-either: + - patterns: + - pattern: os.$METHOD($FILE, $BITS, ...) + - metavariable-comparison: + comparison: $BITS >= 0o650 and $BITS < 0o100000 + - patterns: + - pattern: os.$METHOD($FILE, $BITS) + - metavariable-comparison: + comparison: $BITS >= 0o100650 + - patterns: + - pattern: os.$METHOD($FILE, $BITS, ...) + - metavariable-pattern: + metavariable: $BITS + patterns: + - pattern-either: + - pattern: <... stat.S_IWGRP ...> + - pattern: <... stat.S_IXGRP ...> + - pattern: <... stat.S_IWOTH ...> + - pattern: <... stat.S_IXOTH ...> + - pattern: <... stat.S_IRWXO ...> + - pattern: <... stat.S_IRWXG ...> + - patterns: + - pattern: os.$METHOD($FILE, $EXPR | $MOD, ...) + - metavariable-comparison: + comparison: $MOD == 0o111 + - metavariable-pattern: + metavariable: $METHOD + patterns: + - pattern-either: + - pattern: chmod + - pattern: lchmod + - pattern: fchmod + metadata: + category: security + owasp: + - A01:2021 - Broken Access Control + cwe: + - "CWE-276: Incorrect Default Permissions" + technology: + - python + references: + - https://owasp.org/Top10/A01_2021-Broken_Access_Control + cwe2022-top25: true + cwe2021-top25: true + subcategory: + - vuln + likelihood: LOW + impact: MEDIUM + confidence: MEDIUM + license: Commons Clause License Condition v1.0[LGPL-2.1-only] + vulnerability_class: + - Improper Authorization diff --git a/gradio/.github/filters.json b/gradio/.github/filters.json new file mode 100644 index 0000000000000000000000000000000000000000..75cdcada60bb95230fdb618872925dfa9e6a79dd --- /dev/null +++ b/gradio/.github/filters.json @@ -0,0 +1,51 @@ +{ + "gradio": [ + "client/python/**", + "gradio/**", + "requirements.txt", + ".github/**", + "scripts/**", + "test/**" + ], + "js": [ + "js/**", + "client/js/**", + ".github/**", + "package.json", + "pnpm-lock.yaml", + "tsconfig.json", + ".config/**" + ], + "functional": [ + ".github/**", + "client/**", + "demo/**", + "gradio/**", + "js/**", + "scripts/**", + + "globals.d.ts", + "package.json", + "pnpm-lock.yaml", + "pyproject.toml", + "requirements.txt", + ".config/**" + ], + "visual": [ + ".github/workflows/deploy-chromatic.yml", + "js!(/_website)/**", + "package.json" + ], + "website": [ + "js/_website/**", + "package.json", + "pnpm-lock.yaml", + "guides/**", + "README.md", + "CHANGELOG.md", + "gradio/**", + "client/**", + "demo/**", + ".github/deploy-website.yml" + ] +} diff --git a/gradio/.github/stale b/gradio/.github/stale new file mode 100644 index 0000000000000000000000000000000000000000..9d23fb5a9d8ba617e7d77a55f8ae5bfc1e46f8fc --- /dev/null +++ b/gradio/.github/stale @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 30 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/gradio/.github/workflows/comment-queue.yml b/gradio/.github/workflows/comment-queue.yml new file mode 100644 index 0000000000000000000000000000000000000000..a55c4161b49b9657bb2772420df83ea6b682e6aa --- /dev/null +++ b/gradio/.github/workflows/comment-queue.yml @@ -0,0 +1,37 @@ +name: Comment on pull request without race conditions + +on: + workflow_call: + inputs: + pr_number: + type: string + message: + required: true + type: string + tag: + required: false + type: string + default: "previews" + additional_text: + required: false + type: string + default: "" + secrets: + gh_token: + required: true + +jobs: + comment: + environment: comment_pr + concurrency: + group: ${{inputs.pr_number || inputs.tag}} + runs-on: ubuntu-latest + steps: + - name: comment on pr + uses: "gradio-app/github/actions/comment-pr@main" + with: + gh_token: ${{ secrets.gh_token }} + tag: ${{ inputs.tag }} + pr_number: ${{ inputs.pr_number}} + message: ${{ inputs.message }} + additional_text: ${{ inputs.additional_text }} diff --git a/gradio/.github/workflows/delete-stale-spaces.yml b/gradio/.github/workflows/delete-stale-spaces.yml new file mode 100644 index 0000000000000000000000000000000000000000..0179405029434f11f85403b6e6f87925d9e77a8d --- /dev/null +++ b/gradio/.github/workflows/delete-stale-spaces.yml @@ -0,0 +1,42 @@ +# safe runs from main + +name: Delete Stale Spaces + +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + inputs: + daysStale: + description: "How stale a space needs to be to be deleted (days)" + required: true + default: "7" + +permissions: {} + +jobs: + delete-old-spaces: + permissions: + contents: read + environment: deploy_spaces + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - name: Install pip + run: python -m pip install pip wheel requests + - name: Install Hub Client Library + run: pip install huggingface-hub==0.9.1 + - name: Set daysStale + env: + DEFAULT_DAYS_STALE: "7" + DAYS_STALE: ${{ github.event.inputs.daysStale || env.DEFAULT_DAYS_STALE}} + run: echo DAYS_STALE= "$DAYS_STALE" >> $GITHUB_ENV + - name: Find and delete stale spaces + run: | + python scripts/delete_old_spaces.py $DAYS_STALE \ + gradio-pr-deploys \ + ${{ secrets.SPACES_DEPLOY_TOKEN }} diff --git a/gradio/.github/workflows/generate-changeset.yml b/gradio/.github/workflows/generate-changeset.yml new file mode 100644 index 0000000000000000000000000000000000000000..34d7499790a08063077f336c95bd93980d37e881 --- /dev/null +++ b/gradio/.github/workflows/generate-changeset.yml @@ -0,0 +1,96 @@ +name: Generate changeset +on: + workflow_run: + workflows: ["trigger-changeset"] + types: + - completed + +env: + CI: true + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}" + cancel-in-progress: true + +permissions: {} + +jobs: + get-pr: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + if: github.event.workflow_run.conclusion == 'success' + outputs: + found_pr: ${{ steps.pr_details.outputs.found_pr }} + pr_number: ${{ steps.pr_details.outputs.pr_number }} + source_repo: ${{ steps.pr_details.outputs.source_repo }} + source_branch: ${{ steps.pr_details.outputs.source_branch }} + steps: + - name: get pr details + id: pr_details + uses: gradio-app/github/actions/find-pr@main + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + comment-changes-start: + uses: "./.github/workflows/comment-queue.yml" + needs: get-pr + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.get-pr.outputs.pr_number }} + message: changes~pending~null + version: + permissions: + contents: read + environment: changeset + name: version + needs: get-pr + runs-on: ubuntu-latest + if: needs.get-pr.outputs.found_pr == 'true' + outputs: + skipped: ${{ steps.version.outputs.skipped }} + comment_url: ${{ steps.version.outputs.comment_url }} + steps: + - uses: actions/checkout@v4 + with: + repository: ${{ needs.get-pr.outputs.source_repo }} + ref: ${{ needs.get-pr.outputs.source_branch }} + fetch-depth: 0 + token: ${{ secrets.COMMENT_TOKEN }} + - name: generate changeset + id: version + uses: "gradio-app/github/actions/generate-changeset@main" + with: + github_token: ${{ secrets.CHANGESET_GITHUB_TOKEN }} + main_pkg: gradio + pr_number: ${{ needs.get-pr.outputs.pr_number }} + branch_name: ${{ needs.get-pr.outputs.source_branch }} + comment-changes-skipped: + uses: "./.github/workflows/comment-queue.yml" + needs: [get-pr, version] + if: needs.version.result == 'success' && needs.version.outputs.skipped == 'true' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.get-pr.outputs.pr_number }} + message: changes~warning~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ + comment-changes-success: + uses: "./.github/workflows/comment-queue.yml" + needs: [get-pr, version] + if: needs.version.result == 'success' && needs.version.outputs.skipped == 'false' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.get-pr.outputs.pr_number }} + message: changes~success~${{ needs.version.outputs.comment_url }} + comment-changes-failure: + uses: "./.github/workflows/comment-queue.yml" + needs: [get-pr, version] + if: always() && needs.version.result == 'failure' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.get-pr.outputs.pr_number }} + message: changes~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ diff --git a/gradio/.github/workflows/npm-previews.yml b/gradio/.github/workflows/npm-previews.yml new file mode 100644 index 0000000000000000000000000000000000000000..27b2ae50c1a9556b352dbc9b195bab619d83b644 --- /dev/null +++ b/gradio/.github/workflows/npm-previews.yml @@ -0,0 +1,53 @@ +name: "npm" + +on: + pull_request: + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "js" + token: ${{ secrets.GITHUB_TOKEN }} + preview: + permissions: + contents: read + name: npm-previews + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' + steps: + - uses: actions/checkout@v4 + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-frontend-deps@main" + with: + skip_build: true + - name: build client + run: pnpm --filter @gradio/client --filter @gradio/wasm --filter @gradio/preview build + - name: publish npm previews + run: pnpx pkg-pr-new publish './js/*' './client/js' --comment=off diff --git a/gradio/.github/workflows/previews-build.yml b/gradio/.github/workflows/previews-build.yml new file mode 100644 index 0000000000000000000000000000000000000000..bbedf95bb2b21105f2aac127e6f28384adca85b8 --- /dev/null +++ b/gradio/.github/workflows/previews-build.yml @@ -0,0 +1,90 @@ +name: "previews-build" + +on: + workflow_dispatch: + pull_request: + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + name: "changes" + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + gradio_version: ${{ steps.changes.outputs.gradio_version }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "functional" + token: ${{ secrets.GITHUB_TOKEN }} + build: + permissions: + contents: read + name: "previews-build" + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' || github.event_name == 'workflow_dispatch' + steps: + - uses: actions/checkout@v4 + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + build_lite: "true" + - name: Package Lite NPM package + working-directory: js/lite + run: pnpm pack --pack-destination . + - name: Upload Lite NPM package + uses: actions/upload-artifact@v4 + with: + name: gradio-lite-tar + path: js/lite/gradio-lite-*.tgz + - name: install deps + run: python -m pip install build + - name: Build pr package + run: | + python -c 'import json; j = json.load(open("gradio/package.json")); j["version"] = "${{ needs.changes.outputs.gradio_version }}"; json.dump(j, open("gradio/package.json", "w"))' + python3 -m build -w + - name: Upload Python package + uses: actions/upload-artifact@v4 + with: + name: gradio-build + path: dist/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl + - name: copy demos + uses: "gradio-app/github/actions/copy-demos@main" + with: + gradio_version: "https://gradio-pypi-previews.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl" + gradio_client_version: "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python" + - name: upload demos + uses: actions/upload-artifact@v4 + with: + name: all_demos + path: demo + - name: Create JS client tarball + id: create_js_tarball + continue-on-error: true + run: | + cd client/js + tarball_name=$(npm pack) + echo "tarball_name=client/js/$tarball_name" >> $GITHUB_OUTPUT + - name: Upload JS client tarball artifact + uses: actions/upload-artifact@v4 + with: + name: js-client-tarball + path: ${{ steps.create_js_tarball.outputs.tarball_name }} diff --git a/gradio/.github/workflows/previews-deploy.yml b/gradio/.github/workflows/previews-deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..66d8f0dca39b88b43b1e4f8ea6dfe335eeb330ac --- /dev/null +++ b/gradio/.github/workflows/previews-deploy.yml @@ -0,0 +1,176 @@ +name: "previews-deploy" + +on: + workflow_run: + workflows: ["previews-build"] + types: + - completed + +concurrency: + group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}" + cancel-in-progress: true + +jobs: + changes: + name: "changes" + runs-on: ubuntu-latest + if: github.event.workflow_run.conclusion == 'success' + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + gradio_version: ${{ steps.json.outputs.gradio_version }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + + comment-spaces-start: + needs: changes + uses: "./.github/workflows/comment-queue.yml" + if: ${{ needs.changes.outputs.should_run == 'true' }} + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: spaces~pending~null + deploy: + name: "previews-deploy" + environment: deploy_spaces + outputs: + space_url: ${{ steps.upload-demo.outputs.SPACE_URL }} + js_tarball_url: ${{ steps.upload_js_tarball.outputs.js_tarball_url }} + needs: changes + if: ${{ (github.event.workflow_run.conclusion == 'success' && needs.changes.outputs.should_run == 'true') || github.event.workflow_run.event == 'workflow_dispatch' }} + runs-on: ubuntu-latest + permissions: + actions: read + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: list artifacts + run: ls -R . + + - name: Set wheel name + id: set_wheel_name + run: | + wheel_file=$(find ./gradio-build -maxdepth 1 -type f -name "*.whl" -print -quit) + echo "wheel_name=$wheel_file" >> $GITHUB_OUTPUT + - name: Upload wheel + run: | + export AWS_ACCESS_KEY_ID=${{ secrets.PYPI_PREVIEWS_AWS_S3_ACCESS_KEY }} + export AWS_SECRET_ACCESS_KEY=${{ secrets.PYPI_PREVIEWS_AWS_S3_SECRET_ACCESS_KEY }} + export AWS_DEFAULT_REGION=us-east-1 + aws s3 cp ${{ steps.set_wheel_name.outputs.wheel_name}} s3://gradio-pypi-previews/${{ needs.changes.outputs.sha }}/ + + - name: Set tarball name + id: set_tarball_name + run: | + tar_gz_file=$(find ./js-client-tarball -maxdepth 1 -type f -name "*.tgz" -print -quit) + echo "tarball_path=$tar_gz_file" >> $GITHUB_OUTPUT + echo "tarball_name=$(basename $tar_gz_file)" >> $GITHUB_OUTPUT + - name: Upload JS Client Tarball to S3 + id: upload_js_tarball + continue-on-error: true + run: | + export AWS_ACCESS_KEY_ID=${{ secrets.NPM_PREVIEWS_AWS_S3_ACCESS_KEY }} + export AWS_SECRET_ACCESS_KEY=${{ secrets.NPM_PREVIEWS_AWS_S3_SECRET_ACCESS_KEY }} + export AWS_DEFAULT_REGION=us-east-1 + aws s3 cp ${{ steps.set_tarball_name.outputs.tarball_path }} s3://gradio-npm-previews/${{ needs.changes.outputs.sha }}/ + echo "js_tarball_url=https://gradio-npm-previews.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/${{ steps.set_tarball_name.outputs.tarball_name }}" >> $GITHUB_OUTPUT + - name: Upload Lite to S3 + id: upload_lite + run: | + export AWS_ACCESS_KEY_ID=${{ secrets.LITE_PREVIEWS_AWS_S3_ACCESS_KEY }} + export AWS_SECRET_ACCESS_KEY=${{ secrets.LITE_PREVIEWS_AWS_S3_SECRET_ACCESS_KEY }} + export AWS_DEFAULT_REGION=us-east-1 + mkdir -p ./gradio-lite-files + tar -xzf ./gradio-lite-tar/gradio-lite-*.tgz -C ./gradio-lite-files + aws s3 cp ./gradio-lite-files/package/ s3://gradio-lite-previews/${{ needs.changes.outputs.sha }}/ --recursive + - name: Install Hub Client Library + run: | + python3 -m venv venv + . venv/bin/activate + pip install huggingface-hub==0.23.2 + # temporary, but ensures the script cannot be modified in a PR + - name: Get deploy scripts + run: | + mkdir scripts + curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_demo_to_space.py -o scripts/upload_demo_to_space.py + curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_website_demos.py -o scripts/upload_website_demos.py + - name: make dirs + run: mkdir -p demo && mv all_demos/* demo/ + - name: Upload demo to spaces + if: github.event.workflow_run.event == 'pull_request' + id: upload-demo + run: | + . venv/bin/activate + python scripts/upload_demo_to_space.py all_demos \ + gradio-pr-deploys/pr-${{ needs.changes.outputs.pr_number }}-all-demos \ + ${{ secrets.SPACES_DEPLOY_TOKEN }} \ + --gradio-version ${{ needs.changes.outputs.gradio_version }} > url.txt + echo "SPACE_URL=$(tail -n 1 url.txt)" >> $GITHUB_OUTPUT + - name: Upload Website Demos + if: github.event.workflow_run.event == 'workflow_dispatch' + id: upload-website-demos + run: | + . venv/bin/activate + python scripts/upload_website_demos.py --AUTH_TOKEN ${{ secrets.WEBSITE_SPACES_DEPLOY_TOKEN }} \ + --WHEEL_URL https://gradio-pypi-previews.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/ \ + --CLIENT_URL "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python" \ + --GRADIO_VERSION ${{ needs.changes.outputs.gradio_version }} + + comment-spaces-success: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: needs.changes.outputs.should_run == 'true' && needs.deploy.result == 'success' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: spaces~success~${{ needs.deploy.outputs.space_url }} + additional_text: | + **Install Gradio from this PR** + ```bash + pip install https://gradio-pypi-previews.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl + ``` + + **Install Gradio Python Client from this PR** + ```bash + pip install "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python" + ``` + + **Install Gradio JS Client from this PR** + ```bash + npm install ${{ needs.deploy.outputs.js_tarball_url }} + ``` + + **Use Lite from this PR** + ```html + + ``` + comment-spaces-failure: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: always() && needs.deploy.result == 'failure' && needs.changes.outputs.should_run == 'true' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: spaces~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ diff --git a/gradio/.github/workflows/publish.yml b/gradio/.github/workflows/publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..ade1be204d2ed3f83145583f60a7e9bd928d9ce6 --- /dev/null +++ b/gradio/.github/workflows/publish.yml @@ -0,0 +1,81 @@ +# safe runs from main + +name: publish +on: + push: + branches: + - main + - 5.0-dev + +env: + CI: true + PNPM_CACHE_FOLDER: .pnpm-store + NODE_OPTIONS: "--max-old-space-size=4096" +jobs: + version_or_publish: + runs-on: ubuntu-22.04 + environment: publish + steps: + - name: checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + skip_build: "false" + - name: Build packages + run: | + . venv/bin/activate + pip install -U build hatch packaging>=23.2 # packaging>=23.2 is needed to build Lite due to https://github.com/pypa/hatch/issues/1381 + pnpm package + pnpm --filter @gradio/client --filter @gradio/lite --filter @gradio/preview build + + - name: create and publish versions + id: changesets + uses: changesets/action@aba318e9165b45b7948c60273e0b72fce0a64eb9 # @v1 + with: + version: pnpm ci:version + commit: "chore: update versions" + title: "chore: update versions" + publish: pnpm ci:publish + env: + NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} + - name: add label to skip chromatic build + if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }} + run: gh pr edit "$PR_NUMBER" --add-label "no-visual-update" + env: + PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }} + GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} + - name: add label to run flaky tests + if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }} + run: gh pr edit "$PR_NUMBER" --add-label "flaky-tests" + env: + PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }} + GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} + - name: add label to run backend tests on Windows + if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }} + run: gh pr edit "$PR_NUMBER" --add-label "windows-tests" + env: + PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }} + GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} + - name: publish to pypi + if: steps.changesets.outputs.hasChangesets != 'true' + uses: "gradio-app/github/actions/publish-pypi@main" + env: + AWS_ACCESS_KEY_ID: ${{ secrets.SDK_AWS_S3_BUCKET_ACCESS_KEY }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_AWS_S3_BUCKET_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-2 + with: + user: __token__ + passwords: | + gradio:${{ secrets.PYPI_API_TOKEN }} + gradio_client:${{ secrets.PYPI_GRADIO_CLIENT_TOKEN }} + - name: trigger spaces deploy workflow + env: + GITHUB_TOKEN: ${{ secrets.COMMENT_TOKEN }} + run: gh workflow run previews-build.yml diff --git a/gradio/.github/workflows/semgrep.yml b/gradio/.github/workflows/semgrep.yml new file mode 100644 index 0000000000000000000000000000000000000000..6115544a4ef4e178e32aa88660ff4045ce9d2dbb --- /dev/null +++ b/gradio/.github/workflows/semgrep.yml @@ -0,0 +1,68 @@ +name: semgrep ci + +on: + workflow_run: + workflows: ["trigger-semgrep"] + types: + - completed + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + +concurrency: + group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}" + cancel-in-progress: true + +permissions: {} + +jobs: + semgrep: + permissions: + contents: read + name: semgrep/ci + runs-on: ubuntu-latest + container: + image: semgrep/semgrep + options: --volume ${{ github.workspace }}/.github/configs:/mnt/ --name semgrepcontainer + outputs: + pr_number: ${{ steps.json.outputs.pr_number }} + sha: ${{ steps.json.outputs.sha }} + if: (github.actor != 'dependabot[bot]') + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + - uses: actions/checkout@v4 + with: + repository: ${{ steps.json.outputs.source_repo }} + ref: ${{ steps.json.outputs.sha }} + - name: restart docker + uses: docker://docker + with: + args: docker restart semgrepcontainer + - run: ls -la /mnt + - run: semgrep ci --config=/mnt/semgrep_rules.yaml + update-status: + permissions: + actions: read + statuses: write + runs-on: ubuntu-latest + needs: semgrep + steps: + - name: update status + uses: gradio-app/github/actions/commit-status@main + with: + sha: ${{ needs.semgrep.outputs.sha }} + token: ${{ secrets.GITHUB_TOKEN }} + name: "Semgrep Results" + pr: ${{ needs.semgrep.outputs.pr_number }} + result: ${{ needs.semgrep.result == 'success' && 'success' || 'failure' }} + type: all diff --git a/gradio/.github/workflows/storybook-build.yml b/gradio/.github/workflows/storybook-build.yml new file mode 100644 index 0000000000000000000000000000000000000000..00a2415d119de4458253a0771b9544bca7806752 --- /dev/null +++ b/gradio/.github/workflows/storybook-build.yml @@ -0,0 +1,69 @@ +name: "storybook-build" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "visual" + token: ${{ secrets.GITHUB_TOKEN }} + build: + permissions: + contents: read + name: :storybook-build + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.changes.outputs.source_branch }} + repository: ${{ needs.changes.outputs.source_repo }} + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + skip_build: "true" + - name: build client + run: pnpm --filter @gradio/client build + - name: generate theme.css + run: | + . venv/bin/activate + python scripts/generate_theme.py --outfile js/storybook/theme.css + - name: build storybook + run: pnpm build-storybook --quiet + - name: upload storybook + uses: actions/upload-artifact@v4 + with: + name: storybook-static + path: storybook-static diff --git a/gradio/.github/workflows/storybook-deploy.yml b/gradio/.github/workflows/storybook-deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..b71d36c16993384c011da1f56413275fa3b85492 --- /dev/null +++ b/gradio/.github/workflows/storybook-deploy.yml @@ -0,0 +1,126 @@ +name: "storybook-deploy" + +on: + workflow_run: + workflows: ["storybook-build"] + types: + - completed + +concurrency: + group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + name: "changes" + runs-on: ubuntu-latest + if: github.event.workflow_run.conclusion == 'success' + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + comment-chromatic-start: + uses: "./.github/workflows/comment-queue.yml" + needs: changes + if: needs.changes.outputs.should_run == 'true' || contains(needs.changes.outputs.labels, 'no-visual-update') + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: | + storybook~pending~null + update-status: + permissions: + actions: read + statuses: write + runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.should_run == 'false' || contains(needs.changes.outputs.labels, 'no-visual-update') + steps: + - name: update status + uses: gradio-app/github/actions/set-commit-status@main + with: + sha: ${{ needs.changes.outputs.sha }} + token: ${{ secrets.GITHUB_TOKEN }} + name: "UI Tests" + run_id: ${{ needs.changes.outputs.run_id }} + deploy: + permissions: + actions: read + contents: read + environment: storybook + name: "storybook-deploy" + needs: changes + if: needs.changes.outputs.should_run == 'true' && github.repository == 'gradio-app/gradio' && !contains(needs.changes.outputs.labels, 'no-visual-update') + runs-on: ubuntu-latest + outputs: + changes: ${{ steps.publish-chromatic.outputs.changeCount }} + errors: ${{ steps.publish-chromatic.outputs.errorCount }} + storybook_url: ${{ steps.publish-chromatic.outputs.storybookUrl }} + build_url: ${{ steps.publish-chromatic.outputs.buildUrl }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.changes.outputs.source_branch }} + repository: ${{ needs.changes.outputs.source_repo }} + fetch-depth: 0 + - name: dowload storybook artifacts + uses: actions/download-artifact@v4 + with: + name: storybook-static + path: storybook-static + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: list artifacts + run: ls -R . + - name: create dummy pkg.json + run: echo "{}" > package.json + - name: publish to chromatic + id: publish-chromatic + uses: chromaui/action@fdbe7756d4dbf493e2fbb822df73be7accd07e1c # @v11 + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + token: ${{ secrets.COMMIT_STATUS }} + onlyChanged: true + exitOnceUploaded: true + storybookBuildDir: storybook-static + + comment-chromatic-end: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: | + storybook~success~${{ needs.deploy.outputs.storybook_url }} + + comment-chromatic-fail: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: always() && needs.deploy.result == 'failure' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: | + storybook~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ diff --git a/gradio/.github/workflows/test-functional-lite.yml b/gradio/.github/workflows/test-functional-lite.yml new file mode 100644 index 0000000000000000000000000000000000000000..cea3df9dd881e3e0447418aa5f8dff7a17448c24 --- /dev/null +++ b/gradio/.github/workflows/test-functional-lite.yml @@ -0,0 +1,64 @@ +name: "functional-lite" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "functional" + token: ${{ secrets.GITHUB_TOKEN }} + test: + permissions: + contents: read + name: "functional-test-lite" + runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.should_run == 'true' + steps: + - uses: actions/checkout@v4 + - name: install dependencies + id: install_deps + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + build_lite: true + skip_build: true + python_version: "3.10" + test: true + - run: pnpm exec playwright install chromium firefox + - name: build essential packages + run: pnpm --filter @gradio/utils --filter @gradio/theme package + - name: Run Lite E2E tests + run: | + . venv/bin/activate + pnpm --filter @gradio/lite test:browser + - name: Get the performance result + run: | + export LITE_APP_LOAD_TIME=$(jq -r '.app_load_time' .lite-perf.json) + echo "LITE_APP_LOAD_TIME=$LITE_APP_LOAD_TIME" >> $GITHUB_ENV + cat .lite-perf.json # For debugging diff --git a/gradio/.github/workflows/test-functional.yml b/gradio/.github/workflows/test-functional.yml new file mode 100644 index 0000000000000000000000000000000000000000..6e593fd692c04f9c801797797263b41dfbc74af8 --- /dev/null +++ b/gradio/.github/workflows/test-functional.yml @@ -0,0 +1,89 @@ +name: "functional" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "functional" + token: ${{ secrets.GITHUB_TOKEN }} + test: + name: "functional-test-SSR=${{ matrix.SSR }}" + permissions: + contents: read + runs-on: ubuntu-latest + needs: changes + strategy: + matrix: + ssr: [true, false] + if: needs.changes.outputs.should_run == 'true' + steps: + - uses: actions/checkout@v4 + - name: install dependencies + id: install_deps + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + test: true + - name: install dependencies for specific tests + run: | + . venv/bin/activate + python -m pip install -r demo/outbreak_forecast/requirements.txt + python -m pip install -r demo/stream_video_out/requirements.txt + - run: pnpm exec playwright install chromium firefox + - name: build essential packages + run: pnpm --filter @gradio/utils --filter @gradio/theme package + - name: run browser tests + env: + GRADIO_SSR_MODE: ${{ matrix.ssr }} + run: | + . venv/bin/activate + CI=1 pnpm test:browser + - name: upload screenshots + uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-screenshots-SSR-${{ matrix.ssr }} + path: | + ./test-results + - name: run browser component tests + run: | + . venv/bin/activate + pnpm run test:ct + - name: run reload mode test + run: | + . venv/bin/activate + pnpm test:browser:reload + - name: upload reload mode screenshots + uses: actions/upload-artifact@v4 + if: always() + with: + name: reload-mode-playwright-screenshots-SSR-${{ matrix.ssr }} + path: | + ./test-results diff --git a/gradio/.github/workflows/test-hygiene.yml b/gradio/.github/workflows/test-hygiene.yml new file mode 100644 index 0000000000000000000000000000000000000000..6057e2c14591acec1be72435366b808e6f413845 --- /dev/null +++ b/gradio/.github/workflows/test-hygiene.yml @@ -0,0 +1,36 @@ +name: "hygiene" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + test: + permissions: + contents: read + name: "hygiene-test" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Generate Notebooks + run: | + python3 -m venv venv + . venv/bin/activate + pip install nbformat && python scripts/generate_notebooks.py + - name: Print Git Status + run: echo $(git status) && echo $(git diff) + - name: Assert Notebooks Match + run: git status --untracked-files=all demo/ | grep "nothing to commit, working tree clean" + - name: Check for large files + uses: actionsdesk/lfs-warning@4b98a8a5e6c429c23c34eee02d71553bca216425 # @v3.3 + with: + filesizelimit: 5MB diff --git a/gradio/.github/workflows/test-python.yml b/gradio/.github/workflows/test-python.yml new file mode 100644 index 0000000000000000000000000000000000000000..bb493865fc97de1e9a2d866c6f05f22cba819490 --- /dev/null +++ b/gradio/.github/workflows/test-python.yml @@ -0,0 +1,78 @@ +name: "python" + +on: + pull_request: + types: [opened, synchronize, reopened, edited, labeled, unlabeled] + push: + branches: + - main + - 5.0-dev + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +env: + NODE_OPTIONS: "--max-old-space-size=4096" + HF_TOKEN: ${{ vars.HF_TOKEN }} + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "gradio" + token: ${{ secrets.GITHUB_TOKEN }} + test: + permissions: + contents: read + name: "test-${{ matrix.os }}-${{ matrix.test-type == 'flaky' && 'flaky' || 'not-flaky'}}" + needs: changes + if: needs.changes.outputs.should_run == 'true' + strategy: + matrix: + os: ["ubuntu-latest", "windows-latest"] + test-type: ["not flaky", "flaky"] + exclude: + - os: ${{ github.event_name == 'pull_request' && contains( github.event.pull_request.labels.*.name, 'windows-tests') && 'dummy' || 'windows-latest' }} + - test-type: ${{ github.event_name == 'pull_request' && contains( github.event.pull_request.labels.*.name, 'flaky-tests') && 'dummy' || 'flaky' }} + runs-on: ${{ matrix.os }} + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - name: install dependencies + id: install_deps + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + os: ${{ matrix.os }} + test: true + - name: Lint + if: runner.os == 'Linux' + run: | + . venv/bin/activate + ./scripts/lint_backend.sh + - name: Typecheck + if: runner.os == 'Linux' + run: | + . venv/bin/activate + ./scripts/type_check_backend.sh + - name: Run tests + run: | + . ${{steps.install_deps.outputs.venv_activate}} + python -m pytest -m "${{ matrix.test-type }}" diff --git a/gradio/.github/workflows/tests-js.yml b/gradio/.github/workflows/tests-js.yml new file mode 100644 index 0000000000000000000000000000000000000000..276bdeb1bee8ae009db38da93f53d1fa6c32041e --- /dev/null +++ b/gradio/.github/workflows/tests-js.yml @@ -0,0 +1,67 @@ +name: "js" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "js" + token: ${{ secrets.GITHUB_TOKEN }} + test: + permissions: + contents: read + name: js-test + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' + steps: + - uses: actions/checkout@v4 + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-frontend-deps@main" + with: + skip_build: true + - name: build client + run: pnpm --filter @gradio/client build + - name: build the wasm module + run: pnpm --filter @gradio/wasm build + - name: format check + run: pnpm format:check + - name: lint + run: pnpm lint + - name: typecheck + run: pnpm ts:check + - name: unit tests + run: pnpm test:run + - name: client tests + run: pnpm --filter @gradio/client test diff --git a/gradio/.github/workflows/trigger-changeset.yml b/gradio/.github/workflows/trigger-changeset.yml new file mode 100644 index 0000000000000000000000000000000000000000..7b6c201bdae3148bf3f01a7c970a4d8c1a505452 --- /dev/null +++ b/gradio/.github/workflows/trigger-changeset.yml @@ -0,0 +1,18 @@ +name: trigger-changeset +on: + pull_request: + types: [opened, synchronize, reopened, edited, labeled, unlabeled] + branches: + - main + - 5.0-dev + issue_comment: + types: [edited] + +permissions: {} + +jobs: + changeset: + runs-on: ubuntu-22.04 + if: github.event.sender.login != 'gradio-pr-bot' + steps: + - run: echo "Requesting changeset" diff --git a/gradio/.github/workflows/trigger-semgrep.yml b/gradio/.github/workflows/trigger-semgrep.yml new file mode 100644 index 0000000000000000000000000000000000000000..41fdff97f91a47ac0b389175b9176c55282dd003 --- /dev/null +++ b/gradio/.github/workflows/trigger-semgrep.yml @@ -0,0 +1,29 @@ +name: trigger-semgrep +on: + pull_request: + branches: + - main + - 5.0-dev + +permissions: {} + +jobs: + changes: + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + pr_number: ${{ steps.changes.outputs.pr_number }} + source_branch: ${{ steps.changes.outputs.source_branch }} + source_repo: ${{ steps.changes.outputs.source_repo }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "gradio" + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/gradio/.github/workflows/update-checks.yml b/gradio/.github/workflows/update-checks.yml new file mode 100644 index 0000000000000000000000000000000000000000..87b081a28506a03873520796bab0fb4083a3bd98 --- /dev/null +++ b/gradio/.github/workflows/update-checks.yml @@ -0,0 +1,68 @@ +name: "update-checks" + +on: + workflow_run: + workflows: ["python", "js", "functional", "functional-lite"] + types: + - completed + +concurrency: + group: "${{ github.event.workflow_run.id}}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + name: "changes" + runs-on: ubuntu-latest + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + update-status: + permissions: + actions: read + statuses: write + contents: read + environment: commit_status + runs-on: ubuntu-latest + needs: changes + if: ${{ needs.changes.outputs.should_run == 'false'}} + steps: + - name: set js check name + if: github.event.workflow_run.name == 'js' + run: echo "CHECK_NAME=js / js-test (pull_request)" >> $GITHUB_ENV + - name: set python check name + if: github.event.workflow_run.name == 'python' + run: echo "CHECK_NAME=test-ubuntu-latest-not-flaky" >> $GITHUB_ENV + - name: set functional check name + if: github.event.workflow_run.name == 'functional' + run: echo "CHECK_NAME=functional / functional-test (pull_request)" >> $GITHUB_ENV + - name: set functional-lite check name + if: github.event.workflow_run.name == 'functional-lite' + run: echo "CHECK_NAME=functional-lite / functional-test-lite (pull_request)" >> $GITHUB_ENV + - name: update status + uses: gradio-app/github/actions/set-commit-status@main + with: + sha: ${{ needs.changes.outputs.sha }} + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ env.CHECK_NAME }} + run_id: ${{ needs.changes.outputs.run_id }} diff --git a/gradio/.github/workflows/website-build.yml b/gradio/.github/workflows/website-build.yml new file mode 100644 index 0000000000000000000000000000000000000000..d2d499b67a3b821797dddf2f2b9db58c4389a3fa --- /dev/null +++ b/gradio/.github/workflows/website-build.yml @@ -0,0 +1,73 @@ +name: "website-build" + +on: + workflow_run: + workflows: ["docs-deploy"] + types: + - completed + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + changes: + if: github.event.workflow_run.conclusion == 'success' + name: "changes" + runs-on: ubuntu-latest + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + - uses: actions/upload-artifact@v4 + with: + path: output.json + name: changes + build: + name: "website-build" + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' || (endsWith(needs.changes.outputs.source_branch, 'main') && github.repository == 'gradio-app/gradio') + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.changes.outputs.source_branch }} + repository: ${{ needs.changes.outputs.source_repo }} + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + skip_build: true + python_version: "3.10" + - name: build client + run: pnpm --filter @gradio/client build + + - name: build website + run: VERCEL=1 pnpm --filter website build + + - name: find + run: find . -type d + + - name: upload website artifacts + uses: actions/upload-artifact@v4 + with: + name: website + path: js/_website/build + include-hidden-files: true diff --git a/gradio/.github/workflows/website-deploy.yml b/gradio/.github/workflows/website-deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..e4a3694737f142bcd0094a17ca61a57b5a0aa320 --- /dev/null +++ b/gradio/.github/workflows/website-deploy.yml @@ -0,0 +1,103 @@ +name: "website-deploy" + +on: + workflow_run: + workflows: ["website-build"] + types: + - completed + +permissions: {} + +jobs: + changes: + if: github.event.workflow_run.conclusion == 'success' + name: "changes" + runs-on: ubuntu-latest + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + comment-deploy-start: + needs: changes + uses: "./.github/workflows/comment-queue.yml" + if: needs.changes.outputs.should_run == 'true' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: website~pending~null + deploy: + environment: deploy_website + name: "website-deploy" + runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.should_run == 'true' || (endsWith(needs.changes.outputs.source_branch, 'main') && github.repository == 'gradio-app/gradio') + permissions: + actions: read + outputs: + cloudflare_url: ${{ steps.cloudflare-preview.outputs.deployment-url }} + steps: + - name: download website artifacts + uses: actions/download-artifact@v4 + with: + name: website + path: js/_website/build + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: list files + run: ls -R . + + - name: Deploy Preview Website to Cloudflare Pages + if: needs.changes.outputs.pr_number != 'false' + id: cloudflare-preview + uses: cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy js/_website/build --project-name=gradio-website --branch=${{ needs.changes.outputs.source_branch }} + + # production + - name: Deploy Production Website to Cloudflare Pages + if: needs.changes.outputs.source_repo == 'gradio-app/gradio' && needs.changes.outputs.source_branch == 'refs/heads/main' + id: cloudflare-production + uses: cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy js/_website/build --project-name=gradio-website --branch=main + + comment-deploy-success: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: needs.deploy.result == 'success' && needs.changes.outputs.pr_number != 'false' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: website~success~${{needs.deploy.outputs.cloudflare_url}} + comment-deploy-failure: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: always() && needs.deploy.result == 'failure' && needs.changes.outputs.pr_number != 'false' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: website~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ diff --git a/gradio/.github/workflows/website-docs-build.yml b/gradio/.github/workflows/website-docs-build.yml new file mode 100644 index 0000000000000000000000000000000000000000..69a43d30e2f9b125b954c8830b24a4725e4b1230 --- /dev/null +++ b/gradio/.github/workflows/website-docs-build.yml @@ -0,0 +1,68 @@ +name: "docs-build" + +on: + pull_request: + push: + branches: + - main + - 5.0-dev + +env: + CI: true + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + +concurrency: + group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + if: github.event_name == 'pull_request' || github.event_name == 'push' + permissions: + contents: read + pull-requests: read + name: "changes" + runs-on: ubuntu-latest + outputs: + should_run: ${{ steps.changes.outputs.should_run }} + sha: ${{ steps.changes.outputs.sha }} + gradio_version: ${{ steps.changes.outputs.gradio_version }} + source_branch: ${{ steps.changes.outputs.source_branch }} + steps: + - uses: actions/checkout@v4 + - uses: "gradio-app/gradio/.github/actions/changes@main" + id: changes + with: + filter: "website" + token: ${{ secrets.GITHUB_TOKEN }} + + build: + permissions: + contents: read + name: "docs-build" + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.should_run == 'true' || (endsWith(needs.changes.outputs.source_branch, 'main') && github.repository == 'gradio-app/gradio') + steps: + - uses: actions/checkout@v4 + - name: install dependencies + uses: "gradio-app/gradio/.github/actions/install-all-deps@main" + with: + python_version: "3.10" + skip_build: true + test: true + + # generated when installing deps + - name: upload website json artifacts + uses: actions/upload-artifact@v4 + with: + name: website-json + path: js/_website/src/lib/json + - name: upload website json templates + uses: actions/upload-artifact@v4 + with: + name: website-templates + path: js/_website/src/lib/templates diff --git a/gradio/.github/workflows/website-docs-deploy.yml b/gradio/.github/workflows/website-docs-deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..b2b43548ab059e78b86410e2bf2d4a8abb13ba7a --- /dev/null +++ b/gradio/.github/workflows/website-docs-deploy.yml @@ -0,0 +1,93 @@ +name: "docs-deploy" + +on: + workflow_run: + workflows: ["docs-build"] + types: + - completed + +concurrency: + group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}" + cancel-in-progress: true + +permissions: {} + +jobs: + changes: + if: github.event.workflow_run.conclusion == 'success' + name: "changes" + runs-on: ubuntu-latest + permissions: + actions: read + outputs: + should_run: ${{ steps.json.outputs.should_run }} + sha: ${{ steps.json.outputs.sha }} + pr_number: ${{ steps.json.outputs.pr_number }} + source_branch: ${{ steps.json.outputs.source_branch }} + source_repo: ${{ steps.json.outputs.source_repo }} + labels: ${{ steps.json.outputs.labels }} + run_id: ${{ steps.json.outputs.run_id }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: changes + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + - uses: gradio-app/github/actions/json-to-output@main + id: json + with: + path: output.json + - uses: actions/upload-artifact@v4 + with: + path: output.json + name: changes + comment-deploy-start: + needs: changes + uses: "./.github/workflows/comment-queue.yml" + if: needs.changes.outputs.should_run == 'true' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: website~pending~null + deploy: + environment: deploy_website + name: "docs-deploy" + runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.should_run == 'true' || github.event.workflow_run.event == 'push' + permissions: + actions: read + steps: + - uses: actions/download-artifact@v4 + with: + name: website-json + path: js/_website/lib/json + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/download-artifact@v4 + with: + name: website-templates + path: js/_website/lib/templates + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: deploy json to aws + if: startsWith(needs.changes.outputs.source_branch, 'changeset-release/') && needs.changes.outputs.source_repo == 'gradio-app/gradio' + run: | + export AWS_ACCESS_KEY_ID=${{ secrets.DOCS_JSON_AWS_S3_ACCESS_KEY }} + export AWS_SECRET_ACCESS_KEY=${{ secrets.DOCS_JSON_AWS_S3_SECRET_ACCESS_KEY }} + export AWS_DEFAULT_REGION=us-west-2 + version=$(jq -r .version js/_website/lib/json/version.json) + aws s3 cp ./js/_website/lib/json/ s3://gradio-docs-json/$version/ --recursive + aws s3 cp ./js/_website/lib/templates/ s3://gradio-docs-json/$version/templates/ --recursive + comment-deploy-failure: + uses: "./.github/workflows/comment-queue.yml" + needs: [deploy, changes] + if: always() && needs.deploy.result == 'failure' && needs.changes.outputs.pr_number != 'false' + secrets: + gh_token: ${{ secrets.COMMENT_TOKEN }} + with: + pr_number: ${{ needs.changes.outputs.pr_number }} + message: website~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/ diff --git a/gradio/.gitignore b/gradio/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8886c5414862e6756f05c89a736e35f63c9dacf3 --- /dev/null +++ b/gradio/.gitignore @@ -0,0 +1,99 @@ +# Python build +.eggs/ +gradio.egg-info +dist/ +dist-lite/ +*.pyc +__pycache__/ +*.py[cod] +*$py.class +build/ +!js/build/ +!js/build/dist/ +__tmp/* +*.pyi +!gradio/stubs/**/*.pyi +py.typed +.ipynb_checkpoints/ +.python-version +=23.2 + +# JS build +gradio/templates/* +gradio/node/* +gradio/_frontend_code/* +js/gradio-preview/test/* + +# Secrets +.env + +# Gradio run artifacts +*.db +*.sqlite3 +gradio/launches.json +gradio/hash_seed.txt +.gradio/ + +tmp.zip + +# Tests +.coverage +coverage.xml +test.txt +**/snapshots/**/*.png +playwright-report/ +.hypothesis +.lite-perf.json + +# Demos +demo/tmp.zip +demo/files/*.avi +demo/files/*.mp4 +demo/all_demos/demos/* +demo/all_demos/requirements.txt +demo/*/config.json +demo/annotatedimage_component/*.png +demo/fake_diffusion_with_gif/*.gif +demo/cancel_events/cancel_events_output_log.txt +demo/unload_event_test/output_log.txt +demo/stream_video_out/output_*.ts +demo/stream_video_out/output_*.mp4 +demo/stream_audio_out/*.mp3 + +# Etc +.idea/* +.DS_Store +*.bak +workspace.code-workspace +*.h5 + +# dev containers +.pnpm-store/ + +# log files +.pnpm-debug.log + +# Local virtualenv for devs +.venv* + +# FRP +gradio/frpc_* +.vercel + +# js +node_modules +public/build/ +test-results +client/js/dist/* +client/js/test.js +.config/test.py +.svelte-kit + + +# storybook +storybook-static +build-storybook.log +js/storybook/theme.css + +# playwright +.config/playwright/.cache \ No newline at end of file diff --git a/gradio/.vscode/extensions.json b/gradio/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..f94e184c9c9c254edd18b91f54903b6c97e544d4 --- /dev/null +++ b/gradio/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "phoenisx.cssvar", + "esbenp.prettier-vscode", + "svelte.svelte-vscode", + "charliermarsh.ruff" + ] +} diff --git a/gradio/.vscode/settings.json b/gradio/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..f0632753d2121d3564bc472e631a12f251a6eb27 --- /dev/null +++ b/gradio/.vscode/settings.json @@ -0,0 +1,26 @@ +{ + "python.formatting.provider": "none", + "cssvar.files": ["./js/node_modules/pollen-css/pollen.css"], + "cssvar.ignore": [], + "cssvar.disableSort": true, + "cssvar.extensions": ["js", "css", "html", "jsx", "tsx", "svelte"], + "python.analysis.extraPaths": ["./gradio/themes/utils"], + "svelte.plugin.svelte.format.enable": true, + "svelte.plugin.svelte.diagnostics.enable": false, + "svelte.enable-ts-plugin": true, + "prettier.configPath": ".config/.prettierrc.json", + "prettier.ignorePath": ".config/.prettierignore", + "python.analysis.typeCheckingMode": "basic", + "python.testing.pytestArgs": ["."], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "eslint.validate": ["javascript", "typescript", "html", "markdown", "svelte"], + "eslint.experimental.useFlatConfig": true, + "eslint.options": { + "overrideConfigFile": "./.config/eslint.config.js" + }, + "typescript.tsdk": "node_modules/typescript/lib", + "i18n-ally.localesPaths": [ + "js/spa/src/lang" + ] +} diff --git a/gradio/CHANGELOG.md b/gradio/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..a2581b23fcc4e03637ad461de88c8d5c5696298c --- /dev/null +++ b/gradio/CHANGELOG.md @@ -0,0 +1,6296 @@ +# gradio + +## 5.6.0 + +### Features + +- [#9906](https://github.com/gradio-app/gradio/pull/9906) [`eafe22c`](https://github.com/gradio-app/gradio/commit/eafe22cd9404d536b03d3fa80003acea78599d49) - Clearer error message in CheckboxGroup's preprocess function. Thanks @muhammadyaseen! +- [#9930](https://github.com/gradio-app/gradio/pull/9930) [`eae345e`](https://github.com/gradio-app/gradio/commit/eae345e5fde39aea220b57c6a954cd7d72ff32d5) - Allow settings custom headers in js client. Thanks @elgiano! +- [#9921](https://github.com/gradio-app/gradio/pull/9921) [`a70ba5e`](https://github.com/gradio-app/gradio/commit/a70ba5e0f01f0c376da0d4e45634bc967f5299f4) - Clearer error message in Dropdown's and Radio's preprocess function. Thanks @muhammadyaseen! +- [#9933](https://github.com/gradio-app/gradio/pull/9933) [`66375ac`](https://github.com/gradio-app/gradio/commit/66375acb5c0a3a8eecc4cfa00701b14f21f3ed68) - Fix typo in Exception raised by base.py. Thanks @meg-huggingface! +- [#9950](https://github.com/gradio-app/gradio/pull/9950) [`fc06fe4`](https://github.com/gradio-app/gradio/commit/fc06fe41f015678a0545f4e5c99f6ae2704f0031) - Add ability to read and write from LocalStorage. Thanks @abidlabs! +- [#9966](https://github.com/gradio-app/gradio/pull/9966) [`da6f191`](https://github.com/gradio-app/gradio/commit/da6f1915547b03601d1808b28e57cca62308df71) - Remember token locally with `gr.load()`. Thanks @abidlabs! + +### Fixes + +- [#9949](https://github.com/gradio-app/gradio/pull/9949) [`cfb62bf`](https://github.com/gradio-app/gradio/commit/cfb62bfdb52d88295f27287f788fca977e37ae6d) - Allow dataframe column content to wrap. Thanks @hannahblair! +- [#9897](https://github.com/gradio-app/gradio/pull/9897) [`c0cf80b`](https://github.com/gradio-app/gradio/commit/c0cf80bddd99ad0f836e618cc3d2b13e73cb5611) - Allow datetime value to be null. Thanks @hannahblair! +- [#9958](https://github.com/gradio-app/gradio/pull/9958) [`75ad3e3`](https://github.com/gradio-app/gradio/commit/75ad3e341978a521df3d11d4f97d6e55f784c9a1) - SSR Safari Fix. Thanks @dawoodkhan82! +- [#9905](https://github.com/gradio-app/gradio/pull/9905) [`08f4b8b`](https://github.com/gradio-app/gradio/commit/08f4b8b000702456e04fac70961a4fbe0058f11c) - Add `allow_file_downloads` param to allow downloading image/video/audio media in chatbot. Thanks @hannahblair! +- [#9913](https://github.com/gradio-app/gradio/pull/9913) [`d81f430`](https://github.com/gradio-app/gradio/commit/d81f430fd50546001b76c0ae5fded32c6d3093f7) - fix: Fix filename stripping to preserve extensions. Thanks @TakaSoap! +- [#9946](https://github.com/gradio-app/gradio/pull/9946) [`a966e9f`](https://github.com/gradio-app/gradio/commit/a966e9f753af25eb9d813dfdbce39be6f3014d82) - Hide upload button after upload when `file_count="single"`. Thanks @abidlabs! +- [#9901](https://github.com/gradio-app/gradio/pull/9901) [`74b4ff0`](https://github.com/gradio-app/gradio/commit/74b4ff0e61a2a32e1cd5e3354d3002b369c7ad83) - Ensure radio radius is consistent with checkbox radius. Thanks @hannahblair! +- [#9904](https://github.com/gradio-app/gradio/pull/9904) [`f523c91`](https://github.com/gradio-app/gradio/commit/f523c915d3732859ff4a8019a82cb597b5208ae2) - Ensure dropped files are validated in MultimediaTextbox. Thanks @hannahblair! + +## 5.5.0 + +### Features + +- [#9875](https://github.com/gradio-app/gradio/pull/9875) [`8305ff8`](https://github.com/gradio-app/gradio/commit/8305ff8712183f27174cfb891548ad7cc1c67fed) - Adds `.expand()` and `.collapse()` events to `gr.Accordion`. Thanks @abidlabs! +- [#9424](https://github.com/gradio-app/gradio/pull/9424) [`a1582a6`](https://github.com/gradio-app/gradio/commit/a1582a6dca494618c734208cade87acfdac91004) - Lite worker refactoring. Thanks @whitphx! +- [#9891](https://github.com/gradio-app/gradio/pull/9891) [`fc12496`](https://github.com/gradio-app/gradio/commit/fc124964a1b4922e54a4ca4755f0a536dfae1a21) - Allow uploading more files in gr.File. Thanks @hannahblair! +- [#9898](https://github.com/gradio-app/gradio/pull/9898) [`dcfa7ad`](https://github.com/gradio-app/gradio/commit/dcfa7ad3e819002c0213a592ad726ccfd9e2bf0c) - Enforce `meta` key present during preprocess in FileData payloads. Thanks @freddyaboulton! +- [#9887](https://github.com/gradio-app/gradio/pull/9887) [`d407c00`](https://github.com/gradio-app/gradio/commit/d407c007153705a7f5446f4601c12f208ec32a5b) - Add `.download()` event to `gr.File`. Thanks @abidlabs! +- [#9726](https://github.com/gradio-app/gradio/pull/9726) [`b6725cf`](https://github.com/gradio-app/gradio/commit/b6725cf6c1fe9667dc10e1988976ed36d84d73d3) - Lite auto-load imported modules with `pyodide.loadPackagesFromImports`. Thanks @whitphx! +- [#9786](https://github.com/gradio-app/gradio/pull/9786) [`f109497`](https://github.com/gradio-app/gradio/commit/f109497e8281b3429b58e3f6a293dd63ebcc08af) - Fix frontend errors on ApiDocs and RecordingSnippet. Thanks @whitphx! +- [#9800](https://github.com/gradio-app/gradio/pull/9800) [`d1cfe1e`](https://github.com/gradio-app/gradio/commit/d1cfe1e9defa06f927aec2671656fe77514dd0fa) - Allow plot tooltip to show extra columns. Thanks @aliabid94! + +### Fixes + +- [#9835](https://github.com/gradio-app/gradio/pull/9835) [`4d90883`](https://github.com/gradio-app/gradio/commit/4d9088354df528c8edf981f3e756d8927d3e8805) - Allows selection of directories in File Explorer. Thanks @aliabid94! +- [#9883](https://github.com/gradio-app/gradio/pull/9883) [`e10bbd2`](https://github.com/gradio-app/gradio/commit/e10bbd236f5817698f5e5ac1c14c7ec179a725b6) - Fix live interfaces for audio/image streaming. Thanks @freddyaboulton! +- [#9804](https://github.com/gradio-app/gradio/pull/9804) [`458a38c`](https://github.com/gradio-app/gradio/commit/458a38cabb8e378bb008b1abec8eee8b780fe712) - Fixes for ChatInterface Examples when additional inputs are provided. Thanks @dawoodkhan82! +- [#9827](https://github.com/gradio-app/gradio/pull/9827) [`7ed8d02`](https://github.com/gradio-app/gradio/commit/7ed8d02979e8ad4db6ef62b29ce080f31bcf9a0d) - Fix Loading SSR'd apps via gr.load. Thanks @freddyaboulton! +- [#9882](https://github.com/gradio-app/gradio/pull/9882) [`6c8a064`](https://github.com/gradio-app/gradio/commit/6c8a064feeaa89a2ffc96260032f24f18eb032fa) - Ensure non-form elements are correctly positioned when scale is applied. Thanks @hannahblair! +- [#9880](https://github.com/gradio-app/gradio/pull/9880) [`120198f`](https://github.com/gradio-app/gradio/commit/120198fe2da2ded9e8f27549b9dfd1cd81992ec4) - Fixes LoginButton for SSR. Thanks @dawoodkhan82! +- [#9881](https://github.com/gradio-app/gradio/pull/9881) [`6866a54`](https://github.com/gradio-app/gradio/commit/6866a5433afe7e29ad73bac10ecbc3b44f5867f4) - Ensure gallery share button is positioned correctly. Thanks @hannahblair! +- [#9826](https://github.com/gradio-app/gradio/pull/9826) [`69acfeb`](https://github.com/gradio-app/gradio/commit/69acfebffd0d3479a40352de19c8763863557428) - Make sure the Tool accordion is closed if it is not the last message. Thanks @freddyaboulton! +- [#9892](https://github.com/gradio-app/gradio/pull/9892) [`7d77024`](https://github.com/gradio-app/gradio/commit/7d77024cb8f9cfd39a6468de9534e58dcfa69f49) - Fix dataframe height increasing on scroll. Thanks @abidlabs! +- [#9859](https://github.com/gradio-app/gradio/pull/9859) [`c1cb5be`](https://github.com/gradio-app/gradio/commit/c1cb5be2d79fce5d25032366b5864700ba9d1114) - Fix: Resolve copy button visibility issue in Textbox component. Thanks @rahulsamant37! +- [#9886](https://github.com/gradio-app/gradio/pull/9886) [`fa5d433`](https://github.com/gradio-app/gradio/commit/fa5d4339d6aafda529150d9536b895e2b239c831) - Do not load code in gr.NO_RELOAD in the reload mode watch thread. Thanks @freddyaboulton! + +## 5.4.0 + +### Features + +- [#9834](https://github.com/gradio-app/gradio/pull/9834) [`febbed6`](https://github.com/gradio-app/gradio/commit/febbed6db1c1f33cab52bf0d0bbe31fc4ba65305) - Pin multipart version to fix issues with yanking. Thanks @aliabd! +- [#9792](https://github.com/gradio-app/gradio/pull/9792) [`d2b56a4`](https://github.com/gradio-app/gradio/commit/d2b56a4c0457c1d5f30a9bbef2572049e47de312) - more fix. Thanks @pngwn! +- [#9795](https://github.com/gradio-app/gradio/pull/9795) [`ff5be45`](https://github.com/gradio-app/gradio/commit/ff5be457dc2ed901f3de1493bdbcb80ec341207a) - Use `safehttpx.get()` instead of `async_get_with_secure_transport()`. Thanks @abidlabs! +- [#9807](https://github.com/gradio-app/gradio/pull/9807) [`5e89b6d`](https://github.com/gradio-app/gradio/commit/5e89b6d23a872e62e795f5bac969837b0d05de50) - Allow accepting user-provided-tokens in `gr.load`. Thanks @abidlabs! +- [#9819](https://github.com/gradio-app/gradio/pull/9819) [`160b27c`](https://github.com/gradio-app/gradio/commit/160b27c0d1f92f487cb91b311edfa3aa9e8af561) - Update requirements.txt to allow pillow 11.x. Thanks @bob-jones-cs! +- [#9649](https://github.com/gradio-app/gradio/pull/9649) [`b1b81c9`](https://github.com/gradio-app/gradio/commit/b1b81c9e1c10c2c14a5cb0661d2503259ece1a1b) - Hide option to add row/col when count is fixed in dataframe. Thanks @hannahblair! +- [#9805](https://github.com/gradio-app/gradio/pull/9805) [`78e3b51`](https://github.com/gradio-app/gradio/commit/78e3b517af97dd11a3a0465bd34360b9bd8945c1) - Allow setting plotly margins. Thanks @aliabid94! + +### Fixes + +- [#9831](https://github.com/gradio-app/gradio/pull/9831) [`767643f`](https://github.com/gradio-app/gradio/commit/767643fdeccb1ae1481e1d79034317082144b371) - Fix a bug in example textbox rendering when it is initially invisible. Thanks @cornzz! +- [#9836](https://github.com/gradio-app/gradio/pull/9836) [`a4e70f3`](https://github.com/gradio-app/gradio/commit/a4e70f3c428d7a43e31b63d296e9c4c73b09eda8) - Fix Tabs in Rows. Thanks @aliabid94! +- [#9769](https://github.com/gradio-app/gradio/pull/9769) [`3b9ed29`](https://github.com/gradio-app/gradio/commit/3b9ed299e9ffd7df834299cfcd547be0e844e1bb) - Fix avatar image placement in Chatbot. Thanks @hannahblair! +- [#9757](https://github.com/gradio-app/gradio/pull/9757) [`f971ca6`](https://github.com/gradio-app/gradio/commit/f971ca6ab53100693152bb3f975fa753a6e29e3b) - added audioop-lts module to support pydub for python3.13+. Thanks @samy-FERGUI! +- [#9651](https://github.com/gradio-app/gradio/pull/9651) [`1163a37`](https://github.com/gradio-app/gradio/commit/1163a372a61cf84d110160c1711892b9b689d1d3) - Fixes component info font size. Thanks @dawoodkhan82! +- [#9814](https://github.com/gradio-app/gradio/pull/9814) [`6505d42`](https://github.com/gradio-app/gradio/commit/6505d4289a3e3d27d9133b1c8af41697fdc1476d) - support gradio apps on spaces served on subpaths. Thanks @pngwn! +- [#9806](https://github.com/gradio-app/gradio/pull/9806) [`b538bda`](https://github.com/gradio-app/gradio/commit/b538bdaa067a01a1ac404356062086c9dc7001b5) - update docstring for the the "variant" parameter in `gr.Button`. Thanks @fadingNA! +- [#9815](https://github.com/gradio-app/gradio/pull/9815) [`90d9d14`](https://github.com/gradio-app/gradio/commit/90d9d1451860d99fc7b74d5105543f5e71c4b6b9) - use different env var for node port range. Thanks @pngwn! +- [#9825](https://github.com/gradio-app/gradio/pull/9825) [`f15808e`](https://github.com/gradio-app/gradio/commit/f15808eff361cdbba5237d1deb8b60128bc844e4) - fix: use system timezone in gr.DateTime with include_time=False. Thanks @lcian! +- [#9783](https://github.com/gradio-app/gradio/pull/9783) [`caf3650`](https://github.com/gradio-app/gradio/commit/caf3650482970cf649ec17d1a2d7d43651b37a04) - Exclude python-multipart 0.0.13. Thanks @whitphx! + +## 5.3.0 + +### Features + +- [#9746](https://github.com/gradio-app/gradio/pull/9746) [`5015abb`](https://github.com/gradio-app/gradio/commit/5015abbd78434754931c2b09d9f603f212c4566d) - fix `@gradio/sanitize` exports. Thanks @pngwn! +- [#9756](https://github.com/gradio-app/gradio/pull/9756) [`92f337c`](https://github.com/gradio-app/gradio/commit/92f337cc85d545060ea343f1cee85c22b85f6444) - Fix website build issue. Thanks @aliabd! +- [#9781](https://github.com/gradio-app/gradio/pull/9781) [`7579e92`](https://github.com/gradio-app/gradio/commit/7579e92971e67be3ae81dd00a3acfbb58dd9ba27) - Allow smoother plot changes. Thanks @aliabid94! + +### Fixes + +- [#9770](https://github.com/gradio-app/gradio/pull/9770) [`47b5565`](https://github.com/gradio-app/gradio/commit/47b556523db3b63d6a9c2f9f69e8632bfa4ddff6) - Fix broken image select. Thanks @aliabid94! +- [#9754](https://github.com/gradio-app/gradio/pull/9754) [`36a5076`](https://github.com/gradio-app/gradio/commit/36a50769095081a0e77f04f513d47a2e9d4531ba) - Update client.py: raise error on 429 get_config. Thanks @Pendrokar! +- [#9780](https://github.com/gradio-app/gradio/pull/9780) [`a72e1a9`](https://github.com/gradio-app/gradio/commit/a72e1a97686601bf72c7df5e7e066a532bbb7f38) - Streaming Markdown in chatbot Component Fix. Thanks @dawoodkhan82! +- [#9767](https://github.com/gradio-app/gradio/pull/9767) [`16895e8`](https://github.com/gradio-app/gradio/commit/16895e862871839db762f6318622a5a64b9d5199) - Fixes #9742. Thanks @crypdick! +- [#9654](https://github.com/gradio-app/gradio/pull/9654) [`cd7dab7`](https://github.com/gradio-app/gradio/commit/cd7dab7ba5c81983f133dfa9e90ac6f92ac4fa1f) - Improve select event behaviour in gr.Dataframe. Thanks @hannahblair! +- [#9700](https://github.com/gradio-app/gradio/pull/9700) [`2932e06`](https://github.com/gradio-app/gradio/commit/2932e067d5716a0f3939bfa3f310db8cdcf565c1) - Fix API info bug. Thanks @freddyaboulton! +- [#9653](https://github.com/gradio-app/gradio/pull/9653) [`61cd768`](https://github.com/gradio-app/gradio/commit/61cd768490a12f5d63101d5434092bcd1cfc43a8) - Ensures tabs with visible set to false are not visible. Thanks @hannahblair! +- [#9758](https://github.com/gradio-app/gradio/pull/9758) [`38701a9`](https://github.com/gradio-app/gradio/commit/38701a99710f9484dade8a93c5bf3a43ea30a0d3) - Fix icons not showing in Safari. Thanks @hannahblair! +- [#9738](https://github.com/gradio-app/gradio/pull/9738) [`2ade59b`](https://github.com/gradio-app/gradio/commit/2ade59b95d4c3610a1a461cc95f020fbf9627305) - Export `Tabs` type from `@gradio/tabs` and fix the Playground to be compatible with the new Tabs API. Thanks @whitphx! +- [#9762](https://github.com/gradio-app/gradio/pull/9762) [`bcb7d15`](https://github.com/gradio-app/gradio/commit/bcb7d15a8aef1cf1b873ba3d039fbec91432c5b2) - Add a `.clear` event to the `gr.Chatbot` component. Thanks @abidlabs! +- [#9765](https://github.com/gradio-app/gradio/pull/9765) [`df34f58`](https://github.com/gradio-app/gradio/commit/df34f58c3db12abb3965af8ea83a1bbd25c22be7) - Fixes bug where SVG icons could not be used in Buttons/Chatbots. Thanks @freddyaboulton! + +## 5.2.1 + +### Fixes + +- [#9730](https://github.com/gradio-app/gradio/pull/9730) [`39a0e8c`](https://github.com/gradio-app/gradio/commit/39a0e8c2fb038eb0afc213fa6290c9b2acee7941) - Fix chatbot component streaming bug and visible bug. Thanks @freddyaboulton! + +## 5.2.0 + +### Features + +- [#9712](https://github.com/gradio-app/gradio/pull/9712) [`bad46f3`](https://github.com/gradio-app/gradio/commit/bad46f3e8c1b6e94ccb8c936fe6a0e1c1e6f87f8) - Set min FastAPI version. Thanks @freddyaboulton! +- [#9699](https://github.com/gradio-app/gradio/pull/9699) [`ea2367c`](https://github.com/gradio-app/gradio/commit/ea2367ccb1b75827a086d1c19e2a4595d7a5aa0f) - allow setting initial value of `gr.Dropdown` to `None` to designate that no value should be initially selected. Thanks @abidlabs! +- [#9681](https://github.com/gradio-app/gradio/pull/9681) [`2ed2361`](https://github.com/gradio-app/gradio/commit/2ed236187a9aab18e17fc4a8079eddef7dd195a5) - Allow setting title in gr.Info/Warning/Error. Thanks @ABucket! + +### Fixes + +- [#9716](https://github.com/gradio-app/gradio/pull/9716) [`3c7f2ad`](https://github.com/gradio-app/gradio/commit/3c7f2ad15f80724bbc5c88c24621e6a078d2bb97) - Restore light/dark custom setting. Thanks @aliabid94! +- [#9719](https://github.com/gradio-app/gradio/pull/9719) [`7ec57cb`](https://github.com/gradio-app/gradio/commit/7ec57cb018a97270cd00c6e1aa5558e378855c53) - Fix Lite dependencies. Thanks @whitphx! +- [#9711](https://github.com/gradio-app/gradio/pull/9711) [`7134fc2`](https://github.com/gradio-app/gradio/commit/7134fc272e9e60be4b80dfd294ff8926d5995188) - Custom component fixes. Thanks @freddyaboulton! +- [#9659](https://github.com/gradio-app/gradio/pull/9659) [`b1a0f6d`](https://github.com/gradio-app/gradio/commit/b1a0f6db0d6900cb4089f4d5809a5f1d5e2609ee) - Fix the behavior of `gr.LoginButton` locally and on Spaces. Thanks @abidlabs! +- [#9693](https://github.com/gradio-app/gradio/pull/9693) [`c45b466`](https://github.com/gradio-app/gradio/commit/c45b46652d49e0a8a5d8217bbbc6ddbe4b4e91f0) - Fix progress bar compatibility with generators. Thanks @brody715! +- [#9728](https://github.com/gradio-app/gradio/pull/9728) [`d0b2ce8`](https://github.com/gradio-app/gradio/commit/d0b2ce8c0f150f0b636ad7d2226f7c8c61401996) - Ensure tabs render in SSR mode and reduce time it takes for them to render. Thanks @pngwn! +- [#9709](https://github.com/gradio-app/gradio/pull/9709) [`31418ef`](https://github.com/gradio-app/gradio/commit/31418ef388a2dc524069ee230c2735a4beaf55f1) - fix table type check. Thanks @hannahblair! +- [#9731](https://github.com/gradio-app/gradio/pull/9731) [`ea283e7`](https://github.com/gradio-app/gradio/commit/ea283e739849dcbb1c49c04d4c756d3cb2d72dbb) - fix css syntax error. Thanks @pngwn! +- [#9652](https://github.com/gradio-app/gradio/pull/9652) [`35bebf3`](https://github.com/gradio-app/gradio/commit/35bebf38eb0f61fe8e4f032ee093e92355baeecb) - Hide default slider background. Thanks @hannahblair! +- [#9678](https://github.com/gradio-app/gradio/pull/9678) [`a25a26e`](https://github.com/gradio-app/gradio/commit/a25a26e208c3f3675ba857a889553c7ccc95e866) - Fix: `file_types` checking bug. Thanks @jasongzy! + +## 5.1.0 + +### Features + +- [#9662](https://github.com/gradio-app/gradio/pull/9662) [`b1c5a68`](https://github.com/gradio-app/gradio/commit/b1c5a68f9003b77b5c70b641100f7db339295180) - Tweak message shown in Colab notebooks. Thanks @abidlabs! +- [#9656](https://github.com/gradio-app/gradio/pull/9656) [`8f6626c`](https://github.com/gradio-app/gradio/commit/8f6626cd0e5a0c24e1966fbc3e28185c18a04b61) - Fix streaming Audio/Video Output. Thanks @freddyaboulton! +- [#9660](https://github.com/gradio-app/gradio/pull/9660) [`3407b50`](https://github.com/gradio-app/gradio/commit/3407b505c706cd8e2bbe03603a5ff825f2d0a08a) - Chat Interface Functional test Fix + Chat Examples Center. Thanks @dawoodkhan82! +- [#9677](https://github.com/gradio-app/gradio/pull/9677) [`3a19e69`](https://github.com/gradio-app/gradio/commit/3a19e690ef8de12c4494429d52988b863065eed3) - Revert text disable. Thanks @whitphx! + +### Fixes + +- [#9676](https://github.com/gradio-app/gradio/pull/9676) [`fd0264f`](https://github.com/gradio-app/gradio/commit/fd0264f3358ef848690eceacb75481212dceecf0) - Fix Audio in Chatbot bug. Thanks @freddyaboulton! + +## 5.0.2 + +### Fixes + +- [#9528](https://github.com/gradio-app/gradio/pull/9528) [`9004b11`](https://github.com/gradio-app/gradio/commit/9004b110640bdb54995343a870bf080ee15da02d) - Fix Lite to work on FireFox. Thanks @whitphx! + +## 5.0.1 + +### Features + +- [#9632](https://github.com/gradio-app/gradio/pull/9632) [`9b58ab0`](https://github.com/gradio-app/gradio/commit/9b58ab00b78bedd892c221559b4b54a9211b4969) - bump to node 20. Thanks @pngwn! +- [#9626](https://github.com/gradio-app/gradio/pull/9626) [`ec95b02`](https://github.com/gradio-app/gradio/commit/ec95b0212b3ce2bf1a14af92fcd40d15052dd672) - Fix stopping chat interface when stop button is clicked. Thanks @aliabid94! +- [#9617](https://github.com/gradio-app/gradio/pull/9617) [`c163182`](https://github.com/gradio-app/gradio/commit/c163182d1b752ef91629f9caa13bf3cce0fb0869) - Fix dark mode detection and container height. Thanks @pngwn! +- [#9623](https://github.com/gradio-app/gradio/pull/9623) [`5923c67`](https://github.com/gradio-app/gradio/commit/5923c679136cca68731393d5e4f3bd338e651f44) - Fix Chatbot Examples Error. Thanks @freddyaboulton! +- [#9614](https://github.com/gradio-app/gradio/pull/9614) [`5d98550`](https://github.com/gradio-app/gradio/commit/5d985509b4b71aa4aa6b28acc38fe83c278dbbfa) - Fix `retry` and `undo` reactivity in gr.Chatbot. Thanks @hannahblair! +- [#9619](https://github.com/gradio-app/gradio/pull/9619) [`1f3ee97`](https://github.com/gradio-app/gradio/commit/1f3ee97d10415bf7dfa693746517cf97897049b7) - Fix Functional Tests. Thanks @dawoodkhan82! + +### Fixes + +- [#9630](https://github.com/gradio-app/gradio/pull/9630) [`2eaa066`](https://github.com/gradio-app/gradio/commit/2eaa0667e1d1a0edd1089bf8c3ffa3f563b9bca2) - Fix duplicate attribute error. Thanks @pngwn! + +## 5.0.0-beta.10 + +### Fixes + +- [#9600](https://github.com/gradio-app/gradio/pull/9600) [`9f71086`](https://github.com/gradio-app/gradio/commit/9f71086036339bfdd14f3aab29729041a01fc2d4) - Ensure undo/try shows for final bot message in gr.Chatbot. Thanks @hannahblair! + +## 5.0.0-beta.9 + +### Features + +- [#9437](https://github.com/gradio-app/gradio/pull/9437) [`c3d93be`](https://github.com/gradio-app/gradio/commit/c3d93bef94b9401747a363f7bad88a1d347d535b) - Adding new themes to Gradio 5.0. Thanks @allisonwhilden! +- [#9593](https://github.com/gradio-app/gradio/pull/9593) [`cc61fe7`](https://github.com/gradio-app/gradio/commit/cc61fe7047ac61779a61cce52c666400b9517daa) - Some more chatbot fixes. Thanks @dawoodkhan82! +- [#9583](https://github.com/gradio-app/gradio/pull/9583) [`b92a762`](https://github.com/gradio-app/gradio/commit/b92a7623e1ebd801587041e1ccca058a61058da9) - Disable the submit button and enter-key submit when the text is empty. Thanks @whitphx! +- [#9590](https://github.com/gradio-app/gradio/pull/9590) [`e853c41`](https://github.com/gradio-app/gradio/commit/e853c413583d91186aef3aceb0849d0ec0494834) - SSR e2e + fixes. Thanks @pngwn! +- [#9591](https://github.com/gradio-app/gradio/pull/9591) [`139152f`](https://github.com/gradio-app/gradio/commit/139152fe18bfdc5644a59d7bdfec9891b644f0bf) - Equal height in row false by default. Thanks @aliabid94! +- [#9589](https://github.com/gradio-app/gradio/pull/9589) [`477f45c`](https://github.com/gradio-app/gradio/commit/477f45cb43be957684eb392e3d62c09490c22391) - Only move files to the cache that have a meta key. Thanks @freddyaboulton! +- [#9584](https://github.com/gradio-app/gradio/pull/9584) [`6f8fa54`](https://github.com/gradio-app/gradio/commit/6f8fa5405528ad684084e4c7facfe36624fe7784) - Chat Interface Multimodal Fix & Fallback to `gr.Examples()`. Thanks @dawoodkhan82! +- [#9482](https://github.com/gradio-app/gradio/pull/9482) [`bd6c5f2`](https://github.com/gradio-app/gradio/commit/bd6c5f237b0631d86273c7684c3bf2b1011992a3) - Fix custom component CLI on main/5.0. Thanks @freddyaboulton! +- [#9601](https://github.com/gradio-app/gradio/pull/9601) [`c078892`](https://github.com/gradio-app/gradio/commit/c07889223cb64661b17560b707b977248809470a) - Tweak gr.Dataframe menu UX. Thanks @hannahblair! +- [#9575](https://github.com/gradio-app/gradio/pull/9575) [`4ec2feb`](https://github.com/gradio-app/gradio/commit/4ec2feb04e452d2c77482c09543c59948567be67) - Update gr.Dataframe UI with action popover. Thanks @hannahblair! +- [#9582](https://github.com/gradio-app/gradio/pull/9582) [`43a7f42`](https://github.com/gradio-app/gradio/commit/43a7f420d8ac34c7f7fa71d6e630a4c8618d3780) - Chatbot autoscroll. Thanks @whitphx! +- [#9598](https://github.com/gradio-app/gradio/pull/9598) [`ffc33fa`](https://github.com/gradio-app/gradio/commit/ffc33facaec1bcc92add5892afb86b7b5ba037d4) - Fix markdown code copy/check button in gr.Chatbot. Thanks @hannahblair! +- [#9576](https://github.com/gradio-app/gradio/pull/9576) [`430a26a`](https://github.com/gradio-app/gradio/commit/430a26a4fbcbabb5e9ddb6173bf658a00960e88e) - Fix reload mode. Thanks @freddyaboulton! +- [#9580](https://github.com/gradio-app/gradio/pull/9580) [`a9ac396`](https://github.com/gradio-app/gradio/commit/a9ac396f19218eafc441b7614289b4828cde853d) - Deep equal check with hash. Thanks @aliabid94! +- [#9499](https://github.com/gradio-app/gradio/pull/9499) [`17e6c84`](https://github.com/gradio-app/gradio/commit/17e6c84d6b11651cd03c1d47caec85de62030ea0) - Fix `gr.Chatbot` panels layout. Thanks @hannahblair! +- [#9592](https://github.com/gradio-app/gradio/pull/9592) [`24fe222`](https://github.com/gradio-app/gradio/commit/24fe222fd17583d04dd31aebf60b649224e8382f) - Fix favicon in ssr mode. Thanks @freddyaboulton! + +## 5.0.0-beta.8 + +### Features + +- [#9550](https://github.com/gradio-app/gradio/pull/9550) [`b0fedd7`](https://github.com/gradio-app/gradio/commit/b0fedd7ef718c0df797ec277db7e773543a70a4d) - Fix most flaky Python tests in `5.0-dev` branch. Thanks @abidlabs! +- [#9577](https://github.com/gradio-app/gradio/pull/9577) [`9f532e0`](https://github.com/gradio-app/gradio/commit/9f532e03a6b91b9a5592152c19b9b2611774cae7) - Equal height columns. Thanks @aliabid94! +- [#9570](https://github.com/gradio-app/gradio/pull/9570) [`e0ee3d5`](https://github.com/gradio-app/gradio/commit/e0ee3d5bb1020744cefa1abf66009fbf07da8cbe) - Update gr.ColorPicker UI. Thanks @hannahblair! +- [#9483](https://github.com/gradio-app/gradio/pull/9483) [`8dc7c12`](https://github.com/gradio-app/gradio/commit/8dc7c12389311b60efcde1b9d3e3668a34d2dc00) - Send Streaming data over Websocket if possible. Also support base64 output format for images. Thanks @freddyaboulton! +- [#9521](https://github.com/gradio-app/gradio/pull/9521) [`06ef22e`](https://github.com/gradio-app/gradio/commit/06ef22e83cdd27e7afb381396d153d9db3dea16e) - Allow `info=` to render markdown. Thanks @dawoodkhan82! +- [#9571](https://github.com/gradio-app/gradio/pull/9571) [`148345d`](https://github.com/gradio-app/gradio/commit/148345d107763754710505281ad70368ebc6f3ec) - Fix chatinterface embedding height issues. Thanks @aliabid94! +- [#9525](https://github.com/gradio-app/gradio/pull/9525) [`7c367b6`](https://github.com/gradio-app/gradio/commit/7c367b6cf0472d478671b7c7476e892b4c61c812) - Fix cut off in gr.ImageEditor. Thanks @hannahblair! +- [#9522](https://github.com/gradio-app/gradio/pull/9522) [`3b71ed2`](https://github.com/gradio-app/gradio/commit/3b71ed21b7e2ecb67eb68fb946d25565169cb4df) - Api info fix. Thanks @freddyaboulton! +- [#9508](https://github.com/gradio-app/gradio/pull/9508) [`b260389`](https://github.com/gradio-app/gradio/commit/b26038932a64f024bd149a56b1539e9e75802f29) - Change caching to occur not at the creation of a `gr.Examples()` but when the Blocks is actually launched. Thanks @aliabid94! +- [#9524](https://github.com/gradio-app/gradio/pull/9524) [`cf39640`](https://github.com/gradio-app/gradio/commit/cf396404ec8052c7fbf5f045955028bc54a274a5) - Add `css_paths` and `head_paths` parameters. Thanks @abidlabs! + +## 5.0.0-beta.7 + +### Features + +- [#9546](https://github.com/gradio-app/gradio/pull/9546) [`b82aa6f`](https://github.com/gradio-app/gradio/commit/b82aa6f115f6ad9a9690bdecb0fe63c162dc75c0) - Disable sagemaker_check() for now. Thanks @vmatt! +- [#9545](https://github.com/gradio-app/gradio/pull/9545) [`098a009`](https://github.com/gradio-app/gradio/commit/098a009c05243967bd9e5acc28864eb40a135f6a) - Add Jinja2 language to Code component. Thanks @CISC! +- [#9526](https://github.com/gradio-app/gradio/pull/9526) [`f60bb68`](https://github.com/gradio-app/gradio/commit/f60bb68f52cd0863d9087b3fbc56635e297adef1) - Fix single select dropdown. Thanks @whitphx! +- [#9497](https://github.com/gradio-app/gradio/pull/9497) [`d826faa`](https://github.com/gradio-app/gradio/commit/d826faa8c2584cf0772d4e66b4073e33b83f3a00) - Hide x axis labels. Thanks @aliabid94! + +## 5.0.0-beta.6 + +### Features + +- [#9460](https://github.com/gradio-app/gradio/pull/9460) [`7352a89`](https://github.com/gradio-app/gradio/commit/7352a89722da91461c32fd33588531f3edce9c48) - Playground requirements tab. Thanks @whitphx! +- [#9496](https://github.com/gradio-app/gradio/pull/9496) [`1647ebd`](https://github.com/gradio-app/gradio/commit/1647ebddc3e2ed6fc143a62629409e32afcc5801) - UI theme fixes. Thanks @aliabid94! +- [#9450](https://github.com/gradio-app/gradio/pull/9450) [`991883e`](https://github.com/gradio-app/gradio/commit/991883e217dc0a3512b3ae3245378812f373b8db) - Improve `gr.Code`. Thanks @hannahblair! +- [#9504](https://github.com/gradio-app/gradio/pull/9504) [`d054262`](https://github.com/gradio-app/gradio/commit/d054262f611d5f1eb1a1c936db7152347a891f8e) - Centre components within `Block` when height and width are set. Thanks @hannahblair! +- [#9481](https://github.com/gradio-app/gradio/pull/9481) [`2510a6e`](https://github.com/gradio-app/gradio/commit/2510a6e978a49432d7820e9518f164a70cf8acc8) - Fix `slider-color` var. Thanks @hannahblair! +- [#9495](https://github.com/gradio-app/gradio/pull/9495) [`488ef76`](https://github.com/gradio-app/gradio/commit/488ef768ccc5008401f7e0aa4c357b93311190ff) - Fix custom component CLI unit tests. Thanks @freddyaboulton! +- [#9488](https://github.com/gradio-app/gradio/pull/9488) [`4e6a47f`](https://github.com/gradio-app/gradio/commit/4e6a47f5a29cb885d5bc01a79ca4cc45d298f0b1) - Fixes: Chatbot examples for custom chatbot + rename `suggestions` -> `examples`. Thanks @dawoodkhan82! +- [#9506](https://github.com/gradio-app/gradio/pull/9506) [`861f5e9`](https://github.com/gradio-app/gradio/commit/861f5e97ffde5f59e42cfa213364f19e84d799fd) - Fix node process to run with correct server name. Thanks @abidlabs! +- [#9493](https://github.com/gradio-app/gradio/pull/9493) [`c307a0c`](https://github.com/gradio-app/gradio/commit/c307a0c9b81b66bde21f0af4a9f7d5726ea7a30d) - Minor fixes to docs and a demo. Thanks @abidlabs! +- [#9519](https://github.com/gradio-app/gradio/pull/9519) [`0ab6ac5`](https://github.com/gradio-app/gradio/commit/0ab6ac5dc01b69e4f2462d00c4910f3354441227) - Fix change triggers for dropdown and radio. Thanks @dawoodkhan82! + +### Fixes + +- [#9431](https://github.com/gradio-app/gradio/pull/9431) [`7065e11`](https://github.com/gradio-app/gradio/commit/7065e11e465fcdfe14688bd6ca2aeed0a25fcc36) - Check for `file_types` parameter in the backend. Thanks @dawoodkhan82! + +## 5.0.0-beta.5 + +### Features + +- [#9470](https://github.com/gradio-app/gradio/pull/9470) [`b406139`](https://github.com/gradio-app/gradio/commit/b40613928c0e0d224ff2b4db5d0b45727c178560) - Add support for 3rd party providers to `gr.load`, and provide a better UX for conversational models. Thanks @abidlabs! +- [#9383](https://github.com/gradio-app/gradio/pull/9383) [`30d13ac`](https://github.com/gradio-app/gradio/commit/30d13ac8a932d53abfd236d3e4e845570480e701) - Pre/post-processing download requests. Thanks @aliabid94! +- [#9464](https://github.com/gradio-app/gradio/pull/9464) [`3ac5d9c`](https://github.com/gradio-app/gradio/commit/3ac5d9c972576d82bc365a6532e6e12f55441a30) - Fix plots. Thanks @pngwn! + +## 5.0.0-beta.4 + +### Features + +- [#9419](https://github.com/gradio-app/gradio/pull/9419) [`018c140`](https://github.com/gradio-app/gradio/commit/018c140ef86cacc8211df05b57b26924dab7fa08) - Start/stop recoding from the backend. Add guide on conversational chatbots. Thanks @freddyaboulton! +- [#9453](https://github.com/gradio-app/gradio/pull/9453) [`56dbf77`](https://github.com/gradio-app/gradio/commit/56dbf77671012015efd3c745bc33e5074ab7158f) - Chatbot bug fixes. Thanks @dawoodkhan82! +- [#9448](https://github.com/gradio-app/gradio/pull/9448) [`e7a415b`](https://github.com/gradio-app/gradio/commit/e7a415b1ef923d31754b302b3cd8b5e71a9ea446) - Use or `pathlib.Path` objects to indicate filepaths for `css`, `js`, and `head` parameters. Thanks @abidlabs! +- [#9469](https://github.com/gradio-app/gradio/pull/9469) [`f7c3396`](https://github.com/gradio-app/gradio/commit/f7c3396f55a5b8364d3880a29d766bd092d7f840) - Fix. Triggered dataframe change event for header change. Thanks @Joodith! +- [#9447](https://github.com/gradio-app/gradio/pull/9447) [`afbd8e7`](https://github.com/gradio-app/gradio/commit/afbd8e7a2faadeea5a431f67a753dea14dd5829f) - Reduce analytics that are collected. Thanks @abidlabs! +- [#9438](https://github.com/gradio-app/gradio/pull/9438) [`8f469e1`](https://github.com/gradio-app/gradio/commit/8f469e1d1d9d1636e4dedfb1c09e76a5e2ba8d4e) - Small changes to caching. Thanks @abidlabs! +- [#9446](https://github.com/gradio-app/gradio/pull/9446) [`0c8fafb`](https://github.com/gradio-app/gradio/commit/0c8fafb31df7ef3ef5812d6efb47ca342a3bad3c) - Fix SSR mode flag with `mount_gradio_app` and revert changes to pytests. Thanks @abidlabs! +- [#9456](https://github.com/gradio-app/gradio/pull/9456) [`4d75f02`](https://github.com/gradio-app/gradio/commit/4d75f029aacf0561f50c7afebbe8d54da2cb0af4) - Update object detection guide. Thanks @freddyaboulton! +- [#9406](https://github.com/gradio-app/gradio/pull/9406) [`74f3b9d`](https://github.com/gradio-app/gradio/commit/74f3b9ded1ce0ff6f2f0dbcb113edd64b7bb8f60) - Allow skipping an arbitrary number of output components, and also raise a warning if the number of output components does not match the number of values returned from a function. Thanks @abidlabs! +- [#9413](https://github.com/gradio-app/gradio/pull/9413) [`a16787a`](https://github.com/gradio-app/gradio/commit/a16787abdc8d507d75b986dbe882d21be4540908) - Lite: HTTPX client improvement. Thanks @whitphx! + +## 5.0.0-beta.3 + +### Features + +- [#9376](https://github.com/gradio-app/gradio/pull/9376) [`d92c26f`](https://github.com/gradio-app/gradio/commit/d92c26fe63f6b88e16c356cb84c55b61f795db73) - Small fixes to `gr.Dataframe` and chatbot docs. Thanks @abidlabs! +- [#9412](https://github.com/gradio-app/gradio/pull/9412) [`c2c2fd9`](https://github.com/gradio-app/gradio/commit/c2c2fd989348f826566773c07c0e0bda200199ff) - fix SSR apps on spaces. Thanks @pngwn! + +### Fixes + +- [#9405](https://github.com/gradio-app/gradio/pull/9405) [`bf27ff4`](https://github.com/gradio-app/gradio/commit/bf27ff4ac8ada33ea03dd26d5c1c1115aa1f318a) - Center icon in button when no text is present. Thanks @abidlabs! + +## 5.0.0-beta.2 + +### Features + +- [#9359](https://github.com/gradio-app/gradio/pull/9359) [`50c3a7f`](https://github.com/gradio-app/gradio/commit/50c3a7f1541f632853a96f3d979ebeef6ad82869) - Small tweak to how thoughts are shown in `gr.Chatbot`. Thanks @abidlabs! +- [#9323](https://github.com/gradio-app/gradio/pull/9323) [`06babda`](https://github.com/gradio-app/gradio/commit/06babda0395fd3fbd323c1c3cb33704ecfd6deb0) - Disable liking user message in chatbot by default but make it configurable. Thanks @freddyaboulton! +- [#8966](https://github.com/gradio-app/gradio/pull/8966) [`8e52b6a`](https://github.com/gradio-app/gradio/commit/8e52b6a3e75957462bc7fdbf6ff9c280084d5f08) - Chatbot Examples. Thanks @dawoodkhan82! +- [#9261](https://github.com/gradio-app/gradio/pull/9261) [`73647a0`](https://github.com/gradio-app/gradio/commit/73647a07b0439efabe3dd218ff6c366ffa3b84a0) - Move icons into `IconButtonWrapper`. Thanks @hannahblair! +- [#9316](https://github.com/gradio-app/gradio/pull/9316) [`4338f29`](https://github.com/gradio-app/gradio/commit/4338f29bce2430d765f20070d1823ecc19d940cb) - 9227 chatinterface retry bug. Thanks @freddyaboulton! +- [#9313](https://github.com/gradio-app/gradio/pull/9313) [`1fef9d9`](https://github.com/gradio-app/gradio/commit/1fef9d9a26f0ebce4de18c486702661f6539b1c6) - Standardize `height` across components and add `max_height` and `min_height` parameters where appropriate. Thanks @abidlabs! +- [#9339](https://github.com/gradio-app/gradio/pull/9339) [`4c8c6f2`](https://github.com/gradio-app/gradio/commit/4c8c6f2fe603081941c5fdc43f48a0632b9f31ad) - Ssr part 2. Thanks @pngwn! +- [#9250](https://github.com/gradio-app/gradio/pull/9250) [`350b0a5`](https://github.com/gradio-app/gradio/commit/350b0a5cafb9176f914f62e7c90de51d4352cc77) - Improve Icon Button consistency. Thanks @hannahblair! +- [#9269](https://github.com/gradio-app/gradio/pull/9269) [`e05f568`](https://github.com/gradio-app/gradio/commit/e05f568f47e9fa33ef91dbbe5cc477d32762bc36) - Fix reload mode and streaming in 5.0 dev. Thanks @freddyaboulton! +- [#9356](https://github.com/gradio-app/gradio/pull/9356) [`1daf259`](https://github.com/gradio-app/gradio/commit/1daf259b52d0b1ce16d916ff25a15d322b51ecf5) - Use `container` param in `gr.Markdown`. Thanks @hannahblair! +- [#9321](https://github.com/gradio-app/gradio/pull/9321) [`81a356d`](https://github.com/gradio-app/gradio/commit/81a356d802f95b6a9a7aeb3759e05e47febbd0d3) - Remove two dependencies: `importlib_resources` and `urllib3` (if not in Wasm). Thanks @abidlabs! +- [#9253](https://github.com/gradio-app/gradio/pull/9253) [`99648ec`](https://github.com/gradio-app/gradio/commit/99648ec7c4443e74799941e47b0015ac9ca581e1) - Adds ability to block event trigger when file is uploading. Thanks @dawoodkhan82! +- [#9341](https://github.com/gradio-app/gradio/pull/9341) [`02369b3`](https://github.com/gradio-app/gradio/commit/02369b3159df72b2f4a36ce5684574eb65065731) - Improve is_in_or_equal and fuzzer. Thanks @freddyaboulton! +- [#9333](https://github.com/gradio-app/gradio/pull/9333) [`5b86e2f`](https://github.com/gradio-app/gradio/commit/5b86e2f2a2bedcde79e425fd470473bc1fd6ae2e) - Enhance Lite E2E tests and fix a networking problem on Lite. Thanks @whitphx! +- [#9338](https://github.com/gradio-app/gradio/pull/9338) [`19f6b31`](https://github.com/gradio-app/gradio/commit/19f6b31a73c6114093cbb5a7e69131175efa8a79) - Fix typo in `tunneling.py`. Thanks @abidlabs! +- [#9336](https://github.com/gradio-app/gradio/pull/9336) [`736046f`](https://github.com/gradio-app/gradio/commit/736046f17db073b56023b5e077b0ae5ae4adeb02) - Object Detection From Webcam Stream Guide. Thanks @freddyaboulton! +- [#9300](https://github.com/gradio-app/gradio/pull/9300) [`6309a48`](https://github.com/gradio-app/gradio/commit/6309a48e3a89a13137ec9d61c1c722eb59b8e3dc) - Raise ChecksumMismatchError. Thanks @abidlabs! +- [#9373](https://github.com/gradio-app/gradio/pull/9373) [`6443062`](https://github.com/gradio-app/gradio/commit/64430620449ab5b19ea32b02ab82a2d1804dcb2e) - Fix Cached Examples for Streamed Media. Thanks @freddyaboulton! +- [#9367](https://github.com/gradio-app/gradio/pull/9367) [`1c94328`](https://github.com/gradio-app/gradio/commit/1c94328cfe6ce0676c3850f5e9da5bcabf9ee570) - add local fonts and update themes. Thanks @hannahblair! +- [#9335](https://github.com/gradio-app/gradio/pull/9335) [`b543465`](https://github.com/gradio-app/gradio/commit/b543465d06d7d1b399c4d0755da05e022611a97f) - Remove lite/theme.css from the Git-managed file tree. Thanks @whitphx! +- [#9358](https://github.com/gradio-app/gradio/pull/9358) [`16c0485`](https://github.com/gradio-app/gradio/commit/16c0485a32be324a5f1c7252f5ce09fff79f7d67) - Small tweaks to improve the DX for the "tuples"/"messages" argument in `gr.Chatbot`. Thanks @abidlabs! +- [#9303](https://github.com/gradio-app/gradio/pull/9303) [`34f46b0`](https://github.com/gradio-app/gradio/commit/34f46b0512fe30b4db9c9901cb23987d3cecc48d) - Dont move files to cache automatically in chatbot postprocess. Thanks @freddyaboulton! +- [#9363](https://github.com/gradio-app/gradio/pull/9363) [`3ad28c7`](https://github.com/gradio-app/gradio/commit/3ad28c7e310e8589e0c53b7efee8031e129bece8) - Prevent HTML and Markdown height changing when status is hidden. Thanks @hannahblair! +- [#9260](https://github.com/gradio-app/gradio/pull/9260) [`d47dd1f`](https://github.com/gradio-app/gradio/commit/d47dd1f8417a878ef731d2eeabf60f3069289dee) - Fix overflowing markdown in Chatbot. Thanks @hannahblair! +- [#9320](https://github.com/gradio-app/gradio/pull/9320) [`98cbcae`](https://github.com/gradio-app/gradio/commit/98cbcaef827de7267462ccba180c7b2ffb1e825d) - chore: fix docs style. Thanks @imba-tjd! +- [#9314](https://github.com/gradio-app/gradio/pull/9314) [`299879d`](https://github.com/gradio-app/gradio/commit/299879d02adf3bacb012c76a467aaf5df5b31493) - Make `gr.Image` preprocessing more efficient. Thanks @abidlabs! +- [#9371](https://github.com/gradio-app/gradio/pull/9371) [`7bf3e99`](https://github.com/gradio-app/gradio/commit/7bf3e9989392b7edcdc18c1d840fb8130b15040e) - Fix `gr.ImageEditor` toolbar cutoff. Thanks @hannahblair! +- [#9306](https://github.com/gradio-app/gradio/pull/9306) [`f3f0fef`](https://github.com/gradio-app/gradio/commit/f3f0fef199c7779aac9aaef794dd4af1861ce50f) - Fixes race condition in `update_root_in_config`. Thanks @abidlabs! +- [#9312](https://github.com/gradio-app/gradio/pull/9312) [`7c0780b`](https://github.com/gradio-app/gradio/commit/7c0780b5677f8a1c05b9d2eee136e982917829b8) - Proposal: remove `gr.make_waveform` and remove `matplotlib` as a dependency. Thanks @abidlabs! +- [#9339](https://github.com/gradio-app/gradio/pull/9339) [`4c8c6f2`](https://github.com/gradio-app/gradio/commit/4c8c6f2fe603081941c5fdc43f48a0632b9f31ad) - Tweaks to SSR mode. Thanks @pngwn! +- [#9270](https://github.com/gradio-app/gradio/pull/9270) [`b0b8500`](https://github.com/gradio-app/gradio/commit/b0b850081d8d10c1287b5d179b8db37482e21c8d) - Fix stop recording button colors. Thanks @freddyaboulton! +- [#9268](https://github.com/gradio-app/gradio/pull/9268) [`c469d40`](https://github.com/gradio-app/gradio/commit/c469d40b0d9d807abb9fa92c67069c08833ce6bc) - Raise error instead of warning if checksums for binary do not match. Thanks @abidlabs! +- [#9377](https://github.com/gradio-app/gradio/pull/9377) [`618e9fe`](https://github.com/gradio-app/gradio/commit/618e9fe941744cef4a4a06eb7840763c64b15e32) - Update babylon.js to `v7` for `gr.Model3D`. Thanks @abidlabs! +- [#9282](https://github.com/gradio-app/gradio/pull/9282) [`54ea485`](https://github.com/gradio-app/gradio/commit/54ea485ba92165be96137ae35e2d3f2fc62a2873) - Further tweak to is_in_or_equal. Thanks @freddyaboulton! +- [#9326](https://github.com/gradio-app/gradio/pull/9326) [`7afb9a1`](https://github.com/gradio-app/gradio/commit/7afb9a14fa64310eb8b70f43a3bad373e46e36c1) - 5.0 merge take 2. Thanks @pngwn! +- [#9280](https://github.com/gradio-app/gradio/pull/9280) [`7122420`](https://github.com/gradio-app/gradio/commit/712242047fde3a594dfde7f48a44c7ea16239dc8) - Match style of textbox stop button to submit button. Thanks @freddyaboulton! +- [#9348](https://github.com/gradio-app/gradio/pull/9348) [`61f794b`](https://github.com/gradio-app/gradio/commit/61f794bba78ef59e55beca0ba743548f33f3a3c3) - Do not attach `content_disposition_type = "attachment"` headers for files explicitly allowed by developer. Thanks @abidlabs! +- [#9361](https://github.com/gradio-app/gradio/pull/9361) [`5eb860f`](https://github.com/gradio-app/gradio/commit/5eb860f739a187217ded1fc569676e0edd16bab0) - Refactor lazy caching. Thanks @abidlabs! +- [#9311](https://github.com/gradio-app/gradio/pull/9311) [`c4afdcd`](https://github.com/gradio-app/gradio/commit/c4afdcdb1f1f80c5f95ab45d527236e9364ace82) - Added max lines and overflow scrollbar for `gr.Code`. Thanks @micpst! + +### Fixes + +- [#9299](https://github.com/gradio-app/gradio/pull/9299) [`aa35b07`](https://github.com/gradio-app/gradio/commit/aa35b0788e613fdd45446d267513e6f94fa208ea) - Trigger state change event on iterators. Thanks @freddyaboulton! +- [#9393](https://github.com/gradio-app/gradio/pull/9393) [`53ed0f0`](https://github.com/gradio-app/gradio/commit/53ed0f030551ad876a1fea28a9db9015ba6ec33e) - Fix File Types for MultimodalTextbox. Thanks @dawoodkhan82! +- [#9328](https://github.com/gradio-app/gradio/pull/9328) [`6a7f631`](https://github.com/gradio-app/gradio/commit/6a7f63180b4105622298dd742d6a0d25216ea629) - Set the color of placeholder in a disabled textbox to gray instead of black, and disable typing while a response is generating in `gr.ChatInterface`, allow `gr.MultimodalTextbox` to accept string values. Thanks @abidlabs! + +## 5.0.0-beta.1 + +### Features + +- [#9235](https://github.com/gradio-app/gradio/pull/9235) [`f8b411f`](https://github.com/gradio-app/gradio/commit/f8b411fe282ff0316ed4abebc0a043b044bf4dd9) - Built-in submit and stop buttons in `gr.ChatInterface(multimodal=False)`, adding `submit_btn` and `stop_btn` props to `gr.Textbox()` and `gr.MultimodalText()`. Thanks @whitphx! +- [#9201](https://github.com/gradio-app/gradio/pull/9201) [`5492e74`](https://github.com/gradio-app/gradio/commit/5492e742b1f1fa618208cce523f50ad22a6e86f1) - Move buttons from chat_interface into Chatbot. Thanks @freddyaboulton! +- [#9199](https://github.com/gradio-app/gradio/pull/9199) [`3175c7a`](https://github.com/gradio-app/gradio/commit/3175c7aebc6ad2466d31d6949580f5a3cb4cd698) - Redesign `gr.Tabs()`. Thanks @hannahblair! +- [#9167](https://github.com/gradio-app/gradio/pull/9167) [`e9e737e`](https://github.com/gradio-app/gradio/commit/e9e737eeeb61d0bbf43277c75b6ffed8b34aa445) - Redesign `gr.Button()`. Thanks @hannahblair! +- [#9218](https://github.com/gradio-app/gradio/pull/9218) [`4a832f4`](https://github.com/gradio-app/gradio/commit/4a832f4b0a8f35a10bc2301a56b711519e85034b) - Adds TLS to FRP tunnel. Thanks @abidlabs! +- [#9166](https://github.com/gradio-app/gradio/pull/9166) [`8a75559`](https://github.com/gradio-app/gradio/commit/8a755596317c59bfb10803edc0f8642e62d7cecd) - Minor changes to flagging for 5.0. Thanks @abidlabs! +- [#9254](https://github.com/gradio-app/gradio/pull/9254) [`03f3735`](https://github.com/gradio-app/gradio/commit/03f3735fba1fd4f1978b5431af9e67de3b6e7945) - Adds a "huggingface" button variant, and makes it the default for `gr.LoginButton` and `gr.DuplicateButton`. Thanks @abidlabs! +- [#9187](https://github.com/gradio-app/gradio/pull/9187) [`5bf00b7`](https://github.com/gradio-app/gradio/commit/5bf00b7524ebf399b48719120a49d15bb21bd65c) - make all component SSR compatible. Thanks @pngwn! +- [#9236](https://github.com/gradio-app/gradio/pull/9236) [`dd8e2e3`](https://github.com/gradio-app/gradio/commit/dd8e2e32c6c1ec42e13c55af870d0da291117dd3) - Improve button consistency across light/dark mode. Thanks @hannahblair! +- [#9225](https://github.com/gradio-app/gradio/pull/9225) [`5f2e047`](https://github.com/gradio-app/gradio/commit/5f2e047c2ce114cebc95d5dba16c4df10fa73eb1) - Add a 'None' option to the gradio.Image component to disable image_m…. Thanks @GeeMoose! +- [#9204](https://github.com/gradio-app/gradio/pull/9204) [`3c73f00`](https://github.com/gradio-app/gradio/commit/3c73f00e3016b16917ebfe0bad390f2dff683457) - 🔡 Update default core Gradio font. Thanks @hannahblair! +- [#9245](https://github.com/gradio-app/gradio/pull/9245) [`c8cfe93`](https://github.com/gradio-app/gradio/commit/c8cfe93c0971d904c29da60410952fd20c9439c0) - Lighten secondary button grey fill. Thanks @hannahblair! +- [#9246](https://github.com/gradio-app/gradio/pull/9246) [`38cf712`](https://github.com/gradio-app/gradio/commit/38cf71234bf57fe9da6eea2d32b1d6e7ef35c700) - Stop using `multiprocessing` in `flagging.CSVLogger` on Lite v5. Thanks @whitphx! +- [#9216](https://github.com/gradio-app/gradio/pull/9216) [`e137b30`](https://github.com/gradio-app/gradio/commit/e137b30b1a53ca32d3cd809d31e97d5d54a4e479) - Decrease component radii and remove input shadows. Thanks @hannahblair! +- [#9200](https://github.com/gradio-app/gradio/pull/9200) [`2e179d3`](https://github.com/gradio-app/gradio/commit/2e179d35be6ed60a5a6bfc7303178d63e41781ad) - prefix api routes. Thanks @pngwn! + +## 5.0.0-beta.0 + +### Features + +- [#9069](https://github.com/gradio-app/gradio/pull/9069) [`f9f84bf`](https://github.com/gradio-app/gradio/commit/f9f84bfe7064634164501d1023591b415ad2a03b) - No token passed by default in `gr.load()`. Thanks @abidlabs! +- [#9160](https://github.com/gradio-app/gradio/pull/9160) [`8f5a895`](https://github.com/gradio-app/gradio/commit/8f5a8950c949996f7c439b11a7aa40edda3e8562) - Fix native plot lite demos. Thanks @aliabd! +- [#9197](https://github.com/gradio-app/gradio/pull/9197) [`6773c4d`](https://github.com/gradio-app/gradio/commit/6773c4da22f957a11b2a07f032ce13c7b4c94f8c) - Redesign `gr.Slider()`. Thanks @hannahblair! +- [#9140](https://github.com/gradio-app/gradio/pull/9140) [`c054ec8`](https://github.com/gradio-app/gradio/commit/c054ec85e49ab102b15afd305583ee394151d16c) - Drop python 3.8 and 3.9. Thanks @abidlabs! +- [#8978](https://github.com/gradio-app/gradio/pull/8978) [`fe9d1cb`](https://github.com/gradio-app/gradio/commit/fe9d1cb0870a5b07d51e8cb05401af47efbacd13) - Improve url downloads for file objects. Thanks @aliabid94! +- [#8810](https://github.com/gradio-app/gradio/pull/8810) [`4cf8af9`](https://github.com/gradio-app/gradio/commit/4cf8af9407a44ee914e0be567da38b29f00eff8e) - Prevent invalid values from being submitted to dropdown, etc. Thanks @abidlabs! +- [#9194](https://github.com/gradio-app/gradio/pull/9194) [`20c0836`](https://github.com/gradio-app/gradio/commit/20c0836ed0e0698dbc81d2a4bda04363fd857334) - Deprecate type='tuples for chatbot and focus chatbot docs on 'messages' type. Thanks @freddyaboulton! +- [#9122](https://github.com/gradio-app/gradio/pull/9122) [`2672ea2`](https://github.com/gradio-app/gradio/commit/2672ea297ef28414ecf2eeab7984b1e4b4ee40b8) - Postprocess hardening. Thanks @freddyaboulton! +- [#9149](https://github.com/gradio-app/gradio/pull/9149) [`3d7a9b8`](https://github.com/gradio-app/gradio/commit/3d7a9b81f6fef06187eca832471dc1692eb493a0) - Open audio/image input stream only when queue is ready. Thanks @freddyaboulton! +- [#9173](https://github.com/gradio-app/gradio/pull/9173) [`66349fe`](https://github.com/gradio-app/gradio/commit/66349fe26827e3a3c15b738a1177e95fec7f5554) - Streaming Guides. Thanks @freddyaboulton! +- [#9185](https://github.com/gradio-app/gradio/pull/9185) [`2daf3d1`](https://github.com/gradio-app/gradio/commit/2daf3d10f5986675f6ceb75ebb50c9d991c282bf) - Adding `maxlength` attribute handling of `textarea` and `input` HTML element for the `gr.TextBox()` component via a `max_length` parameter. Thanks @WH-Yoshi! +- [#8959](https://github.com/gradio-app/gradio/pull/8959) [`a0aac66`](https://github.com/gradio-app/gradio/commit/a0aac6694076529ff925ccd34b3503d35e86cb49) - Adds `strict_cors` parameter to `launch()`. Thanks @abidlabs! +- [#9052](https://github.com/gradio-app/gradio/pull/9052) [`f3652eb`](https://github.com/gradio-app/gradio/commit/f3652ebe08211e12739df73c15fd97e5ff81276a) - Video gallery. Thanks @dawoodkhan82! +- [#9213](https://github.com/gradio-app/gradio/pull/9213) [`ab4580b`](https://github.com/gradio-app/gradio/commit/ab4580bd5f755a07c9a9bd2a775220a9a2085f8c) - Remove grey background behind all components. Thanks @hannahblair! +- [#9073](https://github.com/gradio-app/gradio/pull/9073) [`0d8a358`](https://github.com/gradio-app/gradio/commit/0d8a358cc86331aa0c83380326b30d04597f9ef9) - Set default `format` in `gr.Audio` to be `None` to avoid unnecessary preprocessing. Thanks @abidlabs! +- [#9130](https://github.com/gradio-app/gradio/pull/9130) [`864cd0f`](https://github.com/gradio-app/gradio/commit/864cd0fd6aa85691b53bd0bf3a50af05b778813c) - Raise WasmUnsupportedError for ffmpeg usage on Lite. Thanks @whitphx! +- [#8797](https://github.com/gradio-app/gradio/pull/8797) [`6e6818c`](https://github.com/gradio-app/gradio/commit/6e6818c3af836051fffdd070a9e33889b246186e) - Deprecate for 5.0. Thanks @abidlabs! +- [#9132](https://github.com/gradio-app/gradio/pull/9132) [`5cedf16`](https://github.com/gradio-app/gradio/commit/5cedf162f2120e30dd58bf3a8eab27115030b4f5) - Deprecate passing a tuple for gr.Code value. Thanks @freddyaboulton! +- [#8941](https://github.com/gradio-app/gradio/pull/8941) [`97a7bf6`](https://github.com/gradio-app/gradio/commit/97a7bf66a79179d1b91a3199d68e5c11216ca500) - Streaming inputs for 5.0. Thanks @freddyaboulton! +- [#9150](https://github.com/gradio-app/gradio/pull/9150) [`80c966a`](https://github.com/gradio-app/gradio/commit/80c966af6e3d947abe96058de9b683ecf05d9803) - DNS resolver on ip check. Thanks @aliabid94! +- [#9175](https://github.com/gradio-app/gradio/pull/9175) [`e6d456a`](https://github.com/gradio-app/gradio/commit/e6d456a9c3b7e80e0c9a16cd365288deff706635) - Change dark mode color theme from `gray` to `zinc`. Thanks @hannahblair! +- [#8884](https://github.com/gradio-app/gradio/pull/8884) [`3408dba`](https://github.com/gradio-app/gradio/commit/3408dba7560a17371be679d0f01564a5606dc90b) - replace ip addresses with machine-specific hashes. Thanks @abidlabs! + +### Fixes + +- [#9189](https://github.com/gradio-app/gradio/pull/9189) [`ab142ee`](https://github.com/gradio-app/gradio/commit/ab142ee13d19070b75b5eb03efcda7193b8993c2) - Fix serialization error in curl api. Thanks @freddyaboulton! + +## 4.44.1 + +### Features + +- [#9320](https://github.com/gradio-app/gradio/pull/9320) [`98cbcae`](https://github.com/gradio-app/gradio/commit/98cbcaef827de7267462ccba180c7b2ffb1e825d) - chore: fix docs style. Thanks @imba-tjd! + +## 4.44.0 + +### Features + +- [#9302](https://github.com/gradio-app/gradio/pull/9302) [`ac2c015`](https://github.com/gradio-app/gradio/commit/ac2c015bd8385c3f5e346b9cfce415f1e5f54c69) - Fileformat whitelist. Thanks @aliabid94! +- [#9276](https://github.com/gradio-app/gradio/pull/9276) [`8362a10`](https://github.com/gradio-app/gradio/commit/8362a10a7e8a3c291fa0300a6f4a23a1ca997b8a) - Fix scrollbars everywhere. Thanks @aliabid94! + +### Fixes + +- [#9188](https://github.com/gradio-app/gradio/pull/9188) [`8f8e1c6`](https://github.com/gradio-app/gradio/commit/8f8e1c6a0b09b0d1985b8377d94d693cb00f8a18) - Fix multiple trigger bug when function has js. Thanks @freddyaboulton! +- [#9279](https://github.com/gradio-app/gradio/pull/9279) [`fb5845c`](https://github.com/gradio-app/gradio/commit/fb5845c3539e006235a2a52811a863ef2fefd66f) - Separate starlette.Request from PredictBody. Only set in new PredictBodyInternal object. Thanks @freddyaboulton! +- [#9267](https://github.com/gradio-app/gradio/pull/9267) [`ecf9137`](https://github.com/gradio-app/gradio/commit/ecf9137762130ab2e9f8e747feda091392b25e7a) - Add root_url to components created by gr.render. Thanks @freddyaboulton! + +## 4.43.0 + +### Features + +- [#9160](https://github.com/gradio-app/gradio/pull/9160) [`8f5a895`](https://github.com/gradio-app/gradio/commit/8f5a8950c949996f7c439b11a7aa40edda3e8562) - Fix native plot lite demos. Thanks @aliabd! +- [#9185](https://github.com/gradio-app/gradio/pull/9185) [`2daf3d1`](https://github.com/gradio-app/gradio/commit/2daf3d10f5986675f6ceb75ebb50c9d991c282bf) - Adding `maxlength` attribute handling of `textarea` and `input` HTML element for the `gr.TextBox()` component via a `max_length` parameter. Thanks @WH-Yoshi! +- [#9187](https://github.com/gradio-app/gradio/pull/9187) [`5bf00b7`](https://github.com/gradio-app/gradio/commit/5bf00b7524ebf399b48719120a49d15bb21bd65c) - make all component SSR compatible. Thanks @pngwn! +- [#9225](https://github.com/gradio-app/gradio/pull/9225) [`5f2e047`](https://github.com/gradio-app/gradio/commit/5f2e047c2ce114cebc95d5dba16c4df10fa73eb1) - Add a 'None' option to the gradio.Image component to disable image_m…. Thanks @GeeMoose! + +### Fixes + +- [#9242](https://github.com/gradio-app/gradio/pull/9242) [`d0e93d7`](https://github.com/gradio-app/gradio/commit/d0e93d70e87ea64f144e8eda7d5d49c27b6158e5) - Fix for create_or_modify_pyi read_text Windows Issue in component_meta.py. Thanks @SmirkingKitsune! +- [#9189](https://github.com/gradio-app/gradio/pull/9189) [`ab142ee`](https://github.com/gradio-app/gradio/commit/ab142ee13d19070b75b5eb03efcda7193b8993c2) - Fix serialization error in curl api. Thanks @freddyaboulton! +- [#9277](https://github.com/gradio-app/gradio/pull/9277) [`d9c4c86`](https://github.com/gradio-app/gradio/commit/d9c4c8606acf9ab36390e35ab10e43bb3191ced5) - Pin `fastapi<0.113.0` in `requirements.txt`. Thanks @abidlabs! + +## 4.42.0 + +### Features + +- [#9128](https://github.com/gradio-app/gradio/pull/9128) [`747013b`](https://github.com/gradio-app/gradio/commit/747013bbacebae6bfdda554b45e541e80b2894e0) - Allow accessing the entire row of selected values in `gr.DataFrame`. Thanks @abidlabs! +- [#8935](https://github.com/gradio-app/gradio/pull/8935) [`f6b2b97`](https://github.com/gradio-app/gradio/commit/f6b2b97d473dd81571410cccc6e1ddfcf9fa00bc) - Initialize the client with the fake host for Lite server. Thanks @whitphx! +- [#9031](https://github.com/gradio-app/gradio/pull/9031) [`04b7d32`](https://github.com/gradio-app/gradio/commit/04b7d327ec1227a693fc2dfea51b1e2729851bde) - Allow drag and replace image in `gr.Image` and Multimodal textbox. Thanks @hannahblair! +- [#8930](https://github.com/gradio-app/gradio/pull/8930) [`41d5ab9`](https://github.com/gradio-app/gradio/commit/41d5ab987ba9728753be4509490c79041655809b) - Add `placeholder` param to Image and ImageEditor to replace upload image text. Thanks @hannahblair! +- [#9023](https://github.com/gradio-app/gradio/pull/9023) [`87e3537`](https://github.com/gradio-app/gradio/commit/87e3537342017c7f19d012f0806a14bc264e09f9) - Add height param to gr.JSON. Thanks @hannahblair! +- [#9013](https://github.com/gradio-app/gradio/pull/9013) [`5350f1f`](https://github.com/gradio-app/gradio/commit/5350f1feb20cb7458d188403f319c5087052f695) - Add copy all messages button to chatbot. Thanks @hannahblair! +- [#9118](https://github.com/gradio-app/gradio/pull/9118) [`e1c404d`](https://github.com/gradio-app/gradio/commit/e1c404da1143fb52b659d03e028bdba1badf443d) - setup npm-previews of all packages. Thanks @pngwn! +- [#9102](https://github.com/gradio-app/gradio/pull/9102) [`efdc323`](https://github.com/gradio-app/gradio/commit/efdc3231a7bde38cfe45d10086d0d36a24c1b9b4) - Initial SSR refactor. Thanks @pngwn! + +### Fixes + +- [#9078](https://github.com/gradio-app/gradio/pull/9078) [`1a9d729`](https://github.com/gradio-app/gradio/commit/1a9d7297c17a3bc0493be34e8e762350ab7f0844) - Catch OSErrors in `HuggingFaceDatasetSaver._deserialize_components`. Thanks @davidberenstein1957! +- [#9088](https://github.com/gradio-app/gradio/pull/9088) [`96f8ffa`](https://github.com/gradio-app/gradio/commit/96f8ffa5eea511290f203c5d13484731e7d82387) - Set non-zero exit codes for custom component build and install commands when failures occur. Thanks @freddyaboulton! +- [#9161](https://github.com/gradio-app/gradio/pull/9161) [`173c7b8`](https://github.com/gradio-app/gradio/commit/173c7b8624371d89c40eb667bc28b9955c61b063) - Chatbot Image size and list fixes. Thanks @dawoodkhan82! +- [#9151](https://github.com/gradio-app/gradio/pull/9151) [`f1ef94a`](https://github.com/gradio-app/gradio/commit/f1ef94a435439934610497eab34201a586e418e1) - Open media type files in browser. Thanks @aliabid94! +- [#9148](https://github.com/gradio-app/gradio/pull/9148) [`8715f10`](https://github.com/gradio-app/gradio/commit/8715f103399c709717084335cfe5e971ebf9f2de) - Allow `gr.Request` to work with ZeroGPU. Thanks @abidlabs! +- [#9093](https://github.com/gradio-app/gradio/pull/9093) [`60650d8`](https://github.com/gradio-app/gradio/commit/60650d84b2cfe93fd2ebf2d2997d6c0f382d5f1a) - Reset `Dataset` page to 0 when samples change. Thanks @abidlabs! +- [#9116](https://github.com/gradio-app/gradio/pull/9116) [`ba6322e`](https://github.com/gradio-app/gradio/commit/ba6322ec2bb975f15389fe0700816bf671c6819d) - Fix image height content fit. Thanks @hannahblair! +- [#9079](https://github.com/gradio-app/gradio/pull/9079) [`d6dc384`](https://github.com/gradio-app/gradio/commit/d6dc3846fd94fe03658f0fa8219d68ddf1f7aa64) - Add more typing to event listeners. Thanks @JackismyShephard! +- [#9119](https://github.com/gradio-app/gradio/pull/9119) [`30b5d6f`](https://github.com/gradio-app/gradio/commit/30b5d6f2b75e1ff0ea03c7a6567e43a022871c9f) - Fix chatinterface multimodal bug. Thanks @freddyaboulton! +- [#8987](https://github.com/gradio-app/gradio/pull/8987) [`7b288cf`](https://github.com/gradio-app/gradio/commit/7b288cf6772ec3dc1fa603db859975e5dab90127) - Fix unexpected rendering of Dataset. Thanks @Col0ring! +- [#9089](https://github.com/gradio-app/gradio/pull/9089) [`508ac84`](https://github.com/gradio-app/gradio/commit/508ac84bc2ffbeff6daae8ae0956e14e7472c4c0) - Set orig_name in downloadbutton postprocess. Thanks @freddyaboulton! +- [#8951](https://github.com/gradio-app/gradio/pull/8951) [`6e7d9e5`](https://github.com/gradio-app/gradio/commit/6e7d9e5b848e5af8cae97a4a4f021859c423ffa4) - Deal with OAuth too many redirects. Thanks @Wauplin! + +## 4.41.0 + +### Features + +- [#8968](https://github.com/gradio-app/gradio/pull/8968) [`38b3682`](https://github.com/gradio-app/gradio/commit/38b3682c3a9b40fb4070f665d94711c43c6fe40e) - Improvements to FRP client download and usage. Thanks @abidlabs! +- [#8965](https://github.com/gradio-app/gradio/pull/8965) [`d30432e`](https://github.com/gradio-app/gradio/commit/d30432e9c6d4cc1e5cfd989a1a3ae4aba7e21290) - harden CI. Thanks @pngwn! +- [#8972](https://github.com/gradio-app/gradio/pull/8972) [`d4c503a`](https://github.com/gradio-app/gradio/commit/d4c503a471cfd202c56fbddd99d5da431a4b7478) - Type hint Correction. Thanks @sthemeow! +- [#8964](https://github.com/gradio-app/gradio/pull/8964) [`bf6bbd9`](https://github.com/gradio-app/gradio/commit/bf6bbd971acddbf78f03bea431ed7d1e0003ccf9) - Add min/max-imize button to gr.Image and gr.Gallery. Thanks @hannahblair! +- [#9059](https://github.com/gradio-app/gradio/pull/9059) [`981731a`](https://github.com/gradio-app/gradio/commit/981731acb7da3e78555abeb20f47f3a8a5f0d861) - Fix flaky tests and tests on Windows. Thanks @abidlabs! +- [#9021](https://github.com/gradio-app/gradio/pull/9021) [`360350c`](https://github.com/gradio-app/gradio/commit/360350cfc46b7dcc41d8a015b7eb6e7056cc7938) - Minor fixes. Thanks @aliabid94! +- [#9064](https://github.com/gradio-app/gradio/pull/9064) [`4ba7b23`](https://github.com/gradio-app/gradio/commit/4ba7b238e22ac042de14a6b69aa9d61536ddffba) - Improve plot guide, add double clicking to plots. Thanks @aliabid94! +- [#8975](https://github.com/gradio-app/gradio/pull/8975) [`3feea64`](https://github.com/gradio-app/gradio/commit/3feea64a65688d710184604bb44636d513bcc36a) - Prevent overflow in Model3D. Thanks @hannahblair! +- [#8967](https://github.com/gradio-app/gradio/pull/8967) [`2f89877`](https://github.com/gradio-app/gradio/commit/2f89877ac1ef9eab46115187ffe179d5da060edd) - Set `content_disposition_type` and `media_type` on downloaded files. Thanks @aliabid94! +- [#8958](https://github.com/gradio-app/gradio/pull/8958) [`4ff91a3`](https://github.com/gradio-app/gradio/commit/4ff91a3e6538872c529b604d36120dd946dc3282) - Fixes some docstrings, particularly for the `show_progress` parameter. Thanks @abidlabs! +- [#9020](https://github.com/gradio-app/gradio/pull/9020) [`08b5159`](https://github.com/gradio-app/gradio/commit/08b51590163b306fd874f543f6fcaf23ac7d2646) - Some tweaks to is_in_or_equal. Thanks @freddyaboulton! + +### Fixes + +- [#8962](https://github.com/gradio-app/gradio/pull/8962) [`c68eefb`](https://github.com/gradio-app/gradio/commit/c68eefba6c18ba9fda98220fb273726522dc3340) - fix: httpx timeouts cause gradio to fail during launch. Thanks @rsamborski! +- [#8847](https://github.com/gradio-app/gradio/pull/8847) [`4d8a473`](https://github.com/gradio-app/gradio/commit/4d8a473632e388a312aee5c705b3c1f79853441b) - Refactor Chatinterface to use Chatbot instead of gr.State variables. Thanks @freddyaboulton! +- [#9054](https://github.com/gradio-app/gradio/pull/9054) [`9fa635a`](https://github.com/gradio-app/gradio/commit/9fa635a8fd0050cc16539b9a3d11846ec71edf13) - Fix multimodal chatinterface api bug. Thanks @freddyaboulton! +- [#8847](https://github.com/gradio-app/gradio/pull/8847) [`4d8a473`](https://github.com/gradio-app/gradio/commit/4d8a473632e388a312aee5c705b3c1f79853441b) - fix: wrong named param check for js client. Thanks @freddyaboulton! +- [#9011](https://github.com/gradio-app/gradio/pull/9011) [`0978de8`](https://github.com/gradio-app/gradio/commit/0978de8104046250593806c927b416e4ffbbe293) - Passes `gr.Request` if type hint is `Request | None`. Thanks @abidlabs! +- [#9053](https://github.com/gradio-app/gradio/pull/9053) [`8b33393`](https://github.com/gradio-app/gradio/commit/8b33393586af695e4ccd07f55453df896785b089) - Fix `show_progress` in `gr.Interface`. Thanks @abidlabs! + +## 4.40.0 + +### Features + +- [#8954](https://github.com/gradio-app/gradio/pull/8954) [`5010e95`](https://github.com/gradio-app/gradio/commit/5010e9579e5fdd5c3861b144c427551c2e5ead0f) - Add `overflow: wrap` to JSON to catch overflow in xs device widths. Thanks @hannahblair! +- [#8932](https://github.com/gradio-app/gradio/pull/8932) [`600c97c`](https://github.com/gradio-app/gradio/commit/600c97c807b648bca11c2dd5dfa0a6a692756bd9) - Allow viewing JSON as list or dict with `show_indices` param. Thanks @hannahblair! +- [#8929](https://github.com/gradio-app/gradio/pull/8929) [`3539787`](https://github.com/gradio-app/gradio/commit/3539787ebb39b3d00c34707b49d5de40fdc3d69a) - Add line numbering and collapse/expand logic to gr.JSON. Thanks @hannahblair! +- [#8862](https://github.com/gradio-app/gradio/pull/8862) [`ac132e3`](https://github.com/gradio-app/gradio/commit/ac132e3cbc8dbc7bec3d607d52bef347e90feb41) - Support the use of custom authentication mechanism, timeouts, and other `httpx` parameters in Python Client. Thanks @valgai! +- [#8947](https://github.com/gradio-app/gradio/pull/8947) [`96d36d7`](https://github.com/gradio-app/gradio/commit/96d36d70ad3bee048027cfbf89533020a8aa6e63) - Restore plot label angles. Thanks @aliabid94! +- [#8948](https://github.com/gradio-app/gradio/pull/8948) [`f7fbd2c`](https://github.com/gradio-app/gradio/commit/f7fbd2c23795d97071296463779d41bd0e937164) - Bump websockets version max for gradio-client. Thanks @evanscho! +- [#8907](https://github.com/gradio-app/gradio/pull/8907) [`9b42ba8`](https://github.com/gradio-app/gradio/commit/9b42ba8f1006c05d60a62450d3036ce0d6784f86) - Update guides esp plots. Thanks @aliabid94! +- [#8888](https://github.com/gradio-app/gradio/pull/8888) [`70a0c56`](https://github.com/gradio-app/gradio/commit/70a0c5620043ae613af16008f4a683b0f238545d) - Added support for TokenClassificationPipeline. Thanks @cswamy! +- [#8950](https://github.com/gradio-app/gradio/pull/8950) [`7e997a8`](https://github.com/gradio-app/gradio/commit/7e997a85bb21cbe7eb27df5b3f31ad636435b0a1) - Fix running local app with fake OAuth. Thanks @Wauplin! +- [#8867](https://github.com/gradio-app/gradio/pull/8867) [`f8ccb5e`](https://github.com/gradio-app/gradio/commit/f8ccb5e663ed5df010f7a8e93d556bfc238d849d) - Make `update_root_in_config` atomic. Thanks @abidlabs! +- [#8900](https://github.com/gradio-app/gradio/pull/8900) [`de997e6`](https://github.com/gradio-app/gradio/commit/de997e67c9a7feb9e2eccebf92969366dbd67eba) - Adds ability to watermark videos via a `watermark` parameter in Video component. Thanks @meg-huggingface! + +### Fixes + +- [#8949](https://github.com/gradio-app/gradio/pull/8949) [`1e16f67`](https://github.com/gradio-app/gradio/commit/1e16f67ba2a02761d4b73afd723f8edc3c3124e9) - Fix check icon in gr.JSON and gr.Code. Thanks @hannahblair! +- [#8899](https://github.com/gradio-app/gradio/pull/8899) [`20444f9`](https://github.com/gradio-app/gradio/commit/20444f9b56f95240d00759f31a1b831b9eb53160) - Fix Chatbot Multimodal Examples. Thanks @dawoodkhan82! +- [#8933](https://github.com/gradio-app/gradio/pull/8933) [`5f9b8d0`](https://github.com/gradio-app/gradio/commit/5f9b8d093a17f4fcc689cbc83fd6db6c43b5174b) - Fix lazy caching. Thanks @abidlabs! +- [#8879](https://github.com/gradio-app/gradio/pull/8879) [`67c08bf`](https://github.com/gradio-app/gradio/commit/67c08bfb9e59d801081591b8a59232c32d4467cf) - Fix file uploading in iOS. Thanks @hannahblair! +- [#8905](https://github.com/gradio-app/gradio/pull/8905) [`4b14ea8`](https://github.com/gradio-app/gradio/commit/4b14ea860d5055410a3a2257974b61a5c8eaac9d) - Allow use of file extensions in gr.File in iOS. Thanks @hannahblair! +- [#8927](https://github.com/gradio-app/gradio/pull/8927) [`223688b`](https://github.com/gradio-app/gradio/commit/223688b70a7a3cf4daa92ae77f8fca7b537cc2b4) - Fix `Could not resolve "virtual:component-loader"` in gradio/utils package. Thanks @benzler! +- [#8934](https://github.com/gradio-app/gradio/pull/8934) [`8204425`](https://github.com/gradio-app/gradio/commit/8204425bfa2c08077948e59e7f5375b1b4d1e338) - Fix Json component serialization bug. Thanks @freddyaboulton! +- [#8931](https://github.com/gradio-app/gradio/pull/8931) [`4c2d37d`](https://github.com/gradio-app/gradio/commit/4c2d37db849848fd38ba733a23a5aaceeaf58faf) - Add background to gr.Code line numbers. Thanks @hannahblair! + +## 4.39.0 + +### Features + +- [#8832](https://github.com/gradio-app/gradio/pull/8832) [`e75f2ca`](https://github.com/gradio-app/gradio/commit/e75f2ca2da4f41f25459b98bedaa940c887e6a93) - Fix build for pre-release. Thanks @pngwn! +- [#8618](https://github.com/gradio-app/gradio/pull/8618) [`aa4b7a7`](https://github.com/gradio-app/gradio/commit/aa4b7a71921fd5b7ad7e3c0cce7687a8f6d284da) - Improve styling of parameter tables in the docs. Thanks @abidlabs! +- [#8745](https://github.com/gradio-app/gradio/pull/8745) [`4030f28`](https://github.com/gradio-app/gradio/commit/4030f28af6ae9f3eb94bb4e9cae83fb7016cdaad) - Allows updating the dataset of a `gr.Examples`. Thanks @abidlabs! +- [#8757](https://github.com/gradio-app/gradio/pull/8757) [`6073736`](https://github.com/gradio-app/gradio/commit/60737366517f48d1a37ffce15425783a2887f305) - Document `FileData` class in docs. Thanks @hannahblair! +- [#8846](https://github.com/gradio-app/gradio/pull/8846) [`76c1759`](https://github.com/gradio-app/gradio/commit/76c175935019833baef709a5cf401d2263ca72ee) - add space header. Thanks @pngwn! +- [#8804](https://github.com/gradio-app/gradio/pull/8804) [`1d09925`](https://github.com/gradio-app/gradio/commit/1d09925469a5f96e8d3a972a28841903fa1c7265) - Fix Lite's . Thanks @whitphx! +- [#8807](https://github.com/gradio-app/gradio/pull/8807) [`a238af4`](https://github.com/gradio-app/gradio/commit/a238af4d688c4e030e37c2ef01d5c80d6d940912) - Refactor plots to drop `altair` and use `vega.js` directly. Thanks @aliabid94! +- [#8806](https://github.com/gradio-app/gradio/pull/8806) [`a3d23b4`](https://github.com/gradio-app/gradio/commit/a3d23b43e71c22bc2b019ae96668605e744768d5) - Add `loop` parameters to `gr.Audio` and `gr.Video`. Thanks @abidlabs! +- [#8856](https://github.com/gradio-app/gradio/pull/8856) [`5622331`](https://github.com/gradio-app/gradio/commit/5622331da724eb2510c74f156a2fd140a932cc55) - Extend `pyright` to cover tests as well. Thanks @abidlabs! +- [#8851](https://github.com/gradio-app/gradio/pull/8851) [`914b193`](https://github.com/gradio-app/gradio/commit/914b1935de27c3b379ac9e759b6d10747e3b881a) - Add copy button to `gr.Markdown`. Thanks @hannahblair! +- [#8837](https://github.com/gradio-app/gradio/pull/8837) [`0d76169`](https://github.com/gradio-app/gradio/commit/0d76169e46112dffbc2e7649355706e37e0a6372) - upgrade pyright==1.1.372. Thanks @abidlabs! +- [#8816](https://github.com/gradio-app/gradio/pull/8816) [`9ee6839`](https://github.com/gradio-app/gradio/commit/9ee6839f94d23d685a800ed3a275206e0b0e48f6) - Change optionality of the `data` param in `submit` + `predict`. Thanks @hannahblair! +- [#8809](https://github.com/gradio-app/gradio/pull/8809) [`7f41567`](https://github.com/gradio-app/gradio/commit/7f41567e9cc5222c4cede3ea5321e634ea038bd1) - Use constant-time comparison when checking user provided analytics key. Thanks @abidlabs! +- [#8817](https://github.com/gradio-app/gradio/pull/8817) [`34510db`](https://github.com/gradio-app/gradio/commit/34510db468daae19ad618c347cb88a4769816fb2) - Allow HTML in alert modals. Thanks @abidlabs! +- [#8803](https://github.com/gradio-app/gradio/pull/8803) [`e1a4040`](https://github.com/gradio-app/gradio/commit/e1a404093cfaf9d8f2a92bc1d28fb6aa254848d1) - Ensure all upload components have consistent upload regions. Thanks @pngwn! +- [#8821](https://github.com/gradio-app/gradio/pull/8821) [`cea3bf9`](https://github.com/gradio-app/gradio/commit/cea3bf990057391f699bdeeabbdb62fdad9b43f5) - Fix dependency loop with statustracker and markdown. Thanks @aliabd! +- [#8774](https://github.com/gradio-app/gradio/pull/8774) [`2d179f6`](https://github.com/gradio-app/gradio/commit/2d179f647baca48362863f5144298768149860c9) - Set the default format of gr.Plot as png for Wasm mode. Thanks @whitphx! +- [#8775](https://github.com/gradio-app/gradio/pull/8775) [`e36bab7`](https://github.com/gradio-app/gradio/commit/e36bab77e5753c3b011c7e44bce2eed46fac27cc) - Refactoring loadPyodide typing. Thanks @whitphx! + +### Fixes + +- [#8854](https://github.com/gradio-app/gradio/pull/8854) [`d1f0441`](https://github.com/gradio-app/gradio/commit/d1f044145ae93e5838042d9fb25f4f17def9c774) - Use covariant container types across the codebase and add typing to our demos. Thanks @abidlabs! +- [#8818](https://github.com/gradio-app/gradio/pull/8818) [`2de9a97`](https://github.com/gradio-app/gradio/commit/2de9a97ae953cc5c58c0d33d8966e638e76f950f) - Refactoring component making the code simpler and fixing a Playground mode bug. Thanks @whitphx! +- [#8799](https://github.com/gradio-app/gradio/pull/8799) [`61bb588`](https://github.com/gradio-app/gradio/commit/61bb5883a2af50534ef6994ba4829a1a3ea00e65) - Remove Pydantic v2 patch from Lite. Thanks @whitphx! +- [#8822](https://github.com/gradio-app/gradio/pull/8822) [`3a81fb2`](https://github.com/gradio-app/gradio/commit/3a81fb2578c6f73607c4e240d228dccb69153e0a) - Latex Rendering Fix. Thanks @dawoodkhan82! +- [#8865](https://github.com/gradio-app/gradio/pull/8865) [`2f630ab`](https://github.com/gradio-app/gradio/commit/2f630abf53ec493a3ff5e827b5951b26c74b7242) - Chatbot Examples Scroll Fix. Thanks @dawoodkhan82! +- [#8820](https://github.com/gradio-app/gradio/pull/8820) [`5050b36`](https://github.com/gradio-app/gradio/commit/5050b36221e75a18d8a5d4f74a725e70768a4c4a) - fix: wrong named param check for js client. Thanks @JacobLinCool! +- [#8836](https://github.com/gradio-app/gradio/pull/8836) [`7e8c829`](https://github.com/gradio-app/gradio/commit/7e8c829aad85d3d5a31a03f4f2e41483d1e6b53e) - Add `.input()` events to `gr.Audio` and `gr.Image`. Thanks @abidlabs! +- [#8802](https://github.com/gradio-app/gradio/pull/8802) [`7b19474`](https://github.com/gradio-app/gradio/commit/7b19474cb2dd8f2c34d630f43edb0fcb0e05aa0c) - Ensure `ImageEditor` brush color can be updated with `gr.update`. Thanks @pngwn! +- [#8852](https://github.com/gradio-app/gradio/pull/8852) [`16b8200`](https://github.com/gradio-app/gradio/commit/16b820038df43905447ab7623d39d91ceb0d6238) - Fix gr.Image height inconsistencies. Thanks @hannahblair! + +## 4.38.1 + +### Features + +- [#8766](https://github.com/gradio-app/gradio/pull/8766) [`2b4636e`](https://github.com/gradio-app/gradio/commit/2b4636e75cf728846253451b7104b724609a9cd1) - Fix width of assistant's chatbot bubble. Thanks @pngwn! + +## 4.38.0 + +### Highlights + +#### Support message format in chatbot 💬 ([#8422](https://github.com/gradio-app/gradio/pull/8422) [`4221290`](https://github.com/gradio-app/gradio/commit/4221290d847041024b1faa3df5585bba0775b8b3)) + +`gr.Chatbot` and `gr.ChatInterface` now support the [Messages API](https://huggingface.co./docs/text-generation-inference/en/messages_api#messages-api), which is fully compatible with LLM API providers such as Hugging Face Text Generation Inference, OpenAI's chat completions API, and Llama.cpp server. + +Building Gradio applications around these LLM solutions is now even easier! + +`gr.Chatbot` and `gr.ChatInterface` now have a `type` parameter that can accept two values - `'tuples'` and `'messages'`. If set to `'tuples'`, the default chatbot data format is expected. If set to `'messages'`, a list of dictionaries with `content` and `role` keys is expected. See below - + +```python +def chat_greeter(msg, history): + history.append({"role": "assistant", "content": "Hello!"}) + return history +``` + +Additionally, gradio now exposes a `gr.ChatMessage` dataclass you can use for IDE type hints and auto completion. + +image + + +#### Tool use in Chatbot 🛠️ + +The Gradio Chatbot can now natively display tool usage and intermediate thoughts common in Agent and chain-of-thought workflows! + +If you are using the new "messages" format, simply add a `metadata` key with a dictionary containing a `title` key and `value`. This will display the assistant message in an expandable message box to show the result of a tool or intermediate step. + +```python +import gradio as gr +from gradio import ChatMessage +import time + +def generate_response(history): + history.append(ChatMessage(role="user", content="What is the weather in San Francisco right now?")) + yield history + time.sleep(0.25) + history.append(ChatMessage(role="assistant", + content="In order to find the current weather in San Francisco, I will need to use my weather tool.") + ) + yield history + time.sleep(0.25) + + history.append(ChatMessage(role="assistant", + content="API Error when connecting to weather service.", + metadata={"title": "💥 Error using tool 'Weather'"}) + ) + yield history + time.sleep(0.25) + + history.append(ChatMessage(role="assistant", + content="I will try again", + )) + yield history + time.sleep(0.25) + + history.append(ChatMessage(role="assistant", + content="Weather 72 degrees Fahrenheit with 20% chance of rain.", + metadata={"title": "🛠️ Used tool 'Weather'"} + )) + yield history + time.sleep(0.25) + + history.append(ChatMessage(role="assistant", + content="Now that the API succeeded I can complete my task.", + )) + yield history + time.sleep(0.25) + + history.append(ChatMessage(role="assistant", + content="It's a sunny day in San Francisco with a current temperature of 72 degrees Fahrenheit and a 20% chance of rain. Enjoy the weather!", + )) + yield history + + +with gr.Blocks() as demo: + chatbot = gr.Chatbot(type="messages") + button = gr.Button("Get San Francisco Weather") + button.click(generate_response, chatbot, chatbot) + +if __name__ == "__main__": + demo.launch() +``` + + + +![tool-box-demo](https://github.com/freddyaboulton/freddyboulton/assets/41651716/cf73ecc9-90ac-42ce-bca5-768e0cc00a48) + + Thanks @freddyaboulton! + +### Features + +- [#8683](https://github.com/gradio-app/gradio/pull/8683) [`a92c3e8`](https://github.com/gradio-app/gradio/commit/a92c3e8015c1951f995f52f9750a0364bd5d5e8d) - Warn against Falsy credentials. Thanks @Paillat-dev! +- [#8743](https://github.com/gradio-app/gradio/pull/8743) [`ee497d5`](https://github.com/gradio-app/gradio/commit/ee497d5c3c96041e5b624452596762248de114cc) - Perform CORS validation when the request has a cookie. Thanks @abidlabs! +- [#8744](https://github.com/gradio-app/gradio/pull/8744) [`b736c8d`](https://github.com/gradio-app/gradio/commit/b736c8db343087a4854f659b92732c8859fa999a) - Refactor `gr.ParamViewer` to use HTML `
` and other tweaks. Thanks @abidlabs! +- [#8665](https://github.com/gradio-app/gradio/pull/8665) [`3b8238c`](https://github.com/gradio-app/gradio/commit/3b8238c2e222a6537b19b8901198b7e369e8319a) - Add c/cpp code support. Thanks @ginazhouhuiwu! +- [#8713](https://github.com/gradio-app/gradio/pull/8713) [`e3c7079`](https://github.com/gradio-app/gradio/commit/e3c7079e380880d5759d98d180eaf688122f1c69) - Time range component. Thanks @aliabid94! +- [#8705](https://github.com/gradio-app/gradio/pull/8705) [`280a3f4`](https://github.com/gradio-app/gradio/commit/280a3f4afe0500fe67a02fafa2ac31344c3a0149) - GRADIO_ALLOWED_PATHS & GRADIO_BLOCKED_PATHS comma separated environme…. Thanks @cocktailpeanut! +- [#8733](https://github.com/gradio-app/gradio/pull/8733) [`fb0daf3`](https://github.com/gradio-app/gradio/commit/fb0daf3730ffbe6aab5ebe4210eae150729a40b1) - Improvements to `gr.Examples`: adds events as attributes and documents, them, adds `sample_labels`, and `visible` properties. Thanks @abidlabs! +- [#8750](https://github.com/gradio-app/gradio/pull/8750) [`5e36144`](https://github.com/gradio-app/gradio/commit/5e361442328cf01fa92ecdadfa420054b8da2a81) - Add guides for msg format and llm agents. Thanks @freddyaboulton! +- [#8687](https://github.com/gradio-app/gradio/pull/8687) [`bc1d45d`](https://github.com/gradio-app/gradio/commit/bc1d45d8745a677bbe2a32f8d7553fe0d4ef3fd7) - Model3D point cloud and wireframe display modes. Thanks @dawoodkhan82! + +### Fixes + +- [#8699](https://github.com/gradio-app/gradio/pull/8699) [`012da05`](https://github.com/gradio-app/gradio/commit/012da05287846d94beb0ecdc28d7fbc48c4248ff) - Ensure JS client `status_callback` functionality works and improve status messages. Thanks @hannahblair! +- [#8763](https://github.com/gradio-app/gradio/pull/8763) [`c1ecfde`](https://github.com/gradio-app/gradio/commit/c1ecfde50e55902140aafc3551968e26c1bb4cd0) - 8394 df hidden items. Thanks @pngwn! +- [#8505](https://github.com/gradio-app/gradio/pull/8505) [`2943d6d`](https://github.com/gradio-app/gradio/commit/2943d6d68847314885dc6c5c0247083116017ca0) - Add Timer component. Thanks @aliabid94! +- [#8715](https://github.com/gradio-app/gradio/pull/8715) [`a6b3c6c`](https://github.com/gradio-app/gradio/commit/a6b3c6ce4e1d06253860c72740024a9138e3a93a) - Ensure `@gradio/client`'s `submit` iterator releases as expected. Thanks @pngwn! +- [#8758](https://github.com/gradio-app/gradio/pull/8758) [`26cdd0f`](https://github.com/gradio-app/gradio/commit/26cdd0ffe049ecfe751f3831cbdb4c04c0ecf934) - Revert chatbot styling. Thanks @pngwn! +- [#8658](https://github.com/gradio-app/gradio/pull/8658) [`0482453`](https://github.com/gradio-app/gradio/commit/0482453fd5815446c8efa21bfbba0b00d6e4113d) - Chatbot LaTeX Crash Fix. Thanks @dawoodkhan82! +- [#8716](https://github.com/gradio-app/gradio/pull/8716) [`e834d30`](https://github.com/gradio-app/gradio/commit/e834d302e44f7a54565129bf2c11acf4e882a59b) - ensure `@gradio/client` always returns the correct data. Thanks @pngwn! +- [#8737](https://github.com/gradio-app/gradio/pull/8737) [`31a876d`](https://github.com/gradio-app/gradio/commit/31a876d0274d7b74a90d30148f3e9c098f486242) - Fix `Share to community` button for images. Thanks @hannahblair! +- [#8719](https://github.com/gradio-app/gradio/pull/8719) [`d15ada9`](https://github.com/gradio-app/gradio/commit/d15ada9a1c270dd86e1751b1846510a70dc48510) - Fix multimodal textbox custom components. Thanks @freddyaboulton! +- [#8714](https://github.com/gradio-app/gradio/pull/8714) [`1b5b5b0`](https://github.com/gradio-app/gradio/commit/1b5b5b0b43e69ee84f3baad2aae59ffc9c4d995a) - Bind `fetch` and `stream` in JS client. Thanks @hannahblair! +- [#8677](https://github.com/gradio-app/gradio/pull/8677) [`c946c6f`](https://github.com/gradio-app/gradio/commit/c946c6f31a34bfd888a6a16c3fb479fe34710206) - Allow supplying custom `gr.Chatbot` with events to `gr.ChatInterface`. Thanks @abidlabs! +- [#8748](https://github.com/gradio-app/gradio/pull/8748) [`a9307c6`](https://github.com/gradio-app/gradio/commit/a9307c64525c5b323e56ea6f7475faa7c3dad4a4) - Chatbot generating scroll and click fix. Thanks @freddyaboulton! +- [#8720](https://github.com/gradio-app/gradio/pull/8720) [`936c713`](https://github.com/gradio-app/gradio/commit/936c7137a99ef59efdf75bae5dd27eea2ac1f577) - Documents auth in the guides, in the view API page, and also types the Blocks.config object. Thanks @abidlabs! + +## 4.37.2 + +### Features + +- [#8632](https://github.com/gradio-app/gradio/pull/8632) [`ea6482c`](https://github.com/gradio-app/gradio/commit/ea6482cc89a883075a9008d1758e97f5ea73a9ec) - remove `chatbot_multimodal` demo from `gr.Chatbot` documentation page. Thanks @abidlabs! +- [#8649](https://github.com/gradio-app/gradio/pull/8649) [`4b6c8b1`](https://github.com/gradio-app/gradio/commit/4b6c8b1c004cee67345a7f103ba2dc8e90b82e6c) - ensure `File` objects are handled in JS client `handle_file`. Thanks @hannahblair! +- [#8604](https://github.com/gradio-app/gradio/pull/8604) [`b6fa6b5`](https://github.com/gradio-app/gradio/commit/b6fa6b543f226540247cd50748019cde59b93005) - Add docs for `.on()`, `.then()`, and `.success()`, as well as the subclasses of `gr.EventData`. Thanks @abidlabs! + +### Fixes + +- [#8655](https://github.com/gradio-app/gradio/pull/8655) [`3896398`](https://github.com/gradio-app/gradio/commit/38963984800d58bfad81bc928f2d631cb4bac773) - Ensure copy button on chatbot shows when appropriate. Thanks @pngwn! +- [#8645](https://github.com/gradio-app/gradio/pull/8645) [`9933e53`](https://github.com/gradio-app/gradio/commit/9933e538c9544c386851d90adacd148763ccc878) - Update file_explorer.py for str type `height`. Thanks @magical-l! +- [#8608](https://github.com/gradio-app/gradio/pull/8608) [`c12f82a`](https://github.com/gradio-app/gradio/commit/c12f82a36dc75ff30918dc2ce5f24e583b676f22) - Bugfix: Add a `file_count` parameter to `gr.MultimodalTextbox`. Multiple files cab be uploaded by setting `file_count="multiple"`. Default is `"single"` to preserve the previous behavior. Thanks @freddyaboulton! +- [#8631](https://github.com/gradio-app/gradio/pull/8631) [`9b8840a`](https://github.com/gradio-app/gradio/commit/9b8840ab5f712a6634b77df014083071fa253ba0) - Ensure chatbot messages are visible to screenreaders. Thanks @hannahblair! +- [#8637](https://github.com/gradio-app/gradio/pull/8637) [`c348392`](https://github.com/gradio-app/gradio/commit/c34839293f7ebad91d71caced84eea4a3790a558) - Multimodal textbox buttons alignment. Thanks @dawoodkhan82! + +## 4.37.1 + +### Fixes + +- [#8610](https://github.com/gradio-app/gradio/pull/8610) [`9204d86`](https://github.com/gradio-app/gradio/commit/9204d86ed48b4a45ed5de5ea628b756d092ce910) - Add guide on cleaning up state and file resources. Thanks @freddyaboulton! + +## 4.37.0 + +### Features + +- [#8131](https://github.com/gradio-app/gradio/pull/8131) [`bb504b4`](https://github.com/gradio-app/gradio/commit/bb504b494947a287d6386e0e7ead3860c0f15223) - Gradio components in `gr.Chatbot()`. Thanks @dawoodkhan82! +- [#8489](https://github.com/gradio-app/gradio/pull/8489) [`c2a0d05`](https://github.com/gradio-app/gradio/commit/c2a0d056d679d90631d9ccd944dadd67e7e03b7f) - Control Display of Error, Info, Warning. Thanks @freddyaboulton! +- [#8571](https://github.com/gradio-app/gradio/pull/8571) [`a77877f`](https://github.com/gradio-app/gradio/commit/a77877f62df7c610fcfac7b3b00e186a087c8ec6) - First time loading performance optimization. Thanks @baojianting! +- [#8607](https://github.com/gradio-app/gradio/pull/8607) [`c7cd0a0`](https://github.com/gradio-app/gradio/commit/c7cd0a0e9aefe0e5ee5584df676f3cc69a403059) - Ensure chatbot background is consistent with other components. Thanks @pngwn! +- [#8555](https://github.com/gradio-app/gradio/pull/8555) [`7fc7455`](https://github.com/gradio-app/gradio/commit/7fc7455553c04c52c8e25d520f3d67f1b5609637) - support html in chatbot. Thanks @pngwn! +- [#8590](https://github.com/gradio-app/gradio/pull/8590) [`65afffd`](https://github.com/gradio-app/gradio/commit/65afffd34b79ba9117e8d9506ea82477204cb57d) - Fix multimodal chat look. Thanks @aliabid94! +- [#8603](https://github.com/gradio-app/gradio/pull/8603) [`affce4c`](https://github.com/gradio-app/gradio/commit/affce4cbd9e2df14175c79da27408ccce57a74e9) - Fix resizer on altair. Thanks @aliabid94! +- [#8580](https://github.com/gradio-app/gradio/pull/8580) [`797621b`](https://github.com/gradio-app/gradio/commit/797621b81a0ab9b794e6872f8d43bf6d19a68b78) - Improved plot rendering to thematically match. Thanks @aliabid94!/n highlight:Expect visual changes in gr.Plot, gr.BarPlot, gr.LinePlot, gr.ScatterPlot, including changes to color and width sizing. +- [#8520](https://github.com/gradio-app/gradio/pull/8520) [`595ecf3`](https://github.com/gradio-app/gradio/commit/595ecf35da6cd5f9aa7d9135282d005b63fbdef1) - Add build target option to the custom component `gradio.config.js` file. Thanks @pngwn! +- [#8593](https://github.com/gradio-app/gradio/pull/8593) [`d35c290`](https://github.com/gradio-app/gradio/commit/d35c290aadcb85113ee7ceea96a7ed7dc894b1d2) - Adding more docs for using components in chatbot. Thanks @abidlabs! +- [#8609](https://github.com/gradio-app/gradio/pull/8609) [`36b2af9`](https://github.com/gradio-app/gradio/commit/36b2af9a31e43e92f61f39636b7c32001c34734d) - Changed gradio version check from print statement to warning. Thanks @gdevakumar! +- [#8600](https://github.com/gradio-app/gradio/pull/8600) [`7289c4b`](https://github.com/gradio-app/gradio/commit/7289c4b036d8a78c48f8c9e66ba998e6730e80d2) - Add credentials: include and Cookie header to prevent 401 error. Thanks @yinkiu602! +- [#8488](https://github.com/gradio-app/gradio/pull/8488) [`b03da67`](https://github.com/gradio-app/gradio/commit/b03da67d8f17c36e78b47bfad78e30c94d577828) - Minor changes to monitoring. Thanks @freddyaboulton! +- [#8569](https://github.com/gradio-app/gradio/pull/8569) [`6f99a02`](https://github.com/gradio-app/gradio/commit/6f99a028ed0071e3f588076c059d19f3ff5d85f8) - Upgrade pyodide 0.26. Thanks @whitphx! +- [#8565](https://github.com/gradio-app/gradio/pull/8565) [`fd5aab1`](https://github.com/gradio-app/gradio/commit/fd5aab10be53a4215b5eeca03cd1c99c5a30c21d) - Remove duplicated code in `routes.py`. Thanks @sadra-barikbin! +- [#8529](https://github.com/gradio-app/gradio/pull/8529) [`d43d696`](https://github.com/gradio-app/gradio/commit/d43d69648669da98a4fdf741071501e531b68d86) - feat: exception handling about file_count params of File component. Thanks @young-hun-jo! +- [#8528](https://github.com/gradio-app/gradio/pull/8528) [`2b0c157`](https://github.com/gradio-app/gradio/commit/2b0c1577b27fcf30920196f815ec7be604893b19) - Added an optional `height` and overflow scrollbar for the Markdown Component. Thanks @ShruAgarwal! +- [#8516](https://github.com/gradio-app/gradio/pull/8516) [`de6aa2b`](https://github.com/gradio-app/gradio/commit/de6aa2b67668605b65ad92842b2c798afa2c6d8a) - Add helper classes to docs. Thanks @aliabd! +- [#8522](https://github.com/gradio-app/gradio/pull/8522) [`bdaa678`](https://github.com/gradio-app/gradio/commit/bdaa678d0c0a22250b41104f32e9121f98dc7437) - add handle_file docs. Thanks @pngwn! + +### Fixes + +- [#8599](https://github.com/gradio-app/gradio/pull/8599) [`ca125b7`](https://github.com/gradio-app/gradio/commit/ca125b728a0803a5b5ed71a5189e6b68175edcad) - Fix reload mode for jupyter notebook and stateful demos. Thanks @freddyaboulton! +- [#8521](https://github.com/gradio-app/gradio/pull/8521) [`900cf25`](https://github.com/gradio-app/gradio/commit/900cf25256a5b0563860097d69aac28b6afbfd8b) - Ensure frontend functions work when they don't return a value. Thanks @pngwn! +- [#8594](https://github.com/gradio-app/gradio/pull/8594) [`530f8a0`](https://github.com/gradio-app/gradio/commit/530f8a0b056b35dabe9bdd148e1ab7c4577f017d) - chatbot component tweaks. Thanks @pngwn! +- [#8530](https://github.com/gradio-app/gradio/pull/8530) [`d429690`](https://github.com/gradio-app/gradio/commit/d429690611eacd7b19cf4609332b0c12c93a1591) - Fix request serialization for fastapi `/docs`. Thanks @zhzLuke96! +- [#8589](https://github.com/gradio-app/gradio/pull/8589) [`34430b9`](https://github.com/gradio-app/gradio/commit/34430b934dbab3bc525f56b390dbc054f76cf56c) - Handle GIFs correct in `gr.Image` preprocessing. Thanks @abidlabs! +- [#8506](https://github.com/gradio-app/gradio/pull/8506) [`7c5fec3`](https://github.com/gradio-app/gradio/commit/7c5fec3a2606b7a40f4cdc60f2553ba55fc8df99) - Use root url for monitoring url. Thanks @abidlabs! +- [#8524](https://github.com/gradio-app/gradio/pull/8524) [`546d14e`](https://github.com/gradio-app/gradio/commit/546d14e4f2773f91be7afc37355327044e7cb6e6) - add test + demo. Thanks @pngwn! +- [#8588](https://github.com/gradio-app/gradio/pull/8588) [`1e61644`](https://github.com/gradio-app/gradio/commit/1e6164462431111e8c4c698cc2c57ab0d0076ba2) - move `deploy_space_action.yaml` to correct location. Thanks @abidlabs! +- [#8543](https://github.com/gradio-app/gradio/pull/8543) [`a4433be`](https://github.com/gradio-app/gradio/commit/a4433be25c183080d397413dc8c4330cd8c2b562) - Ability to disable orange progress animation for generators by setting `show_progress='minimal'` or `show_progress='hidden'` in the event definition. This is a small visual breaking change but it aligns better with the expected behavior of the `show_progress` parameter. Also added `show_progress` to `gr.Interface` and `gr.ChatInterface`. Thanks @freddyaboulton! +- [#8579](https://github.com/gradio-app/gradio/pull/8579) [`bc5fccf`](https://github.com/gradio-app/gradio/commit/bc5fccfeee4ff6941c927c982cfbabed7b90213c) - Allow `gr.load` to work inside `gr.Blocks` automatically. Thanks @abidlabs! +- [#8573](https://github.com/gradio-app/gradio/pull/8573) [`56af40f`](https://github.com/gradio-app/gradio/commit/56af40f5e3bc4ea98bcfe6838f7ffcda1f47b63f) - Fixes the `favicon_path` working error. Thanks @ShruAgarwal! +- [#8548](https://github.com/gradio-app/gradio/pull/8548) [`7fc0f51`](https://github.com/gradio-app/gradio/commit/7fc0f5149bb8d31f3d01b4151b478070499751ee) - Fix reload mode by implementing `close` on the client. Thanks @freddyaboulton! +- [#8531](https://github.com/gradio-app/gradio/pull/8531) [`88de38e`](https://github.com/gradio-app/gradio/commit/88de38e2597bc39532be77b917f1f02b1a11647d) - Fix custom components on windows. Thanks @freddyaboulton! +- [#8581](https://github.com/gradio-app/gradio/pull/8581) [`a1c21cb`](https://github.com/gradio-app/gradio/commit/a1c21cb69a688bd38139153fe9c85a50c6ae86f2) - fix dataset update. Thanks @abidlabs! +- [#8537](https://github.com/gradio-app/gradio/pull/8537) [`81ae766`](https://github.com/gradio-app/gradio/commit/81ae7663b303ac7738bc216d9bf916f0515dd22e) - Many small fixes to website and docs. Thanks @aliabd! + +## 4.36.1 + +### Features + +- [#8491](https://github.com/gradio-app/gradio/pull/8491) [`ffd53fa`](https://github.com/gradio-app/gradio/commit/ffd53fa2dcb13d564fd07aa441d4016df8d2f155) - Remove broken guide redirect. Thanks @aliabd! +- [#8499](https://github.com/gradio-app/gradio/pull/8499) [`c5f6e77`](https://github.com/gradio-app/gradio/commit/c5f6e7722a197d4706419ade14276ddecf3196f8) - Cache break themes on change. Thanks @aliabid94! + +### Fixes + +- [#8504](https://github.com/gradio-app/gradio/pull/8504) [`2a59bab`](https://github.com/gradio-app/gradio/commit/2a59bab3bb537373e2823b2416e42b7a8370d7ec) - Fixes TabbedInterface bug where only first interface events get triggered. Thanks @freddyaboulton! + +## 4.36.0 + +### Features + +- [#8478](https://github.com/gradio-app/gradio/pull/8478) [`73e1108`](https://github.com/gradio-app/gradio/commit/73e11087a0d212c568c361e84e50fcb59d4a37b0) - Adds a monitoring dashboard to Gradio apps that can be used to view usage. Thanks @aliabid94! + +## 4.35.0 + +### Features + +- [#8481](https://github.com/gradio-app/gradio/pull/8481) [`41a4493`](https://github.com/gradio-app/gradio/commit/41a449383a34b7d6e4c83cfbf61c222fd5501206) - fix client flaky tests. Thanks @abidlabs! +- [#8483](https://github.com/gradio-app/gradio/pull/8483) [`e2271e2`](https://github.com/gradio-app/gradio/commit/e2271e207d98074bf39b02ae3c5443b2f097627d) - documentation for @gradio/client. Thanks @pngwn! +- [#8485](https://github.com/gradio-app/gradio/pull/8485) [`f8ebace`](https://github.com/gradio-app/gradio/commit/f8ebaceccef60a112603d290d10072ef4e938a6a) - Ensure all status are reported internally when calling `predict`. Thanks @pngwn! + +## 4.34.0 + +### Features + +- [#8370](https://github.com/gradio-app/gradio/pull/8370) [`48eeea4`](https://github.com/gradio-app/gradio/commit/48eeea4eaab7e24168688e3c3fbafb30e4e78d51) - Refactor Cancelling Logic To Use /cancel. Thanks @freddyaboulton! +- [#8460](https://github.com/gradio-app/gradio/pull/8460) [`8628899`](https://github.com/gradio-app/gradio/commit/86288993d9589ceb7bcc3e4d10f0adb6419d4ac5) - Support Bash in Api Recorder. Thanks @aliabd! +- [#8417](https://github.com/gradio-app/gradio/pull/8417) [`96d8de2`](https://github.com/gradio-app/gradio/commit/96d8de231270321da5f310768643363276df3204) - add delete event to `File` component. Thanks @pngwn! +- [#8444](https://github.com/gradio-app/gradio/pull/8444) [`2cd02ff`](https://github.com/gradio-app/gradio/commit/2cd02ff3b7c57cd69635d111ff25643eba30b9b0) - Remove deprecated parameters from Python Client. Thanks @abidlabs! +- [#8473](https://github.com/gradio-app/gradio/pull/8473) [`8ca93d4`](https://github.com/gradio-app/gradio/commit/8ca93d45dd9f8948cfe87fe16ef5943139e756a7) - Improve design of api recorder. Thanks @aliabd! +- [#8445](https://github.com/gradio-app/gradio/pull/8445) [`5c8915b`](https://github.com/gradio-app/gradio/commit/5c8915b11308756c3b7279864d240ea85f5a0b4a) - Add cURL to view API Page and add a dedicated Guide. Thanks @abidlabs! + +### Fixes + +- [#8477](https://github.com/gradio-app/gradio/pull/8477) [`d5a9604`](https://github.com/gradio-app/gradio/commit/d5a960493017a4890685af61d78ce7d3b3b12e6b) - Fix js client bundle. Thanks @pngwn! +- [#8451](https://github.com/gradio-app/gradio/pull/8451) [`9d2d605`](https://github.com/gradio-app/gradio/commit/9d2d6051caed5c8749a26a6fa7480a5ae6e6c4f3) - Change client submit API to be an AsyncIterable and support more platforms. Thanks @pngwn! +- [#8462](https://github.com/gradio-app/gradio/pull/8462) [`6447dfa`](https://github.com/gradio-app/gradio/commit/6447dface4d46db1c69460e8325a1928d0476a46) - Improve file handling in JS Client. Thanks @hannahblair! +- [#8439](https://github.com/gradio-app/gradio/pull/8439) [`63d36fb`](https://github.com/gradio-app/gradio/commit/63d36fbbf4bf6dc909be9a0ffc7b6bf6621d83e8) - Handle gradio apps using `state` in the JS Client. Thanks @hannahblair! + +## 4.33.0 + +### Features + +- [#8429](https://github.com/gradio-app/gradio/pull/8429) [`d393a4a`](https://github.com/gradio-app/gradio/commit/d393a4a2245675d161f03bb9e7a7a62348748581) - Fix type hints for render and on. Thanks @freddyaboulton! +- [#8377](https://github.com/gradio-app/gradio/pull/8377) [`341844f`](https://github.com/gradio-app/gradio/commit/341844f04efe0e7e512c7ca443f3f2b195a32fa7) - Click to preview images in chatbot. Thanks @dawoodkhan82! +- [#8455](https://github.com/gradio-app/gradio/pull/8455) [`a970589`](https://github.com/gradio-app/gradio/commit/a970589cf57c72650f45fbc6a82ad9c52a6e4712) - Fix multimodal textbox placeholder. Thanks @dawoodkhan82! +- [#8446](https://github.com/gradio-app/gradio/pull/8446) [`4a55157`](https://github.com/gradio-app/gradio/commit/4a55157ed9796b8a69cadae0d87a85203eab2cb3) - state.change listener with deep hash check. Thanks @aliabid94! + +### Fixes + +- [#8400](https://github.com/gradio-app/gradio/pull/8400) [`33c8081`](https://github.com/gradio-app/gradio/commit/33c8081aa967ffc6fec68e15946b9bce2e848ee2) - Handle special arguments when extracting parameter names for view API page. Thanks @abidlabs! +- [#8369](https://github.com/gradio-app/gradio/pull/8369) [`4795c6e`](https://github.com/gradio-app/gradio/commit/4795c6e9e942b5ce489e4451ef84fa75128d89d2) - Fix multimodal textbox styling for certain themes. Thanks @dawoodkhan82! +- [#8440](https://github.com/gradio-app/gradio/pull/8440) [`83bdf5c`](https://github.com/gradio-app/gradio/commit/83bdf5c4478c0c6138cc639818dd5e403ea712a0) - Add support for `numpy~=2.0`. Thanks @freddyaboulton! + +## 4.32.2 + +### Fixes + +- [#8431](https://github.com/gradio-app/gradio/pull/8431) [`9909b28`](https://github.com/gradio-app/gradio/commit/9909b28364b82b5e8bfd7d47a858a204f68b963a) - fix scrolling on spaces. Thanks @pngwn! + +## 4.32.1 + +### Features + +- [#8415](https://github.com/gradio-app/gradio/pull/8415) [`227de35`](https://github.com/gradio-app/gradio/commit/227de352982b3dcdf9384eaa28b7e9cf09afb6e8) - Fix spaces load error. Thanks @aliabid94! + +## 4.32.0 + +### Features + +- [#8401](https://github.com/gradio-app/gradio/pull/8401) [`d078621`](https://github.com/gradio-app/gradio/commit/d078621928136c09ca902d2f37594ed887c67d2e) - Add CDN installation to JS docs. Thanks @hannahblair! +- [#8243](https://github.com/gradio-app/gradio/pull/8243) [`55f664f`](https://github.com/gradio-app/gradio/commit/55f664f2979a49acc29a73cde16c6ebdfcc91db2) - Add event listener support to render blocks. Thanks @aliabid94! +- [#8398](https://github.com/gradio-app/gradio/pull/8398) [`945ac83`](https://github.com/gradio-app/gradio/commit/945ac837e779b120790814ea6f6f81bd2712f5f8) - Improve rendering. Thanks @aliabid94! +- [#8299](https://github.com/gradio-app/gradio/pull/8299) [`ab65360`](https://github.com/gradio-app/gradio/commit/ab653608045ff9462db7ad9fe63e1c60bf20e773) - Allow JS Client to work with authenticated spaces 🍪. Thanks @hannahblair! +- [#8386](https://github.com/gradio-app/gradio/pull/8386) [`e738e26`](https://github.com/gradio-app/gradio/commit/e738e26a5d0f31c60cfd24d47c11dc9d4bc2d1a6) - Include instructions on starting from someone else's custom component repository. Thanks @freddyaboulton! +- [#8363](https://github.com/gradio-app/gradio/pull/8363) [`94a1143`](https://github.com/gradio-app/gradio/commit/94a1143686733c7fe16e204764b9a3e7240ccf02) - Add allow-credentials to preflight header. Thanks @abidlabs! +- [#8403](https://github.com/gradio-app/gradio/pull/8403) [`5efd35c`](https://github.com/gradio-app/gradio/commit/5efd35c7a06d894fdcb68898bdaaf9b457e608f1) - Editable Docs. Thanks @aliabd! +- [#8355](https://github.com/gradio-app/gradio/pull/8355) [`33e8bab`](https://github.com/gradio-app/gradio/commit/33e8babb17b2094327860bc1996ab855d6c22d46) - Enable hiding the inline category in HighlightedText with a `show_inline_category` argument. Thanks @xu-song! +- [#8409](https://github.com/gradio-app/gradio/pull/8409) [`8028c33`](https://github.com/gradio-app/gradio/commit/8028c33bbc5a324a5e9e8b28906443db28683d79) - Render decorator documentation. Thanks @aliabid94! +- [#8378](https://github.com/gradio-app/gradio/pull/8378) [`3fbf2e8`](https://github.com/gradio-app/gradio/commit/3fbf2e8e7059f3bab64b0839ab7a0f9f864f0a66) - chore: update docs.py. Thanks @eltociear! + +### Fixes + +- [#8408](https://github.com/gradio-app/gradio/pull/8408) [`e86dd01`](https://github.com/gradio-app/gradio/commit/e86dd01b6e8f7bab3d3c25b84f2ad33129138af4) - Connect heartbeat if state created in render. Also fix config cleanup bug #8407. Thanks @freddyaboulton! +- [#8258](https://github.com/gradio-app/gradio/pull/8258) [`1f8e5c4`](https://github.com/gradio-app/gradio/commit/1f8e5c44e054b943052d8f24d044696ddfd01a54) - Improve URL handling in JS Client. Thanks @hannahblair! +- [#8376](https://github.com/gradio-app/gradio/pull/8376) [`aebd2e9`](https://github.com/gradio-app/gradio/commit/aebd2e952e3a19633b9b95a49f51664bc8a0c20d) - Model3D right-handed coordinate system. Thanks @dylanebert! +- [#8381](https://github.com/gradio-app/gradio/pull/8381) [`24ab22d`](https://github.com/gradio-app/gradio/commit/24ab22d26179ee3d1e5f4957067ebf8722ef2e6f) - Fix encoding error. Thanks @xu-song! +- [#8364](https://github.com/gradio-app/gradio/pull/8364) [`6a1b58c`](https://github.com/gradio-app/gradio/commit/6a1b58cf3e4796ccb695db5baae190c894b30df0) - Add `--table-text-color` var to fix body text in `Examples`. Thanks @hannahblair! +- [#8284](https://github.com/gradio-app/gradio/pull/8284) [`2d705bc`](https://github.com/gradio-app/gradio/commit/2d705bcf7475eb46822358fed21dc081a800a73d) - Add body color to `gr.Accordion`. Thanks @hannahblair! +- [#8371](https://github.com/gradio-app/gradio/pull/8371) [`a373b0e`](https://github.com/gradio-app/gradio/commit/a373b0edd36613a9a6a25a1a2893edd6533a7291) - Set orig_name in python client file uploads. Thanks @freddyaboulton! +- [#8385](https://github.com/gradio-app/gradio/pull/8385) [`97ac79b`](https://github.com/gradio-app/gradio/commit/97ac79bf563f8423604a9b0e91eac4df6833f4fc) - Fix bug in reload mode equality check. Better equality conversion for state variables. Thanks @freddyaboulton! +- [#8372](https://github.com/gradio-app/gradio/pull/8372) [`89d6a17`](https://github.com/gradio-app/gradio/commit/89d6a176b39f713dd8144a1e6df1419303412ed2) - Change z-index of status tracker. Thanks @hannahblair! + +## 4.31.5 + +### Features + +- [#8311](https://github.com/gradio-app/gradio/pull/8311) [`35905c5`](https://github.com/gradio-app/gradio/commit/35905c5c8f7acbe669486ac8f57b6955328e4783) - Cleanup markdown styling. Thanks @aliabid94! + +### Fixes + +- [#8339](https://github.com/gradio-app/gradio/pull/8339) [`4dc7fa7`](https://github.com/gradio-app/gradio/commit/4dc7fa7cd7f514224686b891299e46533edffd66) - Fix Chatbot, Dataframe, Markdown custom components. Thanks @freddyaboulton! +- [#8336](https://github.com/gradio-app/gradio/pull/8336) [`f138b41`](https://github.com/gradio-app/gradio/commit/f138b4159ea364204108de14f7597674fcc9469e) - Use Any if JsonValue cannot be imported. Thanks @freddyaboulton! +- [#8334](https://github.com/gradio-app/gradio/pull/8334) [`0236b1a`](https://github.com/gradio-app/gradio/commit/0236b1ab12149ddd11b03e1382ceb09d19ac0d48) - fix: prevent triggering gr.File.select on delete. Thanks @gtm-nayan! +- [#8341](https://github.com/gradio-app/gradio/pull/8341) [`82ba397`](https://github.com/gradio-app/gradio/commit/82ba3975921760c727875948fb7275c2f5f9ea2b) - add missing orig_name (follow up to #8334). Thanks @gtm-nayan! +- [#8322](https://github.com/gradio-app/gradio/pull/8322) [`47012a0`](https://github.com/gradio-app/gradio/commit/47012a0c4e3e8a80fcae620aaf08b16ceb343cde) - ensure the client correctly handles all binary data. Thanks @Saghen! + +## 4.31.4 + +### Features + +- [#8318](https://github.com/gradio-app/gradio/pull/8318) [`9e31697`](https://github.com/gradio-app/gradio/commit/9e31697d9435ea926a194262d9e845624df0e74e) - Added image-to-image diffusers pipeline. Thanks @cswamy! + +### Fixes + +- [#8247](https://github.com/gradio-app/gradio/pull/8247) [`8f46556`](https://github.com/gradio-app/gradio/commit/8f46556b38e35cffbadac74ff80445dceea3bcf5) - Fix api recorder. Thanks @abidlabs! + +## 4.31.3 + +### Features + +- [#8229](https://github.com/gradio-app/gradio/pull/8229) [`7c81897`](https://github.com/gradio-app/gradio/commit/7c81897076ddcd0bb05e0e4ffec35bb9a986d330) - chore(deps): update dependency esbuild to ^0.21.0. Thanks @renovate! +- [#8279](https://github.com/gradio-app/gradio/pull/8279) [`4350215`](https://github.com/gradio-app/gradio/commit/4350215348981aba6dea473884b047f096dcdf0f) - Link to troubleshooting guide in the custom component loading status. Thanks @freddyaboulton! + +### Fixes + +- [#8292](https://github.com/gradio-app/gradio/pull/8292) [`ee1e294`](https://github.com/gradio-app/gradio/commit/ee1e2942e0a1ae84a08a05464e41c8108a03fa9c) - Ensure JSON component outputs handled properly in postprocess. Thanks @freddyaboulton! +- [#8296](https://github.com/gradio-app/gradio/pull/8296) [`929d216`](https://github.com/gradio-app/gradio/commit/929d216d49aa05614bc83f0761cf7b1cd803d8fe) - always create a jwt when connecting to a space if a hf_token is present. Thanks @pngwn! + +## 4.31.2 + +### Fixes + +- [#8285](https://github.com/gradio-app/gradio/pull/8285) [`7d9d8ea`](https://github.com/gradio-app/gradio/commit/7d9d8eab50d36cbecbb84c6a0f3cc1bca7215604) - use the correct query param to pass the jwt to the heartbeat event. Thanks @pngwn! + +## 4.31.1 + +### Features + +- [#8264](https://github.com/gradio-app/gradio/pull/8264) [`a9e1a8a`](https://github.com/gradio-app/gradio/commit/a9e1a8ac5633c5336fea1c63d7f66a9883e7e6e1) - Make exceptions in the Client more specific. Thanks @abidlabs! +- [#8263](https://github.com/gradio-app/gradio/pull/8263) [`de52f0e`](https://github.com/gradio-app/gradio/commit/de52f0e5af75688713e4e96a195208576a4d64ad) - Reduce the analytics that are collected in Gradio. Thanks @abidlabs! + +### Fixes + +- [#8276](https://github.com/gradio-app/gradio/pull/8276) [`0bf3d1a`](https://github.com/gradio-app/gradio/commit/0bf3d1a992db2753c1a55452b569027190f26ef6) - Fix bug where client could not connect to apps that had self signed certificates. Thanks @freddyaboulton! +- [#8260](https://github.com/gradio-app/gradio/pull/8260) [`7e976fd`](https://github.com/gradio-app/gradio/commit/7e976fd9bf5273841915b3722d3eadfcf6c11fc3) - Send ProcessCompleted message when job is cancelled. Thanks @freddyaboulton! +- [#8261](https://github.com/gradio-app/gradio/pull/8261) [`719d596`](https://github.com/gradio-app/gradio/commit/719d5962bb7018412f073b55eb3b62d8b4e02d63) - Fix bug where status tracker was the target of pointer events. Thanks @freddyaboulton! +- [#8272](https://github.com/gradio-app/gradio/pull/8272) [`fbf4edd`](https://github.com/gradio-app/gradio/commit/fbf4edde7c896cdf4c903463e44c31ed96111b3c) - ensure client works for private spaces. Thanks @pngwn! + +## 4.31.0 + +### Features + +- [#8226](https://github.com/gradio-app/gradio/pull/8226) [`892181b`](https://github.com/gradio-app/gradio/commit/892181b4fdb13dd6048a620dd985d47bc3c26ed7) - chore(deps): update dependency @types/prismjs to v1.26.4. Thanks @renovate! +- [#8254](https://github.com/gradio-app/gradio/pull/8254) [`0a6f0a7`](https://github.com/gradio-app/gradio/commit/0a6f0a7e02199cb4094d796aafa39207d718ad22) - Fix custom component detection logic in analytics. Thanks @freddyaboulton! +- [#8244](https://github.com/gradio-app/gradio/pull/8244) [`52dac63`](https://github.com/gradio-app/gradio/commit/52dac637a379ace892e3652a411392927e46613f) - Adds `examples_per_page` to `gr.ChatInterface` and allows `clear_btn` in `gr.Interface` to be hidden. Thanks @abidlabs! +- [#8219](https://github.com/gradio-app/gradio/pull/8219) [`32d915a`](https://github.com/gradio-app/gradio/commit/32d915aad5c6d9b2f5fdcafef39e246fc1b2d852) - Apply clean_indent() to the file contents specified with tags. Thanks @whitphx! +- [#8110](https://github.com/gradio-app/gradio/pull/8110) [`5436031`](https://github.com/gradio-app/gradio/commit/5436031f92c1596282eb64e1e74d555f279e9697) - Render decorator 2. Thanks @aliabid94! +- [#8197](https://github.com/gradio-app/gradio/pull/8197) [`e09b4e8`](https://github.com/gradio-app/gradio/commit/e09b4e8216b970bc1b142a0f08e7d190b954eb35) - Add support for passing keyword args to `data` in JS client. Thanks @hannahblair! +- [#8236](https://github.com/gradio-app/gradio/pull/8236) [`bf909bd`](https://github.com/gradio-app/gradio/commit/bf909bd14532a27e119fb401003a7d94c0618ffb) - Change upload icon for MultimodalTextbox. Thanks @dawoodkhan82! + +### Fixes + +- [#8245](https://github.com/gradio-app/gradio/pull/8245) [`c562a3d`](https://github.com/gradio-app/gradio/commit/c562a3d9a440c8f94ca070bd07b8d4121d6ab7b3) - Cancel server progress from the python client. Thanks @freddyaboulton! +- [#8242](https://github.com/gradio-app/gradio/pull/8242) [`05fe491`](https://github.com/gradio-app/gradio/commit/05fe4918c0e24677a1ff86fbca4cd6f4d4ef974c) - Allow Spaces with `.success()` to be `gr.load`-ed. Thanks @abidlabs! +- [#8252](https://github.com/gradio-app/gradio/pull/8252) [`22df61a`](https://github.com/gradio-app/gradio/commit/22df61a26adf8023f6dd49c051979990e8d3879a) - Client node fix. Thanks @pngwn! +- [#8227](https://github.com/gradio-app/gradio/pull/8227) [`9ece050`](https://github.com/gradio-app/gradio/commit/9ece050a702618d3260f80506f3405a4a6dabbb9) - Fix bug where updating a component's value in reload mode would not be shown in UI. Thanks @freddyaboulton! + +## 4.29.0 + +### Highlights + +#### Support custom components in gr.load ([#8200](https://github.com/gradio-app/gradio/pull/8200) [`72039be`](https://github.com/gradio-app/gradio/commit/72039be93acda856d92ceac7f21f1ec1a054fae2)) + +It is now possible to load a demo with a custom component with `gr.load`. + +The custom component must be installed in your system and imported in your python session. + +```python +import gradio as gr +import gradio_pdf + +demo = gr.load("freddyaboulton/gradiopdf", src="spaces") + +if __name__ == "__main__": + demo.launch() +``` + +image + + Thanks @freddyaboulton! + +### Features + +- [#8121](https://github.com/gradio-app/gradio/pull/8121) [`f5b710c`](https://github.com/gradio-app/gradio/commit/f5b710c919b0ce604ea955f0d5f4faa91095ca4a) - chore(deps): update dependency eslint to v9. Thanks @renovate! +- [#8174](https://github.com/gradio-app/gradio/pull/8174) [`a81e369`](https://github.com/gradio-app/gradio/commit/a81e36967c0973012e90ec7cf03b99cf3fea88ec) - Remove hatch installation in js/app/package.json which is no longer needed. Thanks @whitphx! +- [#8209](https://github.com/gradio-app/gradio/pull/8209) [`b9afe93`](https://github.com/gradio-app/gradio/commit/b9afe93915401df5bd6737c89395c2477acfa585) - Rename `eventSource_Factory` and `fetch_implementation`. Thanks @hannahblair! +- [#8109](https://github.com/gradio-app/gradio/pull/8109) [`bed2f82`](https://github.com/gradio-app/gradio/commit/bed2f82e2297b50f7b59423a3de05af0b9910724) - Implement JS Client tests. Thanks @hannahblair! +- [#8106](https://github.com/gradio-app/gradio/pull/8106) [`d0a759f`](https://github.com/gradio-app/gradio/commit/d0a759f3df8b564e2f21421d448b24fecf287306) - Pass Error status in /dev/reload stream. Thanks @freddyaboulton! +- [#7855](https://github.com/gradio-app/gradio/pull/7855) [`611c927`](https://github.com/gradio-app/gradio/commit/611c9273a301e925b5aad93a19272dccd53c39fa) - Lite wheel optimization. Thanks @whitphx! +- [#8211](https://github.com/gradio-app/gradio/pull/8211) [`91b5cd6`](https://github.com/gradio-app/gradio/commit/91b5cd6132fb8903c92f70fce0800324836a1fc3) - remove redundant event source logic. Thanks @hannahblair! +- [#8127](https://github.com/gradio-app/gradio/pull/8127) [`24b2286`](https://github.com/gradio-app/gradio/commit/24b2286a22ed247b86ee299487174c8cea2988fe) - allow the canvas size to be set on the `ImageEditor`. Thanks @pngwn! +- [#8205](https://github.com/gradio-app/gradio/pull/8205) [`cfc272f`](https://github.com/gradio-app/gradio/commit/cfc272ff7910ffcce64a7cc9d560a020f0f6ac7d) - Set the show_api flag on Lite. Thanks @whitphx! +- [#8052](https://github.com/gradio-app/gradio/pull/8052) [`1435d1d`](https://github.com/gradio-app/gradio/commit/1435d1d2dcfd1accf742726396f2213a54ae0837) - Extend Interface.from_pipeline() to support Transformers.js.py pipelines on Lite. Thanks @whitphx! +- [#8189](https://github.com/gradio-app/gradio/pull/8189) [`68dcae5`](https://github.com/gradio-app/gradio/commit/68dcae512c0fb699304446c3b1ae2afaba1a63d2) - Use workspace version for code in _website. Thanks @aliabd! + +### Fixes + +- [#8179](https://github.com/gradio-app/gradio/pull/8179) [`6a218b4`](https://github.com/gradio-app/gradio/commit/6a218b4148095aaa0c58d8c20973ba01c8764fc2) - rework upload to be a class method + pass client into each component. Thanks @pngwn! +- [#8181](https://github.com/gradio-app/gradio/pull/8181) [`cf52ca6`](https://github.com/gradio-app/gradio/commit/cf52ca6a51320ece97f009a177792840b5fbc785) - Ensure connectivity to private HF spaces with SSE protocol. Thanks @hannahblair! +- [#8169](https://github.com/gradio-app/gradio/pull/8169) [`3a6f1a5`](https://github.com/gradio-app/gradio/commit/3a6f1a50b263e0a733f609a08019fc4d05480e1a) - Only connect to heartbeat if needed. Thanks @freddyaboulton! +- [#8118](https://github.com/gradio-app/gradio/pull/8118) [`7aca673`](https://github.com/gradio-app/gradio/commit/7aca673b38a087533524b2fd8dd3a03e0e4bacfe) - Add eventsource polyfill for Node.js and browser environments. Thanks @hannahblair! +- [#8158](https://github.com/gradio-app/gradio/pull/8158) [`5671ff1`](https://github.com/gradio-app/gradio/commit/5671ff129a3ad488b307f71fffe9566bd4f7f52a) - fix: handling SIGINT correctly in reload.py, single entrance of block_thread in blocks.py. Thanks @Tiger3018! +- [#8180](https://github.com/gradio-app/gradio/pull/8180) [`449d0e6`](https://github.com/gradio-app/gradio/commit/449d0e6e145686b4c6cc2cf80bbcd9acded603dd) - Refactor analytics to not use api.gradio.app. Thanks @freddyaboulton! +- [#8182](https://github.com/gradio-app/gradio/pull/8182) [`39791eb`](https://github.com/gradio-app/gradio/commit/39791eb186d3a4ce82c8c27979a28311c37a4067) - Convert sse calls in client from async to sync. Thanks @abidlabs! +- [#8170](https://github.com/gradio-app/gradio/pull/8170) [`08b4e61`](https://github.com/gradio-app/gradio/commit/08b4e6172340952460ae4947ff45c4bbef9ec285) - Add ETag to `/custom_component` route to control browser caching. Thanks @freddyaboulton! +- [#8194](https://github.com/gradio-app/gradio/pull/8194) [`2471f79`](https://github.com/gradio-app/gradio/commit/2471f79527ebae0838eabedd2a4adab6c7667608) - run python reload only if python file changed. Thanks @jameszhou02! +- [#8204](https://github.com/gradio-app/gradio/pull/8204) [`376dfaa`](https://github.com/gradio-app/gradio/commit/376dfaaa808866cc114eff3cf1635746c3c50c5d) - Specify the fastapi version on Lite to avoid ujson installation which is not available on Pyodide yet. Thanks @whitphx! + +## 4.28.3 + +### Fixes + +- [#8144](https://github.com/gradio-app/gradio/pull/8144) [`7ba2780`](https://github.com/gradio-app/gradio/commit/7ba2780dc096a21f790695bf9368d2b39a79e2fa) - fix missing dependencies for `@gradio/preview`. Thanks @pngwn! + +## 4.28.2 + +### Fixes + +- [#8142](https://github.com/gradio-app/gradio/pull/8142) [`44eb8ac`](https://github.com/gradio-app/gradio/commit/44eb8ac6c315ffe4f0e3f544b0664c93813b6f68) - ensure @gradio/preview dist files are published. Thanks @pngwn! + +## 4.28.1 + +### Fixes + +- [#8140](https://github.com/gradio-app/gradio/pull/8140) [`0d41b22`](https://github.com/gradio-app/gradio/commit/0d41b221dc69eb543396504a276b84a485c98901) - fix publish build. Thanks @pngwn! + +## 4.28.0 + +### Highlights + +#### Setting File Upload Limits ([#7909](https://github.com/gradio-app/gradio/pull/7909) [`2afca65`](https://github.com/gradio-app/gradio/commit/2afca6541912b37dc84f447c7ad4af21607d7c72)) + +We have added a `max_file_size` size parameter to `launch()` that limits to size of files uploaded to the server. This limit applies to each individual file. This parameter can be specified as a string or an integer (corresponding to the size in bytes). + +The following code snippet sets a max file size of 5 megabytes. + +```python +import gradio as gr + +demo = gr.Interface(lambda x: x, "image", "image") + +demo.launch(max_file_size="5mb") +# or +demo.launch(max_file_size=5 * gr.FileSize.MB) +``` + +![max_file_size_upload](https://github.com/gradio-app/gradio/assets/41651716/7547330c-a082-4901-a291-3f150a197e45) + + +#### Error states can now be cleared + +When a component encounters an error, the error state shown in the UI can now be cleared by clicking on the `x` icon in the top right of the component. This applies to all types of errors, whether it's raised in the UI or the server. + +![error_modal_calculator](https://github.com/gradio-app/gradio/assets/41651716/16cb071c-accd-45a6-9c18-0dea27d4bd98) + + Thanks @freddyaboulton! + +### Features + +- [#8092](https://github.com/gradio-app/gradio/pull/8092) [`659d3c5`](https://github.com/gradio-app/gradio/commit/659d3c51ae8591b8c90879f17b2b10d1d79cb331) - chore(deps): update dependency iframe-resizer to v4.3.11. Thanks @renovate! +- [#8067](https://github.com/gradio-app/gradio/pull/8067) [`0fb058e`](https://github.com/gradio-app/gradio/commit/0fb058ec232bfaceb24f1515d16a41fa432a1ee8) - Fix the Lite custom element parser so it doesn't add the .code option when the entrypoint file is already specified. Thanks @whitphx! +- [#8051](https://github.com/gradio-app/gradio/pull/8051) [`d665f40`](https://github.com/gradio-app/gradio/commit/d665f409704b4938d57bee6476a2d000617643c8) - Fix custom JS function caller to concat the outputs of a dep to the inputs as the arguments. Thanks @whitphx! +- [#8056](https://github.com/gradio-app/gradio/pull/8056) [`2e469a5`](https://github.com/gradio-app/gradio/commit/2e469a5f99e52a5011a010f46e47dde7bb0c7140) - Using keys to preserve values between reloads. Thanks @aliabid94! +- [#7646](https://github.com/gradio-app/gradio/pull/7646) [`450b8cc`](https://github.com/gradio-app/gradio/commit/450b8cc898f130f15caa3742f65c17b9f7a8f398) - Refactor JS Client. Thanks @hannahblair! +- [#8115](https://github.com/gradio-app/gradio/pull/8115) [`595ebf7`](https://github.com/gradio-app/gradio/commit/595ebf74c5e09ad90fca0ca8a9a312f161a981aa) - Cache an error from app.submit() and show it on frontend. Thanks @whitphx! +- [#8084](https://github.com/gradio-app/gradio/pull/8084) [`1c99570`](https://github.com/gradio-app/gradio/commit/1c99570f3cbf28f020d6e92527754dd4cae3bcdb) - Adjust `View Api` container `z-index`. Thanks @hannahblair! +- [#8107](https://github.com/gradio-app/gradio/pull/8107) [`cbf2d4e`](https://github.com/gradio-app/gradio/commit/cbf2d4ec51a2e0713c53ff678d0bc70117442ec0) - fix typo from #8105. Thanks @abidlabs! +- [#8100](https://github.com/gradio-app/gradio/pull/8100) [`cbdfbdf`](https://github.com/gradio-app/gradio/commit/cbdfbdfc973fa67665911fb5d8cb005a025b0e58) - upgrade `ruff` test dependency to `ruff==0.4.1`. Thanks @abidlabs! +- [#6787](https://github.com/gradio-app/gradio/pull/6787) [`15a7106`](https://github.com/gradio-app/gradio/commit/15a7106a36874310f5ace9cf6e32744069ca1cce) - allow custom component authors to provide custom vite plugins and svelte preprocessors. Thanks @pngwn! +- [#8080](https://github.com/gradio-app/gradio/pull/8080) [`568eeb2`](https://github.com/gradio-app/gradio/commit/568eeb26a90182519f491df34b1bc75ac67a7313) - Fix `gr.Interface.from_pipeline()` to allow audio uploads and to display classification labels correctly. Thanks @whitphx! +- [#8040](https://github.com/gradio-app/gradio/pull/8040) [`32cfa61`](https://github.com/gradio-app/gradio/commit/32cfa614d641b2358ea5d679b30497d1dfbee533) - Remove auto-created files from `gradio cc publish` and other tweaks. Thanks @freddyaboulton! +- [#8117](https://github.com/gradio-app/gradio/pull/8117) [`6864035`](https://github.com/gradio-app/gradio/commit/68640358fe186fe5822a72b7a50d9df5020944eb) - Add session hash to gr request. Thanks @freddyaboulton! +- [#8061](https://github.com/gradio-app/gradio/pull/8061) [`17e83c9`](https://github.com/gradio-app/gradio/commit/17e83c958ebb35b3e122ca486067d1bd5ce33a22) - Docs Reorg and Intro Page. Thanks @aliabd! +- [#8065](https://github.com/gradio-app/gradio/pull/8065) [`5bf61cb`](https://github.com/gradio-app/gradio/commit/5bf61cb15b7a1f8af12c87ae710df07099b5e460) - Hide the scroll bar in WaveformControls when it's not necessary. Thanks @whitphx! +- [#8130](https://github.com/gradio-app/gradio/pull/8130) [`0efd72e`](https://github.com/gradio-app/gradio/commit/0efd72e6085ebf5ec9989b659e0d2369d5a692f6) - Add Analytics for custom components. Thanks @freddyaboulton! +- [#8087](https://github.com/gradio-app/gradio/pull/8087) [`b50a67d`](https://github.com/gradio-app/gradio/commit/b50a67defe1c1ecc0dac324f6bb7aad4599e1271) - Fix `GRADIO_CACHE_EXAMPLES` environment variable to only take effect if `fn` and `outputs` parameters are provided. Thanks @abidlabs! +- [#8093](https://github.com/gradio-app/gradio/pull/8093) [`ac30e07`](https://github.com/gradio-app/gradio/commit/ac30e07f9266f84088a0b8677a259a5b64c037c5) - [HF OAuth] Logout user if oauth token has expired. Thanks @Wauplin! +- [#8063](https://github.com/gradio-app/gradio/pull/8063) [`72f4ca8`](https://github.com/gradio-app/gradio/commit/72f4ca88ab569aae47941b3fb0609e57f2e13a27) - Fix `gr.Label` styling and a11y markup. Thanks @whitphx! +- [#8105](https://github.com/gradio-app/gradio/pull/8105) [`006fa3c`](https://github.com/gradio-app/gradio/commit/006fa3c6d03f4bcb76e6628cc2052ed18dabb988) - improve the documentation for `js` parameter in `Blocks`, `Interface`, `ChatInterface`. Thanks @abidlabs! +- [#8054](https://github.com/gradio-app/gradio/pull/8054) [`176a8a4`](https://github.com/gradio-app/gradio/commit/176a8a4d713246383c760d86fcb964298ee68c6b) - Fix Label component's value change detection to avoid infinite loop dispatching the change event. Thanks @whitphx! +- [#8030](https://github.com/gradio-app/gradio/pull/8030) [`91a7a31`](https://github.com/gradio-app/gradio/commit/91a7a31cd15c6fb7b249d124b874d3e63831d09b) - Store configs per session in the backend. Thanks @aliabid94! + +### Fixes + +- [#8077](https://github.com/gradio-app/gradio/pull/8077) [`d7461aa`](https://github.com/gradio-app/gradio/commit/d7461aab51b08bc899048230c0f79cf38a1b5ff2) - Fix an encoding issue in gradio/components/code.py. Thanks @3210448723! +- [#8075](https://github.com/gradio-app/gradio/pull/8075) [`5d9db89`](https://github.com/gradio-app/gradio/commit/5d9db89aa6a377d7b56b3075a5d6b73f767b319f) - Fix causing Hot Reload (#8070). Thanks @zolgear! +- [#8041](https://github.com/gradio-app/gradio/pull/8041) [`937c858`](https://github.com/gradio-app/gradio/commit/937c8583714216e926606b251bc9225271bdc5a7) - Use orjson to serialize dict including np.array. Thanks @whitphx! +- [#8097](https://github.com/gradio-app/gradio/pull/8097) [`487db7b`](https://github.com/gradio-app/gradio/commit/487db7b5d57e1a1350494efdf37c121cbf627780) - Respect `auth_dependency` parameter in `launch()`. Thanks @abidlabs! +- [#8133](https://github.com/gradio-app/gradio/pull/8133) [`0a42e96`](https://github.com/gradio-app/gradio/commit/0a42e96537ab11b4dc441c5c2780938be7faf464) - Allow users to template the `ImageEditor` when using custom components. Thanks @pngwn! +- [#8066](https://github.com/gradio-app/gradio/pull/8066) [`624f9b9`](https://github.com/gradio-app/gradio/commit/624f9b9477f74a581a6c14119234f9efdfcda398) - make gradio dev tools a local dependency rather than bundling. Thanks @pngwn! + +## 4.27.0 + +### Highlights + +#### Refreshed `ImageEditor` + +The `ImageEditor` component has been refreshed to make it more user-friendly and reliable. + +This release contains a host of improvements to the `ImageEditor` component, that will be of particular interest to those building real-time image editing applications or complex image processing pipelines: + +- Cleaner and more compact interface. +- New option to hide the layer controls for a more minimal UI. +- Improved stability when updating the sources programmatically. +- Improved support for `input`, `upload`, `change` and `apply` events. +- Support for realtime drawing via the `change` event. +- Many bug fixes! + +![output](https://github.com/gradio-app/gradio/assets/12937446/826dde7d-942b-4e1f-9a3e-aa4dc1f74402) + +### Features + +- [#7998](https://github.com/gradio-app/gradio/pull/7998) [`06bdf0e`](https://github.com/gradio-app/gradio/commit/06bdf0eddf59bf79b6b4d1268fc9290955ef2490) - Restore chatbot formatting. Thanks @aliabid94! +- [#7986](https://github.com/gradio-app/gradio/pull/7986) [`05f935c`](https://github.com/gradio-app/gradio/commit/05f935c8d8e5bb7133affc50da8443cad0d4986d) - GRADIO_SHARE Environment Variable. Thanks @cocktailpeanut! +- [#8062](https://github.com/gradio-app/gradio/pull/8062) [`cecd6e4`](https://github.com/gradio-app/gradio/commit/cecd6e4c4accb3ef220284dc54a87510b3503ec9) - Update dependency iframe-resizer to v4.3.10. Thanks @renovate! +- [#8042](https://github.com/gradio-app/gradio/pull/8042) [`92139f3`](https://github.com/gradio-app/gradio/commit/92139f3d7d6b832b649ff1f6c10c87e6fb522cde) - refresh the `ImageEditor` UI. Thanks @pngwn! +- [#8000](https://github.com/gradio-app/gradio/pull/8000) [`a0c2848`](https://github.com/gradio-app/gradio/commit/a0c2848ab510623b29e215f543e935e275ca35c6) - Fix internal server error in HF OAuth workflow. Thanks @Wauplin! +- [#7887](https://github.com/gradio-app/gradio/pull/7887) [`5f0248e`](https://github.com/gradio-app/gradio/commit/5f0248e797af087c7fd0ad35ea7f2bd778a7cc41) - When authenticating with HF OAuth, stay in same tab. Thanks @Wauplin! +- [#8059](https://github.com/gradio-app/gradio/pull/8059) [`074ce38`](https://github.com/gradio-app/gradio/commit/074ce3805ada6ba829c17da3af5f186d9f5f9865) - ensure the `ImageEditor` works correctly with layers and `change` events. Thanks @pngwn! +- [#7845](https://github.com/gradio-app/gradio/pull/7845) [`dbb7373`](https://github.com/gradio-app/gradio/commit/dbb7373dde69d4ed2741942b5a1898f8620cec24) - ensure `ImageEditor` events work as expected. Thanks @pngwn! +- [#7975](https://github.com/gradio-app/gradio/pull/7975) [`c9ddd84`](https://github.com/gradio-app/gradio/commit/c9ddd847d6c57d5efc4e887180d219f2a0b5b98d) - Update the Lite custom element parser. Thanks @whitphx! +- [#8012](https://github.com/gradio-app/gradio/pull/8012) [`299c87c`](https://github.com/gradio-app/gradio/commit/299c87c47717b42387ac323b4c7f6fcab9097b1c) - Document that show_copy_button in gr.Textbox is not visible when show_label=False. Thanks @lappemic! + +### Fixes + +- [#8025](https://github.com/gradio-app/gradio/pull/8025) [`55ef4a5`](https://github.com/gradio-app/gradio/commit/55ef4a52c3d600344d8cf1a667f3f352c52c8e57) - Fixes Chatbot Image Sizing. Thanks @dawoodkhan82! +- [#8014](https://github.com/gradio-app/gradio/pull/8014) [`e10ec6a`](https://github.com/gradio-app/gradio/commit/e10ec6a6124cecb2454266609b951d4768675e50) - Fix multimode interface double box on file upload. Thanks @TALLEC-Scott! +- [#8028](https://github.com/gradio-app/gradio/pull/8028) [`6fafce0`](https://github.com/gradio-app/gradio/commit/6fafce06704ab8f2cd5fe6fbdb58b842e144e44d) - ensure maps are correctly shallow cloned when updating state. Thanks @pngwn! +- [#7974](https://github.com/gradio-app/gradio/pull/7974) [`79e0aa8`](https://github.com/gradio-app/gradio/commit/79e0aa81c94e755faa6e85d76ac5d5a666313e6a) - Fix heartbeat in the js client to be Lite compatible. Thanks @whitphx! +- [#8002](https://github.com/gradio-app/gradio/pull/8002) [`8903415`](https://github.com/gradio-app/gradio/commit/8903415e49b1526d31ff454b2235ea238e319c2c) - Add show_progress prop to Upload Component to bring back upload progress animation. Thanks @freddyaboulton! +- [#8046](https://github.com/gradio-app/gradio/pull/8046) [`d6c289b`](https://github.com/gradio-app/gradio/commit/d6c289b34668f0011676737ee8edb4cb62b0620a) - round [x, y, w, h] before cropping to avoid unexpected interpolation on pixel values. Thanks @ernestchu! +- [#8011](https://github.com/gradio-app/gradio/pull/8011) [`f17d1a0`](https://github.com/gradio-app/gradio/commit/f17d1a0a6fa61869dc78fb12fb153f6b7abaa5f5) - Add an explicit dependency of `urllib3~=2.0` and update `processing_utils.save_url_to_cache` to use `urllib3` for Lite support. Thanks @whitphx! +- [#7981](https://github.com/gradio-app/gradio/pull/7981) [`c1df2f8`](https://github.com/gradio-app/gradio/commit/c1df2f818ce285a8e7871d43b76c4959beb00956) - Fix example loading for custom components. Thanks @freddyaboulton! +- [#8026](https://github.com/gradio-app/gradio/pull/8026) [`522daf7`](https://github.com/gradio-app/gradio/commit/522daf787a8427b92ed769ccea3c71a490cbca29) - Patch `async_save_url_to_cache` for Lite. Thanks @whitphx! +- [#7959](https://github.com/gradio-app/gradio/pull/7959) [`2a5cb97`](https://github.com/gradio-app/gradio/commit/2a5cb978240960fd8b150a1eae6ae8328a5c0c59) - ensure `ImageEditor` always draws at the correct position. Thanks @hrrbay! +- [#8050](https://github.com/gradio-app/gradio/pull/8050) [`0424c75`](https://github.com/gradio-app/gradio/commit/0424c759d8a790529406229c52f47cb469e78d3e) - Update `typer` to drop `[all]` as it is no longer needed. Thanks @joennlae! + +## 4.26.0 + +### Features + +- [#7811](https://github.com/gradio-app/gradio/pull/7811) [`b43055b`](https://github.com/gradio-app/gradio/commit/b43055b297dfe1aa56fda4cd722d878f7297a1b5) - Lite playground design changes. Thanks @aliabd! +- [#7850](https://github.com/gradio-app/gradio/pull/7850) [`2bae1cf`](https://github.com/gradio-app/gradio/commit/2bae1cfbd41ed8ae3eea031a64899611a22a1821) - Adds an "API Recorder" to the view API page, some internal methods have been made async. Thanks @abidlabs! +- [#7936](https://github.com/gradio-app/gradio/pull/7936) [`b165193`](https://github.com/gradio-app/gradio/commit/b165193902985b77a732ed703423ebebeaf0da27) - Restore Markdown formatting for Chatbots, MarkdownCode. Thanks @aliabid94! +- [#7912](https://github.com/gradio-app/gradio/pull/7912) [`a4782f7`](https://github.com/gradio-app/gradio/commit/a4782f7a09ed69ebfa9953b029bd4ffa1c60220a) - Allow displaying gr.Code examples by their filename if value is a tuple. Thanks @freddyaboulton! +- [#7938](https://github.com/gradio-app/gradio/pull/7938) [`8250a1a`](https://github.com/gradio-app/gradio/commit/8250a1a0dfb8219943beef500ddf29e0fcc4e38d) - Handle the case of multiple headers when constructing root url. Thanks @abidlabs! +- [#7932](https://github.com/gradio-app/gradio/pull/7932) [`b78129d`](https://github.com/gradio-app/gradio/commit/b78129d90fc800e6987226114adc2f062dc403ec) - Use asyncio.Event to stop stream in heartbeat route. Thanks @freddyaboulton! +- [#7961](https://github.com/gradio-app/gradio/pull/7961) [`eae97c2`](https://github.com/gradio-app/gradio/commit/eae97c29ce8bb81670e1ee0533efa02afa38cc23) - Fix task bug in python 3.9. Thanks @freddyaboulton! +- [#7967](https://github.com/gradio-app/gradio/pull/7967) [`1a7851c`](https://github.com/gradio-app/gradio/commit/1a7851c5125b7dd2bccf9f3f1ead38be5da2c9ad) - Fix handling of single font name in theme. Thanks @sd109! + +### Fixes + +- [#7963](https://github.com/gradio-app/gradio/pull/7963) [`1eb4c20`](https://github.com/gradio-app/gradio/commit/1eb4c2012065c678d722477f3555ec45a9e78c14) - ensure kwargs are always in sync across the whole application. Thanks @pngwn! +- [#7916](https://github.com/gradio-app/gradio/pull/7916) [`7c9a964`](https://github.com/gradio-app/gradio/commit/7c9a964ac6b9c2231c7439758e87b4fac56db99f) - Fix programmatic tab selection. Thanks @aliabid94! +- [#7754](https://github.com/gradio-app/gradio/pull/7754) [`057d171`](https://github.com/gradio-app/gradio/commit/057d171c717737a522b55b0d66962f9c62dd87c3) - Correctly handle device selection in `Image` and `ImageEditor`. Thanks @hannahblair! +- [#7756](https://github.com/gradio-app/gradio/pull/7756) [`b729f10`](https://github.com/gradio-app/gradio/commit/b729f10321b571e7de418596d1cf605773b0b8e6) - Bugfix: Fix color and size keys in theme builder app. Thanks @shubhamofbce! +- [#7918](https://github.com/gradio-app/gradio/pull/7918) [`be46ab1`](https://github.com/gradio-app/gradio/commit/be46ab1213b32a40e4ac1c399499d69eaf6ec0f1) - ensure entire dropdown is clickable. Thanks @dawoodkhan82! +- [#7966](https://github.com/gradio-app/gradio/pull/7966) [`bad3836`](https://github.com/gradio-app/gradio/commit/bad383645ec659433086b174f1ec5a7e2669d43b) - Adding hint `list[list]` for example parameter. Thanks @WH-Yoshi! +- [#7817](https://github.com/gradio-app/gradio/pull/7817) [`867ff16`](https://github.com/gradio-app/gradio/commit/867ff16cd47ceb5bbf076503538a262b6fe64638) - Trigger the "clear" event of Image Editor. Thanks @uebian! +- [#7935](https://github.com/gradio-app/gradio/pull/7935) [`919afff`](https://github.com/gradio-app/gradio/commit/919afffcee87bee25a6905c488484936df92189d) - Adds a Guide on deploying Gradio apps with Docker. Thanks @abidlabs! +- [#7915](https://github.com/gradio-app/gradio/pull/7915) [`efd9524`](https://github.com/gradio-app/gradio/commit/efd95245081f5657b1d13f34038205fc8791c1f7) - Fix gr.CheckboxGroup change event. Thanks @freddyaboulton! +- [#7926](https://github.com/gradio-app/gradio/pull/7926) [`9666854`](https://github.com/gradio-app/gradio/commit/966685479078f59430b3bced7e6068eb8157c003) - Fixes streaming event race condition. Thanks @aliabid94! + +## 4.25.0 + +### Highlights + +#### Automatically delete state after user has disconnected from the webpage ([#7829](https://github.com/gradio-app/gradio/pull/7829) [`6a4bf7a`](https://github.com/gradio-app/gradio/commit/6a4bf7abe29059dbdc6a342e0366fdaa2e4120ee)) + +Gradio now automatically deletes `gr.State` variables stored in the server's RAM when users close their browser tab. +The deletion will happen 60 minutes after the server detected a disconnect from the user's browser. +If the user connects again in that timeframe, their state will not be deleted. + +Additionally, Gradio now includes a `Blocks.unload()` event, allowing you to run arbitrary cleanup functions when users disconnect (this does not have a 60 minute delay). +You can think of the `unload` event as the opposite of the `load` event. + + +```python +with gr.Blocks() as demo: + gr.Markdown( +"""# State Cleanup Demo +🖼️ Images are saved in a user-specific directory and deleted when the users closes the page via demo.unload. +""") + with gr.Row(): + with gr.Column(scale=1): + with gr.Row(): + img = gr.Image(label="Generated Image", height=300, width=300) + with gr.Row(): + gen = gr.Button(value="Generate") + with gr.Row(): + history = gr.Gallery(label="Previous Generations", height=500, columns=10) + state = gr.State(value=[], delete_callback=lambda v: print("STATE DELETED")) + + demo.load(generate_random_img, [state], [img, state, history]) + gen.click(generate_random_img, [state], [img, state, history]) + demo.unload(delete_directory) + + +demo.launch(auth=lambda user,pwd: True, + auth_message="Enter any username and password to continue") +``` + + Thanks @freddyaboulton! + +### Features + +- [#7863](https://github.com/gradio-app/gradio/pull/7863) [`024b44c`](https://github.com/gradio-app/gradio/commit/024b44c553e73f1d6c00d4c8cf12ae38181a454d) - Add support for lazy caching of examples, as well as add `GRADIO_CACHE_EXAMPLES` env variable. Thanks @abidlabs! +- [#7892](https://github.com/gradio-app/gradio/pull/7892) [`c7933ff`](https://github.com/gradio-app/gradio/commit/c7933ffedb3e2b952152f7d3ce49de2e2da5cc07) - Suppress printing "Running on local URL:" when quiet is set. Thanks @dnoliver! +- [#7869](https://github.com/gradio-app/gradio/pull/7869) [`b9dbcf7`](https://github.com/gradio-app/gradio/commit/b9dbcf7aa22fe9a19edbc0c52d46a973d8d57ad4) - Make buttons in `gr.ChatInterface` more mobile-friendly. Thanks @abidlabs! +- [#7875](https://github.com/gradio-app/gradio/pull/7875) [`e6d051d`](https://github.com/gradio-app/gradio/commit/e6d051dc8a497fdd6b4cfbd57efd4c8015b97a66) - Paste Images into MultimodalTextbox. Thanks @abidlabs! +- [#7893](https://github.com/gradio-app/gradio/pull/7893) [`f42d3e2`](https://github.com/gradio-app/gradio/commit/f42d3e29c7b8cdedd7aea75cffce81857db28eeb) - Make internal event handlers of gr.Interface and gr.ChatInterface async. Thanks @freddyaboulton! + +### Fixes + +- [#7886](https://github.com/gradio-app/gradio/pull/7886) [`ccdab9b`](https://github.com/gradio-app/gradio/commit/ccdab9b7e729c438649075d7d54afc9a91183677) - logout route deleting cookie fix. Thanks @MichaelPerger! +- [#7888](https://github.com/gradio-app/gradio/pull/7888) [`946487c`](https://github.com/gradio-app/gradio/commit/946487cf8e477cbf8d6fad4e772ff574a21782c3) - Cache view_api info in server and python client. Thanks @freddyaboulton! +- [#7881](https://github.com/gradio-app/gradio/pull/7881) [`5e66e01`](https://github.com/gradio-app/gradio/commit/5e66e01abc4e2e90bd51f0cb9a41e05157cb0df4) - Fix audio streaming out. Thanks @aliabid94! +- [#7865](https://github.com/gradio-app/gradio/pull/7865) [`7bbc3b6`](https://github.com/gradio-app/gradio/commit/7bbc3b62bf85af2d2230e5f7539efb7f1f0007a1) - JS functions break entire app if there's no input, fixed. Thanks @aliabid94! + +## 4.24.0 + +### Features + +- [#7849](https://github.com/gradio-app/gradio/pull/7849) [`7af3cd7`](https://github.com/gradio-app/gradio/commit/7af3cd7ccb8cc556fd2b290af0bed1c7ec07d174) - Adds a `placeholder` argument to `gr.Chatbot`. Thanks @abidlabs! +- [#7835](https://github.com/gradio-app/gradio/pull/7835) [`ee804b2`](https://github.com/gradio-app/gradio/commit/ee804b2d567b4381ef90b1f035d42fe6bb2506bc) - Stop running iterators when js client disconnects. Thanks @freddyaboulton! +- [#7852](https://github.com/gradio-app/gradio/pull/7852) [`72661e3`](https://github.com/gradio-app/gradio/commit/72661e3391a432ccd77fb3100e69fbdf95093931) - Revert the minify setting in vite.config.js which was mistakingly introduced in #6261. Thanks @whitphx! +- [#7818](https://github.com/gradio-app/gradio/pull/7818) [`1a7c8d3`](https://github.com/gradio-app/gradio/commit/1a7c8d32239d1e304e9f9063d7e2301c4f081b54) - Stop importing gradio.ipython_ext in Wasm mode. Thanks @whitphx! +- [#7830](https://github.com/gradio-app/gradio/pull/7830) [`75a2bf7`](https://github.com/gradio-app/gradio/commit/75a2bf745dee3b9e9521dbcf5b74af8bd53ba12f) - Add guide on Client state and and fix default values of components. Thanks @abidlabs! +- [#7823](https://github.com/gradio-app/gradio/pull/7823) [`e0a8b7f`](https://github.com/gradio-app/gradio/commit/e0a8b7fa2c60591f7fc6861707f65bf85f4ad27f) - Exclude `typer` from the requirements list for Wasm env and fix `gradio.cli` not to be imported. Thanks @whitphx! +- [#7851](https://github.com/gradio-app/gradio/pull/7851) [`e3b1236`](https://github.com/gradio-app/gradio/commit/e3b12369b71e2e3b6b25225f4414d1a28d9faf7d) - Lazy-import pandas. Thanks @whitphx! +- [#7840](https://github.com/gradio-app/gradio/pull/7840) [`ecf5c52`](https://github.com/gradio-app/gradio/commit/ecf5c524c23f76119e5b2e17f7a592555fa6557b) - Fix gradio/components/dataframe.py not to import `pandas.io`. Thanks @whitphx! +- [#7801](https://github.com/gradio-app/gradio/pull/7801) [`05db0c4`](https://github.com/gradio-app/gradio/commit/05db0c4a59b7a2c4f6297b5007946f5c7b8df1b1) - Refactor CORS Middleware to be much faster. Thanks @abidlabs! +- [#7810](https://github.com/gradio-app/gradio/pull/7810) [`425fd1c`](https://github.com/gradio-app/gradio/commit/425fd1ca9d83daf58fd95f3a1e3d566d06064ac3) - Benchmark fix test. Thanks @aliabid94! + +### Fixes + +- [#7795](https://github.com/gradio-app/gradio/pull/7795) [`1c257f5`](https://github.com/gradio-app/gradio/commit/1c257f5ebce06e61cd17fc3c0463757f8bc88930) - Bugfix: `..` in filename throwing error while loading in output. Thanks @shubhamofbce! +- [#7862](https://github.com/gradio-app/gradio/pull/7862) [`0e125d7`](https://github.com/gradio-app/gradio/commit/0e125d7befe436509af6a41b5c92de0ac6d6057c) - Trigger click event from `gr.DownloadButton` even when no file is present. Thanks @abidlabs! +- [#7848](https://github.com/gradio-app/gradio/pull/7848) [`8d7b3ca`](https://github.com/gradio-app/gradio/commit/8d7b3caebd8f95b1372f8412cadbb5862766c365) - Multimodal Textbox Loading + other fixes. Thanks @dawoodkhan82! + +## 4.23.0 + +### Features + +- [#7782](https://github.com/gradio-app/gradio/pull/7782) [`2c8cd0a`](https://github.com/gradio-app/gradio/commit/2c8cd0a73d5c113853ff96ee2da57be12774a238) - Lazy-import altair. Thanks @whitphx! +- [#7800](https://github.com/gradio-app/gradio/pull/7800) [`b0a3ea9`](https://github.com/gradio-app/gradio/commit/b0a3ea951c06d4f3ff2755b567629fe988a3e30d) - Small fix to client.view_api() in the case of default file values. Thanks @abidlabs! +- [#7684](https://github.com/gradio-app/gradio/pull/7684) [`755157f`](https://github.com/gradio-app/gradio/commit/755157f99c2961f2e5caeaa9b76d248b4225ea8f) - Do not reload code inside gr.NO_RELOAD context. Thanks @freddyaboulton! +- [#7770](https://github.com/gradio-app/gradio/pull/7770) [`dd3e363`](https://github.com/gradio-app/gradio/commit/dd3e363261ae63823fb1672443ff2d31c63d656f) - Fail CI if lint or typecheck fails. Thanks @abidlabs! +- [#7796](https://github.com/gradio-app/gradio/pull/7796) [`aad209f`](https://github.com/gradio-app/gradio/commit/aad209f0c0faa0bf3e39d0c8624f972118b32830) - Decrease latency: do not run pre and postprocess in threadpool. Thanks @freddyaboulton! +- [#7744](https://github.com/gradio-app/gradio/pull/7744) [`d831040`](https://github.com/gradio-app/gradio/commit/d8310400326adbf8d036333f4f1b7df68b7043f6) - Remove Ruff and Uvicorn in Wasm env. Thanks @whitphx! +- [#7732](https://github.com/gradio-app/gradio/pull/7732) [`2efb05e`](https://github.com/gradio-app/gradio/commit/2efb05ed99a8a3575aab0a6c14a8d8b91f4e9ed7) - Adds support for kwargs and default arguments in the python client, and improves how parameter information is displayed in the "view API" page. Thanks @abidlabs! +- [#7661](https://github.com/gradio-app/gradio/pull/7661) [`c62a57e`](https://github.com/gradio-app/gradio/commit/c62a57e7f8f2f6dad0110d06e915c48e7f628073) - Convert Docs Demos to Lite. Thanks @aliabd! +- [#7814](https://github.com/gradio-app/gradio/pull/7814) [`f7df92f`](https://github.com/gradio-app/gradio/commit/f7df92f3f3ff4bb1300ed6d6eb1828615a728acd) - Improve UX of non-interactive slider. Thanks @Pythongor! +- [#7789](https://github.com/gradio-app/gradio/pull/7789) [`ff6bf3e`](https://github.com/gradio-app/gradio/commit/ff6bf3ec8f418a7222ca80240c75a1735202e5cc) - Remove the aiohttp mock from the Wasm worker as it's removed in https://github.com/gradio-app/gradio/pull/5244. Thanks @whitphx! + +### Fixes + +- [#7783](https://github.com/gradio-app/gradio/pull/7783) [`43ae23f`](https://github.com/gradio-app/gradio/commit/43ae23f092927af2defa8104ee476da012a7b4fa) - Fix accidental bug that prevented custom textboxes from being passed to chatinterface. Thanks @freddyaboulton! +- [#7762](https://github.com/gradio-app/gradio/pull/7762) [`e78bca4`](https://github.com/gradio-app/gradio/commit/e78bca4f3789b5b229f6e5f402a1028c7b3bad33) - Trigger input event for Radio even when radio is output component. Thanks @freddyaboulton! +- [#7787](https://github.com/gradio-app/gradio/pull/7787) [`781678b`](https://github.com/gradio-app/gradio/commit/781678b3ac0e44ea1401ff55af3e98b474cf36ec) - Fix root url resolution from `x_forwarded_host` headers. Thanks @abidlabs! +- [#7794](https://github.com/gradio-app/gradio/pull/7794) [`cf98c7e`](https://github.com/gradio-app/gradio/commit/cf98c7ed18c0211b89e8eed81a5fb61c34b705c3) - Adds trigger_mode to gr.on. Use it to set trigger_model="always_last" for live interfaces. Thanks @freddyaboulton! +- [#7761](https://github.com/gradio-app/gradio/pull/7761) [`ca42748`](https://github.com/gradio-app/gradio/commit/ca42748590536e1d940b44ec7c9b6ea402905707) - Ensure `paginate` updates when samples value changes in `Dataset`. Thanks @hannahblair! + +## 4.22.0 + +### Features + +- [#7743](https://github.com/gradio-app/gradio/pull/7743) [`a2badf1`](https://github.com/gradio-app/gradio/commit/a2badf151e3f4b1b5ac80621ee189870a71893c5) - Migrate to Storybook 8. Thanks @hannahblair! +- [#7680](https://github.com/gradio-app/gradio/pull/7680) [`853d945`](https://github.com/gradio-app/gradio/commit/853d945e75c93a4b380b57dc6408f91d0f2e648f) - Add format parameter to gr.Image, gr.Gallery, gr.AnnotatedImage, gr.Plot to control format to save image files in. Thanks @dfl! +- [#7691](https://github.com/gradio-app/gradio/pull/7691) [`84f81fe`](https://github.com/gradio-app/gradio/commit/84f81fec9287b041203a141bbf2852720f7d199c) - Closing stream from the backend. Thanks @aliabid94! +- [#7420](https://github.com/gradio-app/gradio/pull/7420) [`15da39f`](https://github.com/gradio-app/gradio/commit/15da39fca01d09a30cf47e7e72d7efa5052f61f8) - Multimodal Textbox (Chat Input Component). Thanks @dawoodkhan82! +- [#7712](https://github.com/gradio-app/gradio/pull/7712) [`aca4892`](https://github.com/gradio-app/gradio/commit/aca4892ea591d089e3121ffd144ad6767e0bad71) - More fixes for `gr.load()` as well as a tweaking the `__str__` and `__repr__` methods of components. Thanks @abidlabs! +- [#7660](https://github.com/gradio-app/gradio/pull/7660) [`f739bef`](https://github.com/gradio-app/gradio/commit/f739bef6c70a2b012dd896456709eae5ee4de7d5) - Add Playground to Lite Custom Element. Thanks @aliabd! +- [#7710](https://github.com/gradio-app/gradio/pull/7710) [`0a3870d`](https://github.com/gradio-app/gradio/commit/0a3870d52b5efc64b2d1f9a8c7314a3a8b48b90a) - Call handle_darkmode() even if `window.__gradio_mode__ === "website"` but enforce the light theme. Thanks @whitphx! +- [#7572](https://github.com/gradio-app/gradio/pull/7572) [`7d3c868`](https://github.com/gradio-app/gradio/commit/7d3c868d0a67fe7cba6df412bd5f34ec8a5d289d) - Detailed error message for wasm_utils.get_registered_app(). Thanks @whitphx! +- [#7734](https://github.com/gradio-app/gradio/pull/7734) [`04857bc`](https://github.com/gradio-app/gradio/commit/04857bc524569fad426604046d5a522c3e87ca56) - Add `allowed_paths`, `blocked_paths`, `show_error`, and `favicon_path` parameters to `gr.mount_gradio_app`. Thanks @abidlabs! +- [#7667](https://github.com/gradio-app/gradio/pull/7667) [`aba4470`](https://github.com/gradio-app/gradio/commit/aba44707af20b78a7b87f5f7bd3f189d971afc71) - Add `auth`, `auth_message`, and `root_path` parameters to `mount_gradio_app`. Thanks @abidlabs! + +### Fixes + +- [#7716](https://github.com/gradio-app/gradio/pull/7716) [`188b86b`](https://github.com/gradio-app/gradio/commit/188b86b76669a411ee70233e16bf181786a5909c) - Add support for object-detection models in `gr.load()`. Thanks @abidlabs! +- [#7564](https://github.com/gradio-app/gradio/pull/7564) [`5d1e8da`](https://github.com/gradio-app/gradio/commit/5d1e8dae5ac23f605c3b5f41dbe18751dff380a0) - batch UI updates on a per frame basis. Thanks @pngwn! +- [#7718](https://github.com/gradio-app/gradio/pull/7718) [`6390d0b`](https://github.com/gradio-app/gradio/commit/6390d0bf6c2be0aefa56102dd029f25161bfebc3) - Add support for python client connecting to gradio apps running with self-signed SSL certificates. Thanks @abidlabs! +- [#7697](https://github.com/gradio-app/gradio/pull/7697) [`a1c24db`](https://github.com/gradio-app/gradio/commit/a1c24dbf2ecace4db8692b7ed434f1ebfc4de75a) - Fix OAuth + fix OAuth documentation + undocument logout button. Thanks @Wauplin! +- [#7623](https://github.com/gradio-app/gradio/pull/7623) [`c9aba8d`](https://github.com/gradio-app/gradio/commit/c9aba8d8a5886ef6456479154a14c69188c20413) - Fixes: gr.Markdown is not updated properly when it has an image tag. Thanks @dawoodkhan82! +- [#7704](https://github.com/gradio-app/gradio/pull/7704) [`95c6bc8`](https://github.com/gradio-app/gradio/commit/95c6bc897be14e28a568242ea31516bfe2df13e8) - Fix flagged files and ensure that flagging_mode="auto" saves output components as well. Thanks @abidlabs! +- [#7706](https://github.com/gradio-app/gradio/pull/7706) [`bc61ff6`](https://github.com/gradio-app/gradio/commit/bc61ff6b1603eedf3111f1b5c3d2751629902d98) - Several fixes to `gr.load`. Thanks @abidlabs! +- [#7733](https://github.com/gradio-app/gradio/pull/7733) [`7f9b291`](https://github.com/gradio-app/gradio/commit/7f9b291922751f92e6296aa6b138124c546ba497) - Cast button value as string in postprocess. Thanks @heaversm! +- [#7691](https://github.com/gradio-app/gradio/pull/7691) [`84f81fe`](https://github.com/gradio-app/gradio/commit/84f81fec9287b041203a141bbf2852720f7d199c) - Fix race condition between state updates and loading_status updates. Thanks @aliabid94! +- [#7709](https://github.com/gradio-app/gradio/pull/7709) [`f67759d`](https://github.com/gradio-app/gradio/commit/f67759dcee665cfd7c44f102f36ab23128ee2c2c) - Fix wasm_proxied_mount_css to not reuse an existing style element. Thanks @whitphx! +- [#7703](https://github.com/gradio-app/gradio/pull/7703) [`598ad7b`](https://github.com/gradio-app/gradio/commit/598ad7baf722181a25200e9a8ba858bae39c7d82) - fix dev mode. Thanks @pngwn! +- [#7707](https://github.com/gradio-app/gradio/pull/7707) [`28342a2`](https://github.com/gradio-app/gradio/commit/28342a204001c98b86628635582fcf54aa0855aa) - Fix httpx timeout issues. Thanks @freddyaboulton! + +## 4.21.0 + +### Features + +- [#7577](https://github.com/gradio-app/gradio/pull/7577) [`7c66a29`](https://github.com/gradio-app/gradio/commit/7c66a29dea0e4e56106d95d93972225b886a9df3) - Fix the Lite custom element to initialize the app in the connected callback and dispose the app in the disconnected callback. Thanks @whitphx! +- [#7620](https://github.com/gradio-app/gradio/pull/7620) [`1a4b089`](https://github.com/gradio-app/gradio/commit/1a4b089e78d1efff47b4606daebde02e9b246ed4) - Refactor `example_inputs()`, separating its logic into two separate methods: `example_payload()` and `example_value()`. Thanks @abidlabs! +- [#7265](https://github.com/gradio-app/gradio/pull/7265) [`6ebf0ce`](https://github.com/gradio-app/gradio/commit/6ebf0cedf5b357a14a8f5a0a9add849924f59ab0) - Add support for diffuser pipelines in gr.Interface.from_pipeline(). Thanks @shubhamofbce! +- [#7650](https://github.com/gradio-app/gradio/pull/7650) [`048364c`](https://github.com/gradio-app/gradio/commit/048364c6b0ffe790086c5e2fee5fab1c63c167a0) - downgrade contourpy. Thanks @abidlabs! +- [#7571](https://github.com/gradio-app/gradio/pull/7571) [`2edba13`](https://github.com/gradio-app/gradio/commit/2edba133e2a3b58b953ac0894d486faf2819beeb) - Fix `CrossOriginWorkerMaker` to cache the blob URL. Thanks @whitphx! + +### Fixes + +- [#7643](https://github.com/gradio-app/gradio/pull/7643) [`9482c7a`](https://github.com/gradio-app/gradio/commit/9482c7a3d2d7b6abd81b786100ddc385133095a5) - fix: redundant meta tags that are unwanted. Thanks @qkdxorjs1002! +- [#7628](https://github.com/gradio-app/gradio/pull/7628) [`ba8cc48`](https://github.com/gradio-app/gradio/commit/ba8cc48b136e701717c0c5d15ce410b4f8bf6a21) - feature detect CSSStylesheet. Thanks @pngwn! +- [#7575](https://github.com/gradio-app/gradio/pull/7575) [`d0688b3`](https://github.com/gradio-app/gradio/commit/d0688b3c25feabb4fc7dfa0ab86086b3af7eb337) - Files should now be supplied as `file(...)` in the Client, and some fixes to `gr.load()` as well. Thanks @abidlabs! +- [#7624](https://github.com/gradio-app/gradio/pull/7624) [`a22f3e0`](https://github.com/gradio-app/gradio/commit/a22f3e062d8d30f630e0cf8e373ad7cb0f99330f) - Fixing root path issue with subpath being repeated twice. Thanks @abidlabs! +- [#7638](https://github.com/gradio-app/gradio/pull/7638) [`b3b0ea3`](https://github.com/gradio-app/gradio/commit/b3b0ea3e111ef8a3cdd82ecc310a4accc6af6120) - Add --python-path, --pip-path, --gradio-path CLI arguments to let custom component developers control which executable is used. Thanks @freddyaboulton! +- [#7618](https://github.com/gradio-app/gradio/pull/7618) [`0ae1e44`](https://github.com/gradio-app/gradio/commit/0ae1e4486c06e06bb7a4bad45d58d14f1f8d1b94) - Control which files get moved to cache with gr.set_static_paths. Thanks @freddyaboulton! +- [#7641](https://github.com/gradio-app/gradio/pull/7641) [`cb3999e`](https://github.com/gradio-app/gradio/commit/cb3999eec707609d5371ef3bad1152f55ed35b2f) - Use `x-forwarded-host` header to determine the root url, and let users provide a full `root_path` to override the automatically determined root url. Thanks @abidlabs! + +## 4.20.1 + +### Features + +- [#7625](https://github.com/gradio-app/gradio/pull/7625) [`8181695`](https://github.com/gradio-app/gradio/commit/8181695e70187e8bc2bf7518697098c8d1b9843d) - image upload fix. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! + +## 4.20.0 + +### Features + +- [#7557](https://github.com/gradio-app/gradio/pull/7557) [`4d5789e`](https://github.com/gradio-app/gradio/commit/4d5789e905b5915f3d03fae2ac1d38a54c3e67ea) - Allow mounted Gradio apps to work with external / arbitrary authentication providers. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7614](https://github.com/gradio-app/gradio/pull/7614) [`355ed66`](https://github.com/gradio-app/gradio/commit/355ed666d9f6da018e8a03cdc6e367d00e6b10fb) - Fix the `root_url` logic for streaming files. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7119](https://github.com/gradio-app/gradio/pull/7119) [`9c6de6d`](https://github.com/gradio-app/gradio/commit/9c6de6d85092c1c9378d7f81e5ec734221536812) - Upgrade Pyodide to 0.25.0. Thanks [@whitphx](https://github.com/whitphx)! +- [#7447](https://github.com/gradio-app/gradio/pull/7447) [`a57e34e`](https://github.com/gradio-app/gradio/commit/a57e34ef87d24f40f09380b7b71a052f120a19fe) - Add delete_cache parameter to gr.Blocks to delete files created by app on shutdown. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7547](https://github.com/gradio-app/gradio/pull/7547) [`98aa808`](https://github.com/gradio-app/gradio/commit/98aa8082dd228dd481e05c888adb2e91b04f8f48) - Add `/logout` functionality for Gradio auth. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7407](https://github.com/gradio-app/gradio/pull/7407) [`375bfd2`](https://github.com/gradio-app/gradio/commit/375bfd28d2def576b4e1c12e0a60127b7419e826) - Fix server_messages.py to use the patched BaseModel class for Wasm env. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7516](https://github.com/gradio-app/gradio/pull/7516) [`3645da5`](https://github.com/gradio-app/gradio/commit/3645da5f1e5539668cad75071a82fdd78f50263c) - Fix incorrect relative mouse coordinates for `Gallery` preview overlay. Thanks [@MMP0](https://github.com/MMP0)! +- [#7528](https://github.com/gradio-app/gradio/pull/7528) [`eda33b3`](https://github.com/gradio-app/gradio/commit/eda33b3763897a542acf298e523fa493dc655aee) - Refactors `get_fetchable_url_or_file()` to remove it from the frontend. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7340](https://github.com/gradio-app/gradio/pull/7340) [`4b0d589`](https://github.com/gradio-app/gradio/commit/4b0d58933057432758a54169a360eb352903d6b4) - chore(deps): update all non-major dependencies. Thanks [@renovate](https://github.com/apps/renovate)! +- [#7345](https://github.com/gradio-app/gradio/pull/7345) [`561579d`](https://github.com/gradio-app/gradio/commit/561579d9b7b860c5cb3f8131e0dced0c8114463f) - fix-tests. Thanks [@pngwn](https://github.com/pngwn)! +- [#7518](https://github.com/gradio-app/gradio/pull/7518) [`bd2c695`](https://github.com/gradio-app/gradio/commit/bd2c69532801f9a0626cd1192de158bde6068b9a) - Adds a `gr.DownloadButton` component. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7598](https://github.com/gradio-app/gradio/pull/7598) [`d3384cb`](https://github.com/gradio-app/gradio/commit/d3384cb926ca9bab7ccbf910547ec8a0c361531f) - Prevent additional paths that can trigger credential leakage on Windows. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7544](https://github.com/gradio-app/gradio/pull/7544) [`f84720c`](https://github.com/gradio-app/gradio/commit/f84720cd76e5bf3321f06383642bdb246a9a36e2) - Prevent paths beginning with `//` or `\\`. Thanks [@abidlabs](https://github.com/abidlabs)! + +### Fixes + +- [#7565](https://github.com/gradio-app/gradio/pull/7565) [`1c22123`](https://github.com/gradio-app/gradio/commit/1c22123268da5f7fcf6e7c74ee0bf6b225c7aa11) - Fixes method to resolve the `root` URLs. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7559](https://github.com/gradio-app/gradio/pull/7559) [`26356a6`](https://github.com/gradio-app/gradio/commit/26356a623c4196f48ca236d973a597831743cdb8) - Fixes: Invalid file_type breaks drag and drop. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! +- [#7555](https://github.com/gradio-app/gradio/pull/7555) [`fc4c2db`](https://github.com/gradio-app/gradio/commit/fc4c2dbd994c49e37296978da1cb85e424080d1c) - Allow Python Client to upload/download files when connecting to Gradio apps with auth enabled. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7510](https://github.com/gradio-app/gradio/pull/7510) [`08c2d49`](https://github.com/gradio-app/gradio/commit/08c2d491ecac83268ad20f05769ef7e1335089e2) - when adding custom head html, ensure there are no duplicate meta tags. Thanks [@qkdxorjs1002](https://github.com/qkdxorjs1002)! +- [#7545](https://github.com/gradio-app/gradio/pull/7545) [`1fa2e91`](https://github.com/gradio-app/gradio/commit/1fa2e914ca4663a47743cc34acdf98c7fcc469c8) - Fixes `auth_message` so that it correctly renders HTML. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7599](https://github.com/gradio-app/gradio/pull/7599) [`f26aba0`](https://github.com/gradio-app/gradio/commit/f26aba00a71a5b4eff60c37580c8d25f9bc048da) - Prevent audio speeding up when trimming. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7567](https://github.com/gradio-app/gradio/pull/7567) [`e340894`](https://github.com/gradio-app/gradio/commit/e340894b1cf2f44dd45e597fd8d9e547f408fbb3) - Quick fix: custom dropdown value. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! + +## 4.19.2 + +### Features + +- [#7495](https://github.com/gradio-app/gradio/pull/7495) [`ddd4d3e`](https://github.com/gradio-app/gradio/commit/ddd4d3e4d3883fb7540d1df240fb08202fc77705) - Enable Ruff S101. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7443](https://github.com/gradio-app/gradio/pull/7443) [`b7a97f2`](https://github.com/gradio-app/gradio/commit/b7a97f29b84a72678a717db03d2932ed6caae6ce) - Update `httpx` to `httpx>=0.24.1` in `requirements.txt`. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7465](https://github.com/gradio-app/gradio/pull/7465) [`16fbe9c`](https://github.com/gradio-app/gradio/commit/16fbe9cd0cffa9f2a824a0165beb43446114eec7) - Prevent components from working with non-uploaded files. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7503](https://github.com/gradio-app/gradio/pull/7503) [`84802ee`](https://github.com/gradio-app/gradio/commit/84802ee6a4806c25287344dce581f9548a99834a) - Tighten CORS rules. Thanks [@abidlabs](https://github.com/abidlabs)! + +### Fixes + +- [#7466](https://github.com/gradio-app/gradio/pull/7466) [`98a2719`](https://github.com/gradio-app/gradio/commit/98a2719bfb9c64338caf9009891b6c6b0b33ea89) - Fix z-index layer of orange generating border. Thanks [@daviirodrig](https://github.com/daviirodrig)! +- [#7507](https://github.com/gradio-app/gradio/pull/7507) [`9c36572`](https://github.com/gradio-app/gradio/commit/9c36572e32aeec6e6352a861dfea6ee0f9a15e79) - Quick fix: File height overflow. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! +- [#7495](https://github.com/gradio-app/gradio/pull/7495) [`ddd4d3e`](https://github.com/gradio-app/gradio/commit/ddd4d3e4d3883fb7540d1df240fb08202fc77705) - ensure Dataframe headers are aligned with content when scrolling. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7470](https://github.com/gradio-app/gradio/pull/7470) [`ba3ec13`](https://github.com/gradio-app/gradio/commit/ba3ec1300e81e64be7389d759b89284c66473158) - Tab select fix. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7505](https://github.com/gradio-app/gradio/pull/7505) [`b186767`](https://github.com/gradio-app/gradio/commit/b18676774448f44a2ef3a9490224703254cffa7c) - Fix `Gallery` preview overlay and backdrop. Thanks [@MMP0](https://github.com/MMP0)! +- [#7511](https://github.com/gradio-app/gradio/pull/7511) [`33f68cb`](https://github.com/gradio-app/gradio/commit/33f68cb6c22897f7996b6c84b0e528c47fae00b5) - Fix Canvas3D/Canvas3DGS async imports. Thanks [@whitphx](https://github.com/whitphx)! + +## 4.19.1 + +### Features + +- [#7453](https://github.com/gradio-app/gradio/pull/7453) [`ba747ad`](https://github.com/gradio-app/gradio/commit/ba747adb87e1937c0a791186eee3997d034363e6) - Make fix in #7444 (Block /file= filepaths that could expose credentials on Windows) more general. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7416](https://github.com/gradio-app/gradio/pull/7416) [`c88290d`](https://github.com/gradio-app/gradio/commit/c88290d90a81811911361e26fa9523c9b13db527) - WIP: Optimize /file route. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7440](https://github.com/gradio-app/gradio/pull/7440) [`e329f1f`](https://github.com/gradio-app/gradio/commit/e329f1fd38935213fe0e73962e8cbd5d3af6e87b) - Prevent timing attacks to guess Gradio passwords. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7425](https://github.com/gradio-app/gradio/pull/7425) [`3e4e680`](https://github.com/gradio-app/gradio/commit/3e4e680a52ba5a73c108ef1b328dacd7b6e4b566) - Fixes to the `.key_up()` method to make it usable for a dynamic dropdown autocomplete. Thanks [@abidlabs](https://github.com/abidlabs)! + +### Fixes + +- [#7444](https://github.com/gradio-app/gradio/pull/7444) [`4faf8a7`](https://github.com/gradio-app/gradio/commit/4faf8a7e86bfe811ef3d90ac5abdbd41409fafb1) - Block `/file=` filepaths that could expose credentials on Windows. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7441](https://github.com/gradio-app/gradio/pull/7441) [`f52cab6`](https://github.com/gradio-app/gradio/commit/f52cab634b94638d7f4625d40bf3d9afbe68040b) - Dispatch change event for file explorer. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7327](https://github.com/gradio-app/gradio/pull/7327) [`fb1f6be`](https://github.com/gradio-app/gradio/commit/fb1f6befad12106faafd94d221c1ed0e50b0a037) - Run pre/post processing in threadpool. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7431](https://github.com/gradio-app/gradio/pull/7431) [`6b8a7e5`](https://github.com/gradio-app/gradio/commit/6b8a7e5d36887cdfcfbfec1536a915128df0d6b2) - Ensure `gr.Dropdown` can have an empty initial value. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#6991](https://github.com/gradio-app/gradio/pull/6991) [`f191786`](https://github.com/gradio-app/gradio/commit/f1917867916647d383b8d7ce15e0c17f2abbdec1) - Improve responsiveness of `gr.Audio()` controls. Thanks [@hannahblair](https://github.com/hannahblair)! + +## 4.19.0 + +### Features + +- [#7406](https://github.com/gradio-app/gradio/pull/7406) [`3e886d8`](https://github.com/gradio-app/gradio/commit/3e886d8f0ac55c416dae51c1c2661e16eb34718e) - Model3D Gaussian Splatting. Thanks [@dylanebert](https://github.com/dylanebert)! + +### Fixes + +- [#7402](https://github.com/gradio-app/gradio/pull/7402) [`fa8225d`](https://github.com/gradio-app/gradio/commit/fa8225d24d86c0ec9a48cadee78dcc11b7084584) - Use updated component in `postprocess()`. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7361](https://github.com/gradio-app/gradio/pull/7361) [`17fb116`](https://github.com/gradio-app/gradio/commit/17fb116492f951ab66e3a39b5fdfb598f5446b6f) - Fixes gr.Markdown() does not render spaces around links correctly. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! +- [#7337](https://github.com/gradio-app/gradio/pull/7337) [`65437ce`](https://github.com/gradio-app/gradio/commit/65437ce832f806da316aa074539b6263e1d8b7ac) - Improve File Explorer performance. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7410](https://github.com/gradio-app/gradio/pull/7410) [`c2dfc59`](https://github.com/gradio-app/gradio/commit/c2dfc592a4988efd5a96a062eec3fb4906f71748) - remove static while pending behaviour. Thanks [@pngwn](https://github.com/pngwn)! +- [#7389](https://github.com/gradio-app/gradio/pull/7389) [`b5c74ff`](https://github.com/gradio-app/gradio/commit/b5c74ffadbee351b2d5d79e578246f5343255508) - Fix HTTPX package crash for some values of "article" parameter in the interface. Thanks [@YuryYakhno](https://github.com/YuryYakhno)! +- [#7415](https://github.com/gradio-app/gradio/pull/7415) [`4ab399f`](https://github.com/gradio-app/gradio/commit/4ab399f40a300f267231f1b2dbe2a07494322d4d) - Allow config to include non-pickle-able values. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7404](https://github.com/gradio-app/gradio/pull/7404) [`065c5b1`](https://github.com/gradio-app/gradio/commit/065c5b163c4badb9d9cbd06d627fb4ba086003e7) - Add `.key_up` event listener to `gr.Dropdown()`. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7417](https://github.com/gradio-app/gradio/pull/7417) [`314ccfa`](https://github.com/gradio-app/gradio/commit/314ccfa781810e777a944ff6d832dbd4b043631a) - Fix File Explorer interactivity. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7401](https://github.com/gradio-app/gradio/pull/7401) [`dff4109`](https://github.com/gradio-app/gradio/commit/dff410955e41145848376784c03fe28ba1c4fd85) - Retain dropdown value if choices have been changed. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7411](https://github.com/gradio-app/gradio/pull/7411) [`32b317f`](https://github.com/gradio-app/gradio/commit/32b317f24e3d43f26684bb9f3964f31efd0ea556) - Set `root` correctly for Gradio apps that are deployed behind reverse proxies. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7395](https://github.com/gradio-app/gradio/pull/7395) [`46b4568`](https://github.com/gradio-app/gradio/commit/46b45683e1ea9eb40013121a8de5bee7aa98bf0b) - Allow applying `@media`, `@keyframes` and `@import` in custom CSS. Thanks [@hannahblair](https://github.com/hannahblair)! + +## 4.18.0 + +### Features + +- [#7299](https://github.com/gradio-app/gradio/pull/7299) [`f35f615`](https://github.com/gradio-app/gradio/commit/f35f615e33a5dd90bfeb106b6f5dca689849fcef) - Added remove button for every file in file preview, to remove individual file in gr.File(). Thanks [@shubhamofbce](https://github.com/shubhamofbce)! +- [#7183](https://github.com/gradio-app/gradio/pull/7183) [`49d9c48`](https://github.com/gradio-app/gradio/commit/49d9c48537aa706bf72628e3640389470138bdc6) - [WIP] Refactor file normalization to be in the backend and remove it from the frontend of each component. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7333](https://github.com/gradio-app/gradio/pull/7333) [`7e9b206`](https://github.com/gradio-app/gradio/commit/7e9b206a149740a421e03c8adb64978a5070f28f) - Stop using deprecated pydantic config class and filter gradio warnings from tests. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7377](https://github.com/gradio-app/gradio/pull/7377) [`6dfd40f`](https://github.com/gradio-app/gradio/commit/6dfd40fc6b2fa461490d2370ab91fcda7e07c0da) - Make set_documentation_group a no-op. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7328](https://github.com/gradio-app/gradio/pull/7328) [`c1a7ea7`](https://github.com/gradio-app/gradio/commit/c1a7ea7c0c294aa970624f02225717c12bcf9b58) - Add SQL Support for gr.Code. Thanks [@aersam](https://github.com/aersam)! +- [#7369](https://github.com/gradio-app/gradio/pull/7369) [`7b10d97`](https://github.com/gradio-app/gradio/commit/7b10d97b0f928fde6a71a94460fb8ca784e7a31d) - Remove the `@gradio/wasm` dependency from `@gradio/gallery` that is not used. Thanks [@whitphx](https://github.com/whitphx)! +- [#7334](https://github.com/gradio-app/gradio/pull/7334) [`b95d0d0`](https://github.com/gradio-app/gradio/commit/b95d0d043c739926af986e573200af92732bbc01) - Allow setting custom headers in Python Client. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7365](https://github.com/gradio-app/gradio/pull/7365) [`1e68561`](https://github.com/gradio-app/gradio/commit/1e68561167cd240d053444db091b297a3129cebb) - Update Pydantic patch for Lite that emulates PydanticV2 API using V1. Thanks [@whitphx](https://github.com/whitphx)! +- [#6890](https://github.com/gradio-app/gradio/pull/6890) [`cccab27`](https://github.com/gradio-app/gradio/commit/cccab27fe8b6ae6860b3fff68694fa33060e18a7) - E2E tests for Lite. Thanks [@whitphx](https://github.com/whitphx)! + +### Fixes + +- [#7354](https://github.com/gradio-app/gradio/pull/7354) [`a7fa47a`](https://github.com/gradio-app/gradio/commit/a7fa47a175fbcf0fd6573ca19334a3a55b55bb24) - ensure Dataframes in background tabs are visible when the tab is selected. Thanks [@pngwn](https://github.com/pngwn)! +- [#7355](https://github.com/gradio-app/gradio/pull/7355) [`2244059`](https://github.com/gradio-app/gradio/commit/2244059cdbacb713530a3b760205c5464c05491c) - Ensure CSS `.dark` rule selectors are applied. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7375](https://github.com/gradio-app/gradio/pull/7375) [`4dc9ffb`](https://github.com/gradio-app/gradio/commit/4dc9ffbf70e2233c5b18ed3f722c1189a310a036) - Store `gr.Accordion`'s `open` value. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7374](https://github.com/gradio-app/gradio/pull/7374) [`7f19ba2`](https://github.com/gradio-app/gradio/commit/7f19ba272c5a46d7f2c11ad5c9f0ab15d4e27083) - Stop caching root url. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7350](https://github.com/gradio-app/gradio/pull/7350) [`7302a6e`](https://github.com/gradio-app/gradio/commit/7302a6e151dac553c17833be64d4639ee4cf97aa) - Fix `gr.load` for file-based Spaces. Thanks [@abidlabs](https://github.com/abidlabs)! + +## 4.17.0 + +### Features + +- [#7129](https://github.com/gradio-app/gradio/pull/7129) [`ccdaec4`](https://github.com/gradio-app/gradio/commit/ccdaec45002d0a9d6016e8e2078b843a1ff9172b) - Add a `simpleimage` template for custom components. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7313](https://github.com/gradio-app/gradio/pull/7313) [`edfd05d`](https://github.com/gradio-app/gradio/commit/edfd05d18d20542d350d883d5e7f84d2774ad99e) - Expand chatinterface to full window height. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7292](https://github.com/gradio-app/gradio/pull/7292) [`aa97a5e`](https://github.com/gradio-app/gradio/commit/aa97a5e33a04ef8a0309b6ec3b2df4caaa26173e) - Improvements to API Docs. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7205](https://github.com/gradio-app/gradio/pull/7205) [`e418edd`](https://github.com/gradio-app/gradio/commit/e418edd011d06df519c778b9a50573288d5bf30f) - Fix SimpleImage package json. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7222](https://github.com/gradio-app/gradio/pull/7222) [`5181957`](https://github.com/gradio-app/gradio/commit/51819577068addde8fab1f4d4cfe691f20396f3f) - Add mobile Chromatic tests. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7298](https://github.com/gradio-app/gradio/pull/7298) [`e5344ba`](https://github.com/gradio-app/gradio/commit/e5344ba0cd63d21dbb525330bbc07ca2eca57832) - chore(deps): update dependency marked to v12. Thanks [@renovate](https://github.com/apps/renovate)! +- [#7206](https://github.com/gradio-app/gradio/pull/7206) [`572e360`](https://github.com/gradio-app/gradio/commit/572e360fff4a03c335b86e1a7517a44cb6af2bcd) - Upload tweak. Thanks [@pngwn](https://github.com/pngwn)! +- [#7062](https://github.com/gradio-app/gradio/pull/7062) [`0fddd0f`](https://github.com/gradio-app/gradio/commit/0fddd0f971761bff3ef6ccc7ab9deb1891cd80d0) - Determine documentation group automatically. Thanks [@akx](https://github.com/akx)! +- [#7102](https://github.com/gradio-app/gradio/pull/7102) [`68a54a7`](https://github.com/gradio-app/gradio/commit/68a54a7a310d8d7072fdae930bf1cfdf12c45a7f) - Improve chatbot streaming performance with diffs. Thanks [@aliabid94](https://github.com/aliabid94)!/n Note that this PR changes the API format for generator functions, which would be a breaking change for any clients reading the EventStream directly +- [#7208](https://github.com/gradio-app/gradio/pull/7208) [`efacc7d`](https://github.com/gradio-app/gradio/commit/efacc7d5cb0d1c6448cbec82abfc00ad6da05b3f) - Ensure `open` reactivity in Accordion. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7228](https://github.com/gradio-app/gradio/pull/7228) [`2e6672c`](https://github.com/gradio-app/gradio/commit/2e6672c815e39fd6af78353e66661100b9102cd4) - Allow start/pause of streaming image input. Only access the webcam while it's needed. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7236](https://github.com/gradio-app/gradio/pull/7236) [`dec6a71`](https://github.com/gradio-app/gradio/commit/dec6a715d6219b00bd0151dd7c13bb2bc99c86da) - Fix PIL imports. Thanks [@akx](https://github.com/akx)! +- [#7274](https://github.com/gradio-app/gradio/pull/7274) [`fdd1521`](https://github.com/gradio-app/gradio/commit/fdd15213c24b9cbc58bbc1b6beb4af7c18f48557) - chore: Change time format (thanks @jjshoots for the independent contribution). Thanks [@arian81](https://github.com/arian81)! +- [#7116](https://github.com/gradio-app/gradio/pull/7116) [`3c8c4ac`](https://github.com/gradio-app/gradio/commit/3c8c4ac2db284e1cb503c397205a79a6dcc27e23) - Document the `gr.ParamViewer` component, and fix component preprocessing/postprocessing docstrings. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7157](https://github.com/gradio-app/gradio/pull/7157) [`46919c5`](https://github.com/gradio-app/gradio/commit/46919c5a4721ca2b0e17e38dc8c641f7ef336bcc) - Defer importing matplotlib. Thanks [@akx](https://github.com/akx)! +- [#7332](https://github.com/gradio-app/gradio/pull/7332) [`8bb0ce2`](https://github.com/gradio-app/gradio/commit/8bb0ce2e40abc4da3c782d5bc5ef5ac0f31f966f) - Hotfix for: `stt_or_tts` demo. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7309](https://github.com/gradio-app/gradio/pull/7309) [`200e251`](https://github.com/gradio-app/gradio/commit/200e2518e4d449aa82819a8d119e912bd1d95c15) - Add `gr.Image` interaction test + `gr.ImageEditor` interaction test improvement. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7319](https://github.com/gradio-app/gradio/pull/7319) [`87d5105`](https://github.com/gradio-app/gradio/commit/87d510580e7061c00848b70613c74838d9c71de7) - Handle httpx.InvalidURL when setting non-URL article strings. Thanks [@nopperl](https://github.com/nopperl)! +- [#7154](https://github.com/gradio-app/gradio/pull/7154) [`aab2a75`](https://github.com/gradio-app/gradio/commit/aab2a75f0610dd7ed0b481264c6b9f01cfe92094) - Allow selecting texts in dataframe cells. Thanks [@shubhamofbce](https://github.com/shubhamofbce)! +- [#7061](https://github.com/gradio-app/gradio/pull/7061) [`05d8a3c`](https://github.com/gradio-app/gradio/commit/05d8a3c8030b733bd47250f5db6f89f230f9a707) - Update ruff to 0.1.13, enable more rules, fix issues. Thanks [@akx](https://github.com/akx)! +- [#7315](https://github.com/gradio-app/gradio/pull/7315) [`b3a9c83`](https://github.com/gradio-app/gradio/commit/b3a9c830955a5ded8528d6118aaf1b6e019857a2) - Lite: Wasm-compatible Model3D. Thanks [@whitphx](https://github.com/whitphx)! +- [#7059](https://github.com/gradio-app/gradio/pull/7059) [`7ea8336`](https://github.com/gradio-app/gradio/commit/7ea8336709726dbe14dd00303fe2db3fe27f0502) - Remove flag_dir from read_from_flag(). Thanks [@akx](https://github.com/akx)! +- [#7229](https://github.com/gradio-app/gradio/pull/7229) [`6a7e98b`](https://github.com/gradio-app/gradio/commit/6a7e98bfefdc9530f0390f0d780edc5a35266d56) - Fix hyphen-bug in gradio cc publish. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7225](https://github.com/gradio-app/gradio/pull/7225) [`60078df`](https://github.com/gradio-app/gradio/commit/60078df07f38c0ef90ef2ba90f8e3272b92c9e3d) - Fix test requirements to be compatible with python 3.11. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7256](https://github.com/gradio-app/gradio/pull/7256) [`09257ef`](https://github.com/gradio-app/gradio/commit/09257ef1f1307e2886418f6dd93dcffdf010c32b) - Fix ci cache. Thanks [@pngwn](https://github.com/pngwn)! +- [#7240](https://github.com/gradio-app/gradio/pull/7240) [`1893756`](https://github.com/gradio-app/gradio/commit/18937564ab8906710549d5bccc48f7188c836f38) - Small cleanups of `Code` component. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7295](https://github.com/gradio-app/gradio/pull/7295) [`aea14c4`](https://github.com/gradio-app/gradio/commit/aea14c44961be8b0e732e05799df8104d7b906ed) - Refactor Inference API and rename it to Serverless Inference Endpoints. Thanks [@abidlabs](https://github.com/abidlabs)! + +### Fixes + +- [#7117](https://github.com/gradio-app/gradio/pull/7117) [`24157a3`](https://github.com/gradio-app/gradio/commit/24157a36028b3f606194bd9977634318650b2d46) - add background color based on the OS mode. Thanks [@aileenvl](https://github.com/aileenvl)! +- [#7192](https://github.com/gradio-app/gradio/pull/7192) [`8dd6f4b`](https://github.com/gradio-app/gradio/commit/8dd6f4bc1901792f05cd59e86df7b1dbab692739) - Handle the case where examples is `null` for all components. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7283](https://github.com/gradio-app/gradio/pull/7283) [`757dba6`](https://github.com/gradio-app/gradio/commit/757dba66baf624eae11ff076f0e8d6bfc2314630) - Add `show_label` check to `gr.Dataframe`. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7190](https://github.com/gradio-app/gradio/pull/7190) [`2d51a9d`](https://github.com/gradio-app/gradio/commit/2d51a9dbd97167aa7a2b3aa672142c1a5137e898) - Add missing parameters and docstrings for `gr.TabbedInterface`. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7178](https://github.com/gradio-app/gradio/pull/7178) [`9f23b0b`](https://github.com/gradio-app/gradio/commit/9f23b0bc54b4ef63c056b309370df52ec2c2a43c) - Optimize client view_api method. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7158](https://github.com/gradio-app/gradio/pull/7158) [`ded5256`](https://github.com/gradio-app/gradio/commit/ded5256c4a39a84155b9c3d7f4e8e7060d798186) - Fix audio recording events not dispatching. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7325](https://github.com/gradio-app/gradio/pull/7325) [`733ca26`](https://github.com/gradio-app/gradio/commit/733ca266bb1ba9049ed7309b8f0614199682e173) - Ensure examples Images displays as expected. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7276](https://github.com/gradio-app/gradio/pull/7276) [`a3aa22f`](https://github.com/gradio-app/gradio/commit/a3aa22f6f0bc664646bb409844899bc8810e421e) - Adjust Value to Fix .Label Display. Thanks [@codydh](https://github.com/codydh)! +- [#7286](https://github.com/gradio-app/gradio/pull/7286) [`0d36ac0`](https://github.com/gradio-app/gradio/commit/0d36ac05aa54e53f0ea61f5b129af59ab55f3224) - Fixes issue with datatype setting in gr.Dataframe. Setting no longer dependent on col_count. Thanks [@cswamy](https://github.com/cswamy)! +- [#7290](https://github.com/gradio-app/gradio/pull/7290) [`db27df3`](https://github.com/gradio-app/gradio/commit/db27df36d2ea42dd20f275e9b9d6fe15f1a960f8) - Escape triple quotes when creating `space.py` for custom components. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7141](https://github.com/gradio-app/gradio/pull/7141) [`c3e61e4`](https://github.com/gradio-app/gradio/commit/c3e61e4f70696a71aede67b65d28447eb67daf16) - Few File component drag and drop. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! +- [#7221](https://github.com/gradio-app/gradio/pull/7221) [`cae05c0`](https://github.com/gradio-app/gradio/commit/cae05c05ecde56c4d92c6b5ed8d13353505cbd14) - Fix single file upload display. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7207](https://github.com/gradio-app/gradio/pull/7207) [`e3217b4`](https://github.com/gradio-app/gradio/commit/e3217b41862925a6a05f44070ac2bdabbeee6769) - Amend audio waveform colour. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7322](https://github.com/gradio-app/gradio/pull/7322) [`b25e95e`](https://github.com/gradio-app/gradio/commit/b25e95e164e80d66203ef71ce6bdb67ceb6b24df) - Fix `processing_utils.save_url_to_cache()` to follow redirects when accessing the URL. Thanks [@whitphx](https://github.com/whitphx)! +- [#7294](https://github.com/gradio-app/gradio/pull/7294) [`d7095c4`](https://github.com/gradio-app/gradio/commit/d7095c4699658f2acc5af7557dd455e8655954f4) - Number example fix. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7219](https://github.com/gradio-app/gradio/pull/7219) [`faead14`](https://github.com/gradio-app/gradio/commit/faead1403cdba6415912a6ad512291ac63b04173) - Show label in interactive image editor. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7220](https://github.com/gradio-app/gradio/pull/7220) [`3b8dfc6`](https://github.com/gradio-app/gradio/commit/3b8dfc684dc0eb0544d06300fa546b23f587c63f) - Add `visible` check to Tab. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7257](https://github.com/gradio-app/gradio/pull/7257) [`daaaf95`](https://github.com/gradio-app/gradio/commit/daaaf9593e9b2094bf59f3f5e01244ffb8a01bb1) - Fixes issues related to `gr.Dataframe` receiving an empty dataframe. Thanks [@cswamy](https://github.com/cswamy)! + +## 4.16.0 + +### Features + +- [#7124](https://github.com/gradio-app/gradio/pull/7124) [`21a16c6`](https://github.com/gradio-app/gradio/commit/21a16c60e8f34b870bd2aae9af07713eb1307252) - add params to `gr.Interface` and `gr.ChatInterface`. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7139](https://github.com/gradio-app/gradio/pull/7139) [`6abad53`](https://github.com/gradio-app/gradio/commit/6abad536778517a2ab9f5fc75d52afc576f01218) - Added polars dataframe support with demo. Thanks [@cswamy](https://github.com/cswamy)! +- [#7084](https://github.com/gradio-app/gradio/pull/7084) [`94aa271`](https://github.com/gradio-app/gradio/commit/94aa271ab11fc3426a7e143ebaa757eb30c9911d) - Improve rapid generation performance via UI throttling. Thanks [@aliabid94](https://github.com/aliabid94)! +- [#7104](https://github.com/gradio-app/gradio/pull/7104) [`bc2cdc1`](https://github.com/gradio-app/gradio/commit/bc2cdc1df95b38025486cf76df4a494b66d98585) - Allow download button for interactive Audio and Video components. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7109](https://github.com/gradio-app/gradio/pull/7109) [`125a832`](https://github.com/gradio-app/gradio/commit/125a832ab7ee2b5affa574e8b32c88f430cc6663) - generate docs when running `gradio cc build`. Thanks [@pngwn](https://github.com/pngwn)! +- [#7148](https://github.com/gradio-app/gradio/pull/7148) [`c60ad4d`](https://github.com/gradio-app/gradio/commit/c60ad4d34ab5b56a89bf6796822977e51e7a4a32) - Use Gallery as input component. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7049](https://github.com/gradio-app/gradio/pull/7049) [`1718c4a`](https://github.com/gradio-app/gradio/commit/1718c4aeb23a88ef02b17b30a1d1cb72e413e04a) - add STL 3D model support. Thanks [@Mon-ius](https://github.com/Mon-ius)! +- [#7159](https://github.com/gradio-app/gradio/pull/7159) [`6ee22dc`](https://github.com/gradio-app/gradio/commit/6ee22dc6a8f6419e127a0f650e58c87a31bc59c9) - Ensure `gradio cc publish` uploads the documentation space, if it exists. Thanks [@pngwn](https://github.com/pngwn)! +- [#7034](https://github.com/gradio-app/gradio/pull/7034) [`82fe73d`](https://github.com/gradio-app/gradio/commit/82fe73d04297ac4e2c3ef42edc62bab4300bf915) - Redirect with query params after oauth. Thanks [@Wauplin](https://github.com/Wauplin)! +- [#7063](https://github.com/gradio-app/gradio/pull/7063) [`2cdcf4a`](https://github.com/gradio-app/gradio/commit/2cdcf4a890202a55673588c16f27b327d27915b6) - Single oauth button. Thanks [@Wauplin](https://github.com/Wauplin)! + +### Fixes + +- [#7126](https://github.com/gradio-app/gradio/pull/7126) [`5727b92`](https://github.com/gradio-app/gradio/commit/5727b92abc8a00a675bfc0a921b38de771af947b) - Allow buttons to take null value. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7112](https://github.com/gradio-app/gradio/pull/7112) [`217bfe3`](https://github.com/gradio-app/gradio/commit/217bfe39ca6a0de885824f16be4a707e7f032d57) - Support audio data in `np.int8` format in the `gr.Audio` component. Thanks [@Ram-Pasupula](https://github.com/Ram-Pasupula)! +- [#7029](https://github.com/gradio-app/gradio/pull/7029) [`ac73555`](https://github.com/gradio-app/gradio/commit/ac735551bb2ccc288b2bbf10b008b6c3d9e65132) - Run before_fn and after_fn for each generator iteration. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7131](https://github.com/gradio-app/gradio/pull/7131) [`7d53aa1`](https://github.com/gradio-app/gradio/commit/7d53aa13a304d056d1973b8e86c6f89ff84cbd28) - Miscellaneous doc fixes. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7138](https://github.com/gradio-app/gradio/pull/7138) [`ca8753b`](https://github.com/gradio-app/gradio/commit/ca8753bb3d829d0077f758ba8d0ddc866ff74d3d) - Fixes: Chatbot crashes when given empty url following http:// or https://. Thanks [@dawoodkhan82](https://github.com/dawoodkhan82)! +- [#7115](https://github.com/gradio-app/gradio/pull/7115) [`cb90b3d`](https://github.com/gradio-app/gradio/commit/cb90b3d5d6a291270e047e10f9173cbc03678e1c) - Programmatically determine max wheel version to push to spaces. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7107](https://github.com/gradio-app/gradio/pull/7107) [`80f8fbf`](https://github.com/gradio-app/gradio/commit/80f8fbf0e8900627b9c2575bbd7c68fad8108544) - Add logic to handle non-interactive or hidden tabs. Thanks [@hannahblair](https://github.com/hannahblair)! +- [#7142](https://github.com/gradio-app/gradio/pull/7142) [`b961652`](https://github.com/gradio-app/gradio/commit/b9616528ab099aab0adc7027bce4655111f7366c) - Remove kwargs from template components. Thanks [@freddyaboulton](https://github.com/freddyaboulton)! +- [#7125](https://github.com/gradio-app/gradio/pull/7125) [`45f725f`](https://github.com/gradio-app/gradio/commit/45f725f8d0dc7813b3d2e768ca9582d6ad878d6f) - un-disable output components after exception is raised. Thanks [@abidlabs](https://github.com/abidlabs)! +- [#7081](https://github.com/gradio-app/gradio/pull/7081) [`44c53d9`](https://github.com/gradio-app/gradio/commit/44c53d9bde7cab605b7dbd16331683d13cae029e) - Fix dropdown refocusing due to `