mirror of
https://github.com/gradio-app/gradio.git
synced 2025-03-01 11:45:36 +08:00
* enter pre-release mode * Remove deprecated parameters and classes for the 5.0 release (#8797) * 5.0 * add changeset * deprecate more * add changeset * lint * Update rotten-bears-bathe.md * Update icy-clocks-juggle.md * changes * Delete .changeset/icy-clocks-juggle.md * every * more deprecation * deprecate inits * fix * fix func * fix some tests * format * fix more tests * fixes --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix (#8830) * fix * Prevent invalid values from being submitted to dropdown, etc. (#8810) * prevent invalid values * error * add changeset * component * add tests * fix tests * spec ts * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fixes * Remove manual ip address check and launch counter (#8884) * changes * add changeset * hash * changes * remove * changes * rename * internal * changes * remove json path * merge * fix tests --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Remove deprecated documentation (#8940) * remove logoutbutton page * remove huggingfacedatasetsaver * Use HTTP Livestreaming for audio/video streaming out (#8906) * HTTP live streaming * type check * fix code * Fix code * add code * Video demo * Fix tests * Update notebook * Add guide * Fix demo * Allow downloading * revert * Fix download filename * lint * notebooks * fix video demo * Fix config * Fix audio repeated play bug * Improve guide * fix audio? * Use cantina * Code * type check * add code * Use runtimeerror * Add code * Adds `strict_cors` parameter to `launch()` (#8959) * prevent null origin requests by default * changes * add changeset * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fi * Streaming out tweaks (#8976) * Tweaks * Better * typo * lint * Improve url downloads for file objects (#8978) * changes * changes * add changeset * add changeset * Ci security tweaks (#9010) * asd * asd * asd * asd * asd * asd * asd * asd * asd * asd * asd * asd * asd * asd * change * changes * changes * changes * changes * changes * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: pngwn <hello@pngwn.io> * merge main (#9050) * lint * Have gr.on set value at start as well (#9065) * changes * changes * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> * No token passed by default in `gr.load()` (#9069) * changes * add changeset * docstring * change * client changess --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * changes * Set default `format` in `gr.Audio` to be `None` to avoid unnecessary preprocessing (#9073) * audio format * add changeset * lint * docstring * format * fix tests * tweaks * refactor * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Streaming inputs for 5.0 (#8941) * Fix code * Add code * Add code * working demo * hacky video * Add code for video * Fixing some code * clean queieing * low streaming mode audio * reworking * remove console * Pretty good spot * Delete unused * consolidate * Add progress bar * Set time limit null * delete * Fix then issue * merge out * Add code * clean up * Remove base64 * Add code * minor bugs * End stream * Fix rerender * remove unwanted * Address streaming comments * Commit file lol * ;int * lint backend * lint * Fix queue status. Stream_every defined in event * Fix types * Add code * Add code * Add code * queue time * docstring wording * Fix typo * add changeset --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 3.10 (#9133) * Deprecate passing a tuple for gr.Code value (#9132) * Add code * add changeset * lint * type check --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Postprocess hardening (#9122) * hardenning * Fix code * add changeset * Fix tests * add test fuzzer * Clean up * revert * Fix * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Drop python 3.8 and 3.9 (#9140) * drop support for python 3.8 and 3.9 * add changeset * format * changes * add changeset * changes * add changeset * changes * 3.10 * string * tweak * tweak * changes * changes * format * more tweaks * update actions * website docs build * fix func tests * rev req * test fix * remove ruff rule for zip strict --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Raise WasmUnsupportedError for ffmpeg usage on Lite (#9130) * Raise WasmUnsupportedError for ffmpeg usage on Lite * add changeset * add changeset * Add WasmUnsupportedError in Audio._convert_to_adts * Add WasmUnsupportedError in processing_utils.audio_to_file * Fix * Raise WasmUnsupportedError from processing_utils.audio_from_file * empty commit --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Video gallery (#9052) * video support * tests and backend changes * undo main merge * upload fix * Revert "undo main merge" This reverts commite2a26e6d28
. * type fixes * format * pr fixes * Update gradio/components/gallery.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update gradio/components/gallery.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * type fix * thumbnails * thumbnail type * remove thumbnail generation * add changeset * test fixes * test fixes * python test fix * python test fixc * fix * fix * story fix --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Open audio/image input stream only when queue is ready (#9149) * fix * submit logic happens in Blocks * add changeset * trigger ci * trigger ci * Add code * Add code * Fix retrigger refactor * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * trigger ci * update (#9176) * File access security guide (#9156) * first draft Add code Add code Add code emphasis * suggestions * redirects * add changeset * trigger ci * typos --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix guide * Fix notebook (#9181) * DNS resolver on ip check (#9150) * changes * changes * add changeset * chaanges * changes * changes * changes * changes * add caching and whitelist * remove hf.space --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Change dark mode color theme from `gray` to `zinc` (#9175) * use zinc as neutral colour * add changeset * fix test * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Streaming Guides (#9173) * Fix unified case * commit * Add code * add changeset * notebook * Lint * delete * Fix code * fix tests * File access security guide (#9156) * first draft Add code Add code Add code emphasis * suggestions * redirects * add changeset * trigger ci * typos --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * redirect * typos * link * fix * See what the problem is * less time * fix * try again with busted cache * try again * Code * Demo and code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: pngwn <hello@pngwn.io> * Fix (#9215) * Deprecate type='tuples for chatbot and focus chatbot docs on 'messages' type (#9194) * Remove grey background behind all components (#9213) * remove panel padding and border * add changeset * revert radius change * add changeset * format * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * changes * changes * Revert "changes" This reverts commit9e2ae43330
. * Revert "changes" This reverts commit9f4c3eec0f
. * Redesign `gr.Slider()` (#9197) * redesign slider * add changeset * fix test * update slider design * slider tweaks --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 🔡 Update default core Gradio font (#9204) * change sans font from Source Sans Pro to Asap * change misc refs to Source Sans Pro * add changeset * revert old changes * add changeset * replace asap with IBM Plex Sans * add changeset * repalce asaps with ibm plex * tweak --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Redesign `gr.Button()` (#9167) * *add new button styling *add origin theme class with old button styling * add changeset * remove new colour * add changeset * color and radius tweaks * remove neutral hue change * *update button demo *style tweaks * format * fix test * use white text on primary btn * adjust primary orange * tweak colour * disabled fixes * refactor * refactor * refactor * refactor * remove non-button changes * test * revert test * make cancel btn darker in light mode * change button stories to interactive * fix slider test * fix test * tweak * tweak secondary colour to work with gr.group() * add changeset * tweak * tweak button hover grey --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: pngwn <hello@pngwn.io> * Minor changes to flagging for 5.0 (#9166) * init * add changeset * rename * flagging * flagging * changes * update * changes * more * more * changes * add changeset * fix test * changes * update demos --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Adds TLS to FRP tunnel (#9218) * tls tunnel * add changeset * add changeset * arm64 * checksums * changes * tweaks * tweak --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Move buttons from chat_interface into Chatbot (#9201) * First draft * type check * test * add changeset * Fix e2e styling and tests * fix lint * Add code * add changeset * Remove shadow of copy button, make a box * lint * add changeset * fix padding + lint * make buttons a bit smaller. use different icon * Add code * add changeset * tunneling * fix * Add code * fix + lint * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Improve button consistency across light/dark mode (#9236) * ensure btn borders are consistent in light and dark mode * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Redesign `gr.Tabs()` (#9199) * Decrease component radii and remove input shadows (#9216) * fix py chatbot test * Lighten secondary button grey fill (#9245) * lighten secondary button grey * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Stop using `multiprocessing` in `flagging.CSVLogger` on Lite v5 (#9246) * Fix the default demo code for the dev * Use ClassicCSVLogger for Lite * add changeset * add changeset * Revert "Use ClassicCSVLogger for Lite" This reverts commita89fcb1134
. * Avoid using multiprocessing.Lock on Lite * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * prefix api routes (#9200) * Built-in submit and stop buttons in `gr.ChatInterface(multimodal=False)`, adding `submit_btn` and `stop_btn` props to `gr.Textbox()` and `gr.MultimodalText()` (#9235) * Add submit_btn prop to the Textbox component and use it in ChatInterface for a consistent design with multimodal=True * Change the default value of MultimodalTextbox.submit_btn to False for consistency with Textbox.submit_btn * add changeset * Set the default value of Textbox.submit_btn as False for consistency * add changeset * Add stop_btn prop to Textbox and MultimodalTextbox and use it in ChatInterface for a built-in stop button * add changeset * add changeset * Fix Python tests * Fix JS tests * nit fix * Make the submit and stop buttons not exclusive for simplicity * Replace the Pause icon with the Square icon * add changeset * Update the docstring * Preserve the original values of textbox.submit_btn and .stop_btn after running a generator * Show the stop button only when the submit_btn is enabled from the beginning * Respect the user-specified values of submit_btn and stop_btn * Add ChatInterface.submit_btn and .stop_btn params * Fix Textbox.svelte style with string values of submit_btn and stop_btn * Fix Python tests * Fix Python code * fix test * Apply suggestions from code review Co-authored-by: Abubakar Abid <abubakar@huggingface.co> --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Adds a "huggingface" button variant, and makes it the default for `gr.LoginButton` and `gr.DuplicateButton` (#9254) * add clear variant * add changeset * duplicate button * add changeset * tweak * tweak * format * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#8829) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * fix cs * chore: update versions (beta) (#9262) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Improve Icon Button consistency (#9250) * * update icon buttons * add image editor specific icon button * tweak hover * margin tweak * add changeset * improve gr.Video button UI * radius tweak * ensure even spacing * fix typechecks * add changeset * revert irrelevant changes * typefix * fix image editor buttons * fix download link icon * disable undo if no change events dispatched in model3d and video * add changeset * add iconbuttonwrapper around gallery share btn --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * format * Fix reload mode and streaming in 5.0 dev (#9269) * Fix reload mode + streaming * use api_prefix for reload * add changeset * comments --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Raise error instead of warning if checksums for binary do not match (#9268) * tunneling * add changeset * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix stop recording button colors (#9270) * Add code * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Match style of textbox stop button to submit button (#9280) * Change styles * styling * add changeset * add changeset * consistent width --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Raise ChecksumMismatchError (#9300) * raise mismatch * add changeset * changes * format backend --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Further tweak to is_in_or_equal (#9282) * Add code * add changeset * add changeset * is_launching tweak * no resolve symlink * Use has_launched --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * changes (#9301) * Fixes race condition in `update_root_in_config` (#9306) * test * lint * tests * add changeset * change * lint * reduce num attempts --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * docstring * Adds ability to block event trigger when file is uploading (#9253) * input_ready * add changeset * update value * block event when input waiting * format * add changeset * dep index --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 5.0 merge (#9318) * merge * pythong format * fix typecheck * fix json scroll * fix test --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> * Proposal: remove `gr.make_waveform` and remove `matplotlib` as a dependency (#9312) * remove matplotlib * add changeset * remove tests, demo * Fix the Lite worker to set the matplotlib backend engine only when the matplotlib package is installed * add changeset * Fix comment --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> * Dont move files to cache automatically in chatbot postprocess (#9303) * Fix * add changeset * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Remove two dependencies: `importlib_resources` and `urllib3` (if not in Wasm) (#9321) * remove-importlib_resources * add changeset * urllib only on wasm * add changeset * format * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Make `gr.Image` preprocessing more efficient (#9314) * image preprocess * add changeset * changes * fix tests * docstring * docstring * image * fix * format * changes * fix test * changes * handle svg files --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 5.0 merge take 2 (#9326) * chore: update versions (#9168) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore: update error.svx (#9291) * chore: update error.svx occured -> occurred * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Update docs to use new Image init (#9304) * Fix scrollbars everywhere (#9276) * changes * add changeset * scroll fix * remove .json css, adjust scroll height to account for label --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> * Separate starlette.Request from PredictBody. Only set in new PredictBodyInternal object (#9279) * use custom pydantic type annotatio * add changeset * Add code * add changeset * rework * dont use arbitrary_types_allowed * add changeset * fix test * revert path change --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Add root_url to components created by gr.render (#9267) * Fix bug * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fileformat whitelist (#9302) * changes * add changeset * Update routes.py --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix multiple trigger bug when function has js (#9188) * add code * add changeset * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (#9298) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * fix json * harden test * harden test * clean * format * add changeset * notebooks * fix old conflicts --------- Co-authored-by: Gradio PR Bot <121576822+gradio-pr-bot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Tayfun Sen <tayfun.sen@gmail.com> Co-authored-by: aliabid94 <aabid94@gmail.com> Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com> * Add `matplotlib` requirements to several demos (#9327) * add matplotlib req to demos * add matplotlib req to demos * more * update reqs * clean * format * Standardize `height` across components and add `max_height` and `min_height` parameters where appropriate (#9313) * height * changelog * height * add changeset * add changeset * add changeset * revert clog * more changes * add changeset * chatbot * restore * filexplorer * add changeset * json * add changeset * markdown * add changeset * row * add changeset * height * format frontend * revert * max height * fix * fix docstrings * fix py tests * add story --------- Co-authored-by: Dawood <dawoodkhan82@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix typo in `tunneling.py` (#9338) * tunneling fix * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 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 (#9328) * textbox * add changeset * changes' * revert demos * add changeset * add changeset * changes * multimodal * add changeset * changes * format * revert demo * fix test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Improve is_in_or_equal and fuzzer (#9341) * improve fuzzer * test case * add changeset * verify * Update gradio/utils.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Add info about Powershell client (#9343) * clients * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Remove lite/theme.css from the Git-managed file tree (#9335) * Delete js/lite/src/theme.css from the Git managed file tree as it's dynamically generated * Remove lite-related npm scripts from spa/package.json * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 9227 chatinterface retry bug (#9316) * first draft * add code * tip * add changeset * delete dead code * Type check notebook * consolidate like section with guide * Add comments * add value * Lint * lint * guide --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Move icons into `IconButtonWrapper` (#9261) * * update icon buttons * add image editor specific icon button * tweak hover * margin tweak * add changeset * improve gr.Video button UI * radius tweak * ensure even spacing * fix typechecks * add changeset * revert irrelevant changes * typefix * fix image editor buttons * fix download link icon * disable undo if no change events dispatched in model3d and video * use icons with iconbuttonwrapper * add iconbuttonwrapper around gallery share btn * Revert "add iconbuttonwrapper around gallery share btn" This reverts commit4605302df4
. * add changeset * design fixes * add changeset * move status tracker progress to bottom of component * add changeset * use iconbutton for like/dislike * fix lint error * fix type errors * type errors * fix test * revert undo icon change * btn spacing --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Added gradio-in-r (#9340) * Added gradio-in-r * add changeset * section * remove * tweaks * delete changeset * R * Updated using-gradio-in-other-programming-languages.md --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Enhance Lite E2E tests and fix a networking problem on Lite (#9333) * Add Lite E2E test to check a matplotlib problem which was fixed in https://github.com/gradio-app/gradio/pull/9312 * Restore js/app/test/image_remote_url.spec.ts, which was deleted in https://github.com/gradio-app/gradio/pull/8716 * Fix tootils import * Format * Fix processing_utils.resolve_with_google_dns to use the HTTPX client instead of urllib so it works on Lite * add changeset * add changeset * Move js/app/test/image_remote_url.spec.ts -> js/spa/test/image_remote_url.spec.ts * Use pyodide.http in resolve_with_google_dns on Lite --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Do not attach `content_disposition_type = "attachment"` headers for files explicitly allowed by developer (#9348) * changes * add changeset * format * fix type * type * add test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix overflowing markdown in Chatbot (#9260) * fix markdown overflowing table * add changeset * revert undo icon * add changeset * Revert "revert undo icon" This reverts commit855b012a20
. * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Small tweak to how thoughts are shown in `gr.Chatbot` (#9359) * thiknk chat * add changeset * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Use `container` param in `gr.Markdown` (#9356) * * add param * add story * add changeset * Use IconButton for copy btn * fix test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * run format * Fixes website build in 5.0-dev (#9382) * changes * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Small tweaks to improve the DX for the "tuples"/"messages" argument in `gr.Chatbot` (#9358) * change format * format * add changeset * revert * revert --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Update babylon.js to `v7` for `gr.Model3D` (#9377) * update package.json * add changeset * add changeset * update pnpm lock * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix `gr.ImageEditor` toolbar cutoff (#9371) * fix wrap alignment * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Adds LLM to the Playground (#9233) * simple system prompt * faster model and streaming and better system prompt * changes * changes * add changeset * formatting * add placeholder wheel * changes * save to db finally working * clean * fix open in playground button * better fix for open in playground * changes * format * fix * try * remove * remove make waveform * fix * using fallback mode and other changes * add show_error * fix lite refresh issue * fix css * add demo * format * lite using latest wheel * cleanup * formatting * hack fix for b vs betta * formatting --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Refactor lazy caching (#9361) * changes * lazy * redo lazy * add changeset * changes * helpers * docstrings' * lint * Update guides/04_additional-features/09_environment-variables.md Co-authored-by: Charles <charles@huggingface.co> * Update gradio/chat_interface.py Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> * Update gradio/chat_interface.py Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> * tolerant --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Charles <charles@huggingface.co> Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> * Added max lines and overflow scrollbar for `gr.Code` (#9311) * add max lines for gr.Code * add changeset * revert default lines to 5 * fix tests * lint --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix File Types for MultimodalTextbox (#9393) * fix file_types * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Prevent HTML and Markdown height changing when status is hidden (#9363) * fix markdown height changing * * add min_height param to html * prevent height from changing based on status * add changeset * add changeset * param desc change * fix test * format * * add max height to html * share css_units func * add changeset * fix backend test * fe --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Object Detection From Webcam Stream Guide (#9336) * guides * Add demo * guide * Add info about Powershell client (#9343) * clients * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Remove lite/theme.css from the Git-managed file tree (#9335) * Delete js/lite/src/theme.css from the Git managed file tree as it's dynamically generated * Remove lite-related npm scripts from spa/package.json * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * 9227 chatinterface retry bug (#9316) * first draft * add code * tip * add changeset * delete dead code * Type check notebook * consolidate like section with guide * Add comments * add value * Lint * lint * guide --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Move icons into `IconButtonWrapper` (#9261) * * update icon buttons * add image editor specific icon button * tweak hover * margin tweak * add changeset * improve gr.Video button UI * radius tweak * ensure even spacing * fix typechecks * add changeset * revert irrelevant changes * typefix * fix image editor buttons * fix download link icon * disable undo if no change events dispatched in model3d and video * use icons with iconbuttonwrapper * add iconbuttonwrapper around gallery share btn * Revert "add iconbuttonwrapper around gallery share btn" This reverts commit4605302df4
. * add changeset * design fixes * add changeset * move status tracker progress to bottom of component * add changeset * use iconbutton for like/dislike * fix lint error * fix type errors * type errors * fix test * revert undo icon change * btn spacing --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Added gradio-in-r (#9340) * Added gradio-in-r * add changeset * section * remove * tweaks * delete changeset * R * Updated using-gradio-in-other-programming-languages.md --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Enhance Lite E2E tests and fix a networking problem on Lite (#9333) * Add Lite E2E test to check a matplotlib problem which was fixed in https://github.com/gradio-app/gradio/pull/9312 * Restore js/app/test/image_remote_url.spec.ts, which was deleted in https://github.com/gradio-app/gradio/pull/8716 * Fix tootils import * Format * Fix processing_utils.resolve_with_google_dns to use the HTTPX client instead of urllib so it works on Lite * add changeset * add changeset * Move js/app/test/image_remote_url.spec.ts -> js/spa/test/image_remote_url.spec.ts * Use pyodide.http in resolve_with_google_dns on Lite --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Do not attach `content_disposition_type = "attachment"` headers for files explicitly allowed by developer (#9348) * changes * add changeset * format * fix type * type * add test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix overflowing markdown in Chatbot (#9260) * fix markdown overflowing table * add changeset * revert undo icon * add changeset * Revert "revert undo icon" This reverts commit855b012a20
. * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * demo name * Guide on Streaming Video for Object Detection (#9365) * Add code * notebooks * Suggestions * Add gif * Small tweak to how thoughts are shown in `gr.Chatbot` (#9359) * thiknk chat * add changeset * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Use `container` param in `gr.Markdown` (#9356) * * add param * add story * add changeset * Use IconButton for copy btn * fix test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * small fixes (#9347) * Updated Guide: Real Time Speech Recognition (#9349) * Update real-time-speech-recognition.md added necessary dependency * Update run.py updated code to handle cases with stereo microphone * Update real-time-speech-recognition.md improved english * Update run.py updated code for streaming * Update run.py * chunk space uploads (#9360) * chunk space uploads * Update upload_demo_to_space.py Co-authored-by: Lucain <lucainp@gmail.com> * address comments + tweak CI --------- Co-authored-by: Lucain <lucainp@gmail.com> * add find (#9368) * New branch (#9369) * add find * fix syntax * New branch (#9370) * add find * fix syntax * add hidden files * run format * Testing CI (#9379) * remove unnecessary redirects * add changeset * fix * formatting --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fixes website build in 5.0-dev (#9382) * changes * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Small tweaks to improve the DX for the "tuples"/"messages" argument in `gr.Chatbot` (#9358) * change format * format * add changeset * revert * revert --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Update babylon.js to `v7` for `gr.Model3D` (#9377) * update package.json * add changeset * add changeset * update pnpm lock * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix `gr.ImageEditor` toolbar cutoff (#9371) * fix wrap alignment * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * add lite upload (#9385) * fix sha (#9386) * Fix lite ci (#9387) * fix sha * fix name * fix name * Add code * feedback * link * add changeset * code * check * Update guides/04_additional-features/02_streaming-outputs.md * Update guides/07_streaming/02_object-detection-from-webcam.md --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> Co-authored-by: Ifeanyi Idiaye <72707830+Ifeanyi55@users.noreply.github.com> Co-authored-by: Julien Chaumond <julien@huggingface.co> Co-authored-by: Nikita Krasnytskyi <nikita.kras.kyiv@gmail.com> Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: Lucain <lucainp@gmail.com> Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * Fix gradio.js aws path (#9397) * fix folder path for beta * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Trigger state change event on iterators (#9299) * Fix render async * add changeset * Fix regression * tests * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * add local fonts and update themes (#9367) * add local fonts and update themes * add changeset * tweak * - dedent css - fix if logic * store theme fonts locally + update themes with `LocalFont` * lint * fix font loading --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: freddyaboulton <alfonsoboulton@gmail.com> * Disable liking user message in chatbot by default but make it configurable (#9323) * Code * add changeset * revert * test" " * typo * Fix code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix Cached Examples for Streamed Media (#9373) * fix problem * add changeset * gitignore * lint * Add code * Add code * Fix extension * add changeset * unit test * typecheck * typecheck * lint * test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fixes annoying height bug in playground (#9402) * fix styling issue * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Chatbot Examples (#8966) * examples * examples * first pass * remove comments * remove comments * add changeset * Fix chatinterface e2e test (#9104) * Refactor test * comment * Fix image * add changeset * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix version + pkg name (#9110) * fix version + pkg name * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix dev (#9115) * fix asset locations * fix changeset * Be able to set optimizeDeps options in gradio.config.js (#9091) * Add code * add changeset * build * Remove unused import --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Better text styling on docs (#9108) * margin and size * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * setup npm-previews of all packages (#9118) * add workflow * fix pkg jsons * workflow name * add changeset * fix * add changeset * fix build command --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix chatinterface multimodal bug (#9119) * Add test * add changeset * comments --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chatbot examples * examples changes * chatinterface * chatinterface * pr fixes * remove html demo change * suggestion width * type fixes * format * comment our examples test * remove cache * comment example caching test * bug fix * bug fix * format * type fix * Proposal: remove `gr.make_waveform` and remove `matplotlib` as a dependency (#9312) * remove matplotlib * add changeset * remove tests, demo * Fix the Lite worker to set the matplotlib backend engine only when the matplotlib package is installed * add changeset * Fix comment --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> * Dont move files to cache automatically in chatbot postprocess (#9303) * Fix * add changeset * Add code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * test fix * format * changes * update guide * cache examples * add changeset * format * changes * changes * changes * changes * changes * changes * format * fixes * test chat interface fixes --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com> Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> Co-authored-by: Ali Abid <aliabid94@gmail.com> * Ssr part 2 (#9339) * chore: update versions (beta) (#9263) * Center icon in button when no text is present (#9405) * center button when only icon is present * add changeset * format * add story --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix SSR apps on spaces (#9412) * test * add changeset * test * test * test * fix? * fix? * add changeset * fix * fix * fix * fix * fix finally? * fix * add changeset * lints etc * add changeset * remove spa mode * fix env * typing * change * lint * remove node logs * remove node logs --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Small fixes to `gr.Dataframe` and chatbot docs (#9376) * docs * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9416) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * 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 (#9406) * demo * add warnings * add changeset * add changeset * add doc section * format * fix check * fix typing issues * docs * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * fix css (#9427) * fix css * add changeset * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Dawood <dawoodkhan82@gmail.com> * Fix Python unit tests on `5.0-dev` branch (#9432) * fix python unit tests * changes * changes * fix * Lite: HTTPX client improvement (#9413) * Use the httpx client in resolve_with_google_dns both for normal and Lite * add changeset * Set decode_content=False * Add type hints * Set decode_content=True and remove the Content-Encoding header so the content is decoded by urllib3 instead of httpx * Fix * Add comment * Restore the original resolve_with_google_dns to make such changes in another PR * add changeset * Update comment * Updated the test requirements * Fix type hint * Revert "Updated the test requirements" This reverts commit2e43584a87
. --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Use or `pathlib.Path` objects to indicate filepaths for `css`, `js`, and `head` parameters (#9448) * format * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Reduce analytics that are collected (#9447) * reduce analytics collected * analytics * add changeset * bring back css --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix SSR mode flag with `mount_gradio_app` and revert changes to pytests (#9446) * Revert "Fix Python unit tests on `5.0-dev` branch (#9432)" This reverts commit278645b649
. * revert changes to pytest * add changeset * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Small changes to caching (#9438) * caching changes * add changeset * typo * typo * changes * fix * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Refactoring playground (#9426) * Use @gradio/code.BaseCode instead of its default export like https://github.com/gradio-app/gradio/pull/8804 * Delete unused code * add changeset * Fix * Rename a variable to be descriptive * Mount single <Code> instance instead of creating one for each demo * Fix the initial value passed to createGradioApp * Use const instead of let * Rename variable * Update * Fix layout * Restore the preset requirements * Delete unused variable * Add type hint * Attach the keydown handler directly to the input element instead of the window object * Add code editor widget --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Chatbot bug fixes (#9453) * image fixes * add changeset * more fixes * fix * fix * css fixes --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update object detection guide (#9456) * First draft * Add code * update guide * add changeset * revert * edits * Add code * notebooks * fix code --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Start/stop recoding from the backend. Add guide on conversational chatbots (#9419) * Add code * stop displatch * first draft * edit * add changeset * lint * Docstring * Make recording * fix video * fix guide link * redirect * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Improve UI on the Playground (#9462) * ai prompt always there * fix overflow * better ui and suggested prompts * cancel generation and showing erro * formatting * add changeset * fix height issue and button * changes * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix. Triggered dataframe change event for header change (#9469) * Fix. Triggered dataframe change event for header change * add changeset * lint * add changeset --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9420) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * format * Fix package.json `exports` of @gradio/preview (#9468) * Fix package.json exports of @gradio/preview * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix plots (#9464) * fix * add changeset * lint * clean * ts * format * add changeset * format * remove test that is wrong * fixxxxxx * add changeset * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Pre/post-processing download requests (#9383) * changes * add changeset * changes * change * changes * changes * changes * changes * change * changes * changes * changes * changes * changes * changes * changes * Update gradio/processing_utils.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * changes * changes * changes * changes * changes * changes * Fix Lite's ASGI receiver to convert memoryview to bytes as the multipart parser called in98cbcaef82/gradio/route_utils.py (L650)
calls bytes.find() and memoryview objects don't have the method * add changeset * Fix async_get_with_secure_transport to use the unsecure but Pyodide-compatible transport in the case of Wasm --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> * Add support for 3rd party providers to `gr.load`, and provide a better UX for conversational models (#9470) * changes * add changeset * changes * changes * docstring * chatbot * changes * fix test * format * add changeset * update req * remove conversational * add changeset * remove args --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9476) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix `slider-color` var (#9481) * fix slider-color * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Playground requirements tab (#9460) * Add a tab navigation to the playground so the user can specify the requirement packages * Add Transformers.js.py demo and fix the playground to install the requirements immediately after switching the demo * add changeset * Format * add changeset * Fix preview flex * Add requirements to the share link and deploy to Spaces buttons * Add requirements.txt to each demo * Format * Update notebooks * Fix * Update --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> * Fix prettierignore (#9486) * Minor fixes to docs and a demo (#9493) * small things * docstring * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Check for `file_types` parameter in the backend (#9431) * file check fix * format * add changeset * tests * add changeset * Update gradio/components/file.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update client/python/gradio_client/utils.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * fixes * fixes * test fix * test fix * test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Ensure media queries work for SSR mode (#9428) * asd * asd * fix * add changeset * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix custom component CLI unit tests (#9495) * fix * fix audio test * fix template * add changeset --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fixes: Chatbot examples for custom chatbot + rename `suggestions` -> `examples` (#9488) * fix * add changeset * notebooks * fixes * fix * type fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * UI theme fixes (#9496) * changes * add changeset * changes * changes * add changeset * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Centre components within `Block` when height and width are set (#9504) * add centering margin * add changeset * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Improve `gr.Code` (#9450) * fix check icon on download * * apply unused min_width param * improve gutter spacing * hide `BlockLabel` spacing if `show_label` is false * format * tweak spacing, remove `fit-content` * add changeset * revert height change * fix * allow setting max_lines to None * add line wrapping * add wrap lines param * fix type error * fix py test * fix type check --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix node process to run with correct server name (#9506) * fix node process * add changeset * add changeset * format * cleanup --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * yaml lint * Add Bokeh plot demo (#9423) * Add Bokeh plot demo * Update notebook --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Expanding AI Playground Prompt for Qwen (#9452) * expand prompt for qwen * add changeset * clean * add changeset * heavily modify prompt * changes * many changes * fix weird syntax error * fix * ? * changes * fix requirements * formatting --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * docs: update 01_quickstart.md (#9515) arbitary -> arbitrary Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix change triggers for dropdown and radio (#9519) * fix change triggers * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9485) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix single select dropdown (#9526) * Set the default value of Dropdown as undefined instead of [] when multiselect=false * Refactoring * add changeset * Fix tests --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Hide x axis labels (#9497) * changes * add changeset * fix --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Add Jinja2 language to Code component (#9545) * Add jinja2 codemirror language * add jinja2 * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Disable sagemaker_check() for now (#9546) * Add is_sagemaker param to Blocks, so sagemaker_check() can be explicitly disabled * revert * add changeset * format * add changeset --------- Co-authored-by: Mate Valko <> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9544) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Update gr.ColorPicker UI (#9570) * update color picker dialog * add changeset * add tinycolor types * fix disabled param * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix cut off in gr.ImageEditor (#9525) * remove default height value * remove canvas w x h * revert comment * add changeset * add changeset * fix stage-wrap shift * empty tweak * add changeset * tweak * type fix * test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Change caching to occur not at the creation of a `gr.Examples()` but when the Blocks is actually launched (#9508) * changes * changes * add changeset * await * add changeset * changes * changes * changes * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Add `css_paths` and `head_paths` parameters (#9524) * paths * add changeset * changes * fixes * add new lines * remove js_paths * add changeset * format --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix most flaky Python tests in `5.0-dev` branch (#9550) * fix flaky tests * add changeset * token * changes * fixes * hf token * format * test * format * root url * format * fix * fix tests * add changeset * remove huggingface hub fixed version * add changeset * remove print --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Api info fix (#9522) * api-info-fix * add changeset * Add with fallback * route utils * update --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Send Streaming data over Websocket if possible. Also support base64 output format for images. (#9483) * b64 first draft * ws * onMount + demos and guide * guide * add changeset * Add code * lint * type check * Have a fallback * Add code * delete unneccessary input * API info tweaks * Revert type param type hint * Add code * api-info-fix * add changeset * Add with fallback * route utils * update * final tweaks * type check * fix * add changeset * fix * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Allow `info=` to render markdown (#9521) * allow info to render markdown * add changeset * update docstrings * format * fixes * add changeset * fix * add changeset * root * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Equal height columns (#9577) * changes * add changeset * add changeset --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix chatinterface embedding height issues (#9571) * changes * add changeset * changes * changes * lint --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * chore: update versions (beta) (#9572) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Update gr.Dataframe UI with action popover (#9575) * add dialog for actions * add changeset * add story * add changeset * * remove temp select column * change open dialog UX in mobile * fix border * fix test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Disable the submit button and enter-key submit when the text is empty (#9583) * Disable the submit button and enter-key submit when the text is empty * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Chat Interface Multimodal Fix & Fallback to `gr.Examples()` (#9584) * fic * add changeset * fallback to original examples * add changeset * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix `gr.Chatbot` panels layout (#9499) * fix avatar margins * separate component logic out and add message component * fix panel mode and upate chatbot buttons * add changeset * fix type check * fix typecheck * reduce message padding * fix empty message * revert css removal * test * test * Revert "test" This reverts commit40c9e396a1
. * Revert "test" This reverts commit660a6b06ea
. * move message-wrap styes * bubble width + markdown tweak * fix test --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Equal height in row false by default (#9591) * changes * add changeset * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix reload mode (#9576) * Ddebuig * Fixing * fix * notebook * add changeset * SSR MODE * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Chatbot autoscroll (#9582) * Auto scroll on the Chatbot component * Scroll down button's design * Parameterize autoscroll * add changeset * Fix test * Fix * Fix the <Video> component to dispatch the load event after the metadata is loaded * add changeset * Add tick * Fix * Fix * Add loadstart and loadeddata and remove load event forwarder from <Video> because <video> doesn't dispatch the load event * Fix <Player> as well * Fix * Add pending_message as the scroll trigger and remove unnecessary tick * Refactoring <Image> * add changeset * Fix * Fix * icon fix * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Dawood <dawoodkhan82@gmail.com> * Only move files to the cache that have a meta key (#9589) * Fix code * add changeset * Code * test * tests * add changeset * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Some more chatbot fixes (#9593) * some fixes * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix favicon in ssr mode (#9592) * Fix favicon * fix * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * SSR e2e + fixes (#9590) * fix tests in ssr mode * fix loading race condition * fix some tests * add ci * cleanup * format * add changeset * clean * test name * broke it, fix * fix? * clean * lint --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Deep equal check with hash (#9580) * check_equal_by_hash * add changeset * changes * change * changes * hash --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Adding new themes to Gradio 5.0 (#9437) * Adding citrus, colorful and headlines themes * add changeset * Fix from running format_backend * Add new themes to theming guide * Rename headlines theme demo file * changes * add changeset * changes * changes * fix name * revert kitchen sink * ocean and docs * changes * add changeset * changes * changes --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abid <aliabid94@gmail.com> * Fix custom component CLI on main/5.0 (#9482) * Add code * add changeset * WIP * add changeset * Working SSR * WIP * Proper ssr build * fix paths * fix * revert .vscode change * format * lint * uncomment * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Fix e2e test bug (#9597) * code * try this out * Fix markdown code copy/check button in gr.Chatbot (#9598) * fix broken copy button * tweak * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * Update `README.md` with 5.0 info and GIFs (#9564) * update gif * format * changes * readme * language * Tweak gr.Dataframe menu UX (#9601) * * show menu on click * only show column options in headers * improve spacing * add changeset * fix type check --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> * chore: update versions (beta) (#9586) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Ensure undo/try shows for final bot message in gr.Chatbot (#9600) * fix undo and retry reactivity * add changeset * tweak * fix ts check * changes * changes --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abid <aliabid94@gmail.com> * chore: update versions (beta) (#9604) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com> Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> Co-authored-by: aliabid94 <aabid94@gmail.com> Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Gradio PR Bot <121576822+gradio-pr-bot@users.noreply.github.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com> Co-authored-by: Tayfun Sen <tayfun.sen@gmail.com> Co-authored-by: Ifeanyi Idiaye <72707830+Ifeanyi55@users.noreply.github.com> Co-authored-by: Charles <charles@huggingface.co> Co-authored-by: Michał Pstrąg <m.pstrag.kontakt@gmail.com> Co-authored-by: Julien Chaumond <julien@huggingface.co> Co-authored-by: Nikita Krasnytskyi <nikita.kras.kyiv@gmail.com> Co-authored-by: Lucain <lucainp@gmail.com> Co-authored-by: Joodith <67360396+Joodith@users.noreply.github.com> Co-authored-by: Col0ring <47329987+Col0ring@users.noreply.github.com> Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> Co-authored-by: Mate Valko <3168272+vmatt@users.noreply.github.com> Co-authored-by: Allison <allison@huggingface.co>
935 lines
30 KiB
Python
935 lines
30 KiB
Python
import asyncio
|
|
import os
|
|
import tempfile
|
|
import time
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
import gradio_client as grc
|
|
import pytest
|
|
from gradio_client import media_data
|
|
from gradio_client import utils as client_utils
|
|
from pydub import AudioSegment
|
|
from starlette.testclient import TestClient
|
|
from tqdm import tqdm
|
|
|
|
import gradio as gr
|
|
from gradio import helpers, utils
|
|
from gradio.route_utils import API_PREFIX
|
|
|
|
|
|
@patch("gradio.utils.get_cache_folder", return_value=Path(tempfile.mkdtemp()))
|
|
class TestExamples:
|
|
def test_handle_single_input(self, patched_cache_folder):
|
|
examples = gr.Examples(["hello", "hi"], gr.Textbox())
|
|
assert examples.non_none_processed_examples.as_list() == [["hello"], ["hi"]]
|
|
|
|
examples = gr.Examples([["hello"]], gr.Textbox())
|
|
assert examples.non_none_processed_examples.as_list() == [["hello"]]
|
|
|
|
examples = gr.Examples(["test/test_files/bus.png"], gr.Image())
|
|
assert (
|
|
client_utils.encode_file_to_base64(
|
|
examples.non_none_processed_examples.as_list()[0][0]["path"]
|
|
)
|
|
== media_data.BASE64_IMAGE
|
|
)
|
|
|
|
def test_handle_multiple_inputs(self, patched_cache_folder):
|
|
examples = gr.Examples(
|
|
[["hello", "test/test_files/bus.png"]], [gr.Textbox(), gr.Image()]
|
|
)
|
|
assert examples.non_none_processed_examples.as_list()[0][0] == "hello"
|
|
assert (
|
|
client_utils.encode_file_to_base64(
|
|
examples.non_none_processed_examples.as_list()[0][1]["path"]
|
|
)
|
|
== media_data.BASE64_IMAGE
|
|
)
|
|
|
|
def test_handle_directory(self, patched_cache_folder):
|
|
examples = gr.Examples("test/test_files/images", gr.Image())
|
|
assert len(examples.non_none_processed_examples.as_list()) == 2
|
|
for row in examples.non_none_processed_examples.as_list():
|
|
for output in row:
|
|
assert (
|
|
client_utils.encode_file_to_base64(output["path"])
|
|
== media_data.BASE64_IMAGE
|
|
)
|
|
|
|
def test_handle_directory_with_log_file(self, patched_cache_folder):
|
|
examples = gr.Examples(
|
|
"test/test_files/images_log", [gr.Image(label="im"), gr.Text()]
|
|
)
|
|
ex = client_utils.traverse(
|
|
examples.non_none_processed_examples.as_list(),
|
|
lambda s: client_utils.encode_file_to_base64(s["path"]),
|
|
lambda x: isinstance(x, dict) and Path(x["path"]).exists(),
|
|
)
|
|
assert ex == [
|
|
[media_data.BASE64_IMAGE, "hello"],
|
|
[media_data.BASE64_IMAGE, "hi"],
|
|
]
|
|
for sample in examples.dataset.samples:
|
|
assert os.path.isabs(sample[0]["path"])
|
|
|
|
def test_examples_per_page(self, patched_cache_folder):
|
|
examples = gr.Examples(["hello", "hi"], gr.Textbox(), examples_per_page=2)
|
|
assert examples.dataset.get_config()["samples_per_page"] == 2
|
|
|
|
def test_no_preprocessing(self, patched_cache_folder, connect):
|
|
with gr.Blocks() as demo:
|
|
image = gr.Image()
|
|
textbox = gr.Textbox()
|
|
|
|
examples = gr.Examples(
|
|
examples=["test/test_files/bus.png"],
|
|
inputs=image,
|
|
outputs=textbox,
|
|
fn=lambda x: x["path"],
|
|
cache_examples=True,
|
|
preprocess=False,
|
|
)
|
|
|
|
with connect(demo):
|
|
prediction = examples.load_from_cache(0)
|
|
assert (
|
|
client_utils.encode_file_to_base64(prediction[0]) == media_data.BASE64_IMAGE
|
|
)
|
|
|
|
def test_no_postprocessing(self, patched_cache_folder, connect):
|
|
def im(x):
|
|
return [
|
|
{
|
|
"image": {
|
|
"path": "test/test_files/bus.png",
|
|
},
|
|
"caption": "hi",
|
|
}
|
|
]
|
|
|
|
with gr.Blocks() as demo:
|
|
text = gr.Textbox()
|
|
gall = gr.Gallery()
|
|
|
|
examples = gr.Examples(
|
|
examples=["hi"],
|
|
inputs=text,
|
|
outputs=gall,
|
|
fn=im,
|
|
cache_examples=True,
|
|
postprocess=False,
|
|
)
|
|
|
|
with connect(demo):
|
|
prediction = examples.load_from_cache(0)
|
|
file = prediction[0].root[0].image.path
|
|
assert client_utils.encode_url_or_file_to_base64(
|
|
file
|
|
) == client_utils.encode_url_or_file_to_base64("test/test_files/bus.png")
|
|
|
|
|
|
def test_setting_cache_dir_env_variable(monkeypatch, connect):
|
|
temp_dir = tempfile.mkdtemp()
|
|
monkeypatch.setenv("GRADIO_EXAMPLES_CACHE", temp_dir)
|
|
with gr.Blocks() as demo:
|
|
image = gr.Image()
|
|
image2 = gr.Image()
|
|
|
|
examples = gr.Examples(
|
|
examples=["test/test_files/bus.png"],
|
|
inputs=image,
|
|
outputs=image2,
|
|
fn=lambda x: x,
|
|
cache_examples=True,
|
|
)
|
|
|
|
with connect(demo):
|
|
prediction = examples.load_from_cache(0)
|
|
path_to_cached_file = Path(prediction[0].path)
|
|
assert utils.is_in_or_equal(path_to_cached_file, temp_dir)
|
|
monkeypatch.delenv("GRADIO_EXAMPLES_CACHE", raising=False)
|
|
|
|
|
|
@patch("gradio.utils.get_cache_folder", return_value=Path(tempfile.mkdtemp()))
|
|
class TestExamplesDataset:
|
|
def test_no_headers(self, patched_cache_folder):
|
|
examples = gr.Examples("test/test_files/images_log", [gr.Image(), gr.Text()])
|
|
assert examples.dataset.headers == []
|
|
|
|
def test_all_headers(self, patched_cache_folder):
|
|
examples = gr.Examples(
|
|
"test/test_files/images_log",
|
|
[gr.Image(label="im"), gr.Text(label="your text")],
|
|
)
|
|
assert examples.dataset.headers == ["im", "your text"]
|
|
|
|
def test_some_headers(self, patched_cache_folder):
|
|
examples = gr.Examples(
|
|
"test/test_files/images_log", [gr.Image(label="im"), gr.Text()]
|
|
)
|
|
assert examples.dataset.headers == ["im", ""]
|
|
|
|
def test_example_labels(self, patched_cache_folder):
|
|
examples = gr.Examples(
|
|
examples=[
|
|
[5, "add", 3],
|
|
[4, "divide", 2],
|
|
[-4, "multiply", 2.5],
|
|
[0, "subtract", 1.2],
|
|
],
|
|
inputs=[
|
|
gr.Number(),
|
|
gr.Radio(["add", "divide", "multiply", "subtract"]),
|
|
gr.Number(),
|
|
],
|
|
example_labels=["add", "divide", "multiply", "subtract"],
|
|
)
|
|
assert examples.dataset.sample_labels == [
|
|
"add",
|
|
"divide",
|
|
"multiply",
|
|
"subtract",
|
|
]
|
|
|
|
|
|
def test_example_caching_relaunch(connect):
|
|
def combine(a, b):
|
|
return a + " " + b
|
|
|
|
with gr.Blocks() as demo:
|
|
txt = gr.Textbox(label="Input")
|
|
txt_2 = gr.Textbox(label="Input 2")
|
|
txt_3 = gr.Textbox(value="", label="Output")
|
|
btn = gr.Button(value="Submit")
|
|
btn.click(combine, inputs=[txt, txt_2], outputs=[txt_3])
|
|
gr.Examples(
|
|
[["hi", "Adam"], ["hello", "Eve"]],
|
|
[txt, txt_2],
|
|
txt_3,
|
|
combine,
|
|
cache_examples=True,
|
|
api_name="examples",
|
|
)
|
|
|
|
with connect(demo) as client:
|
|
assert client.predict(1, api_name="/examples") == (
|
|
"hello",
|
|
"Eve",
|
|
"hello Eve",
|
|
)
|
|
|
|
# Let the server shut down
|
|
time.sleep(1)
|
|
|
|
with connect(demo) as client:
|
|
assert client.predict(1, api_name="/examples") == (
|
|
"hello",
|
|
"Eve",
|
|
"hello Eve",
|
|
)
|
|
|
|
|
|
@patch("gradio.utils.get_cache_folder", return_value=Path(tempfile.mkdtemp()))
|
|
class TestProcessExamples:
|
|
def test_caching(self, patched_cache_folder, connect):
|
|
io = gr.Interface(
|
|
lambda x: f"Hello {x}",
|
|
"text",
|
|
"text",
|
|
examples=[["World"], ["Dunya"], ["Monde"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(1)
|
|
assert prediction[0] == "Hello Dunya"
|
|
|
|
def test_example_caching_relaunch(self, patched_cache_folder, connect):
|
|
def combine(a, b):
|
|
return a + " " + b
|
|
|
|
with gr.Blocks() as demo:
|
|
txt = gr.Textbox(label="Input")
|
|
txt_2 = gr.Textbox(label="Input 2")
|
|
txt_3 = gr.Textbox(value="", label="Output")
|
|
btn = gr.Button(value="Submit")
|
|
btn.click(combine, inputs=[txt, txt_2], outputs=[txt_3])
|
|
gr.Examples(
|
|
[["hi", "Adam"], ["hello", "Eve"]],
|
|
[txt, txt_2],
|
|
txt_3,
|
|
combine,
|
|
cache_examples=True,
|
|
api_name="examples",
|
|
)
|
|
|
|
with connect(demo) as client:
|
|
assert client.predict(1, api_name="/examples") == (
|
|
"hello",
|
|
"Eve",
|
|
"hello Eve",
|
|
)
|
|
|
|
with connect(demo) as client:
|
|
assert client.predict(1, api_name="/examples") == (
|
|
"hello",
|
|
"Eve",
|
|
"hello Eve",
|
|
)
|
|
|
|
def test_caching_image(self, patched_cache_folder, connect):
|
|
io = gr.Interface(
|
|
lambda x: x,
|
|
"image",
|
|
"image",
|
|
examples=[["test/test_files/bus.png"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction[0].path.endswith(".webp")
|
|
|
|
def test_caching_audio(self, patched_cache_folder, connect):
|
|
io = gr.Interface(
|
|
lambda x: x,
|
|
"audio",
|
|
"audio",
|
|
examples=[["test/test_files/audio_sample.wav"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
file = prediction[0].path
|
|
assert client_utils.encode_url_or_file_to_base64(file).startswith(
|
|
"data:audio/wav;base64,UklGRgA/"
|
|
)
|
|
|
|
def test_caching_with_update(self, patched_cache_folder, connect):
|
|
io = gr.Interface(
|
|
lambda x: gr.update(visible=False),
|
|
"text",
|
|
"image",
|
|
examples=[["World"], ["Dunya"], ["Monde"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(1)
|
|
assert prediction[0] == {
|
|
"visible": False,
|
|
"__type__": "update",
|
|
}
|
|
|
|
def test_caching_with_mix_update(self, patched_cache_folder, connect):
|
|
io = gr.Interface(
|
|
lambda x: [gr.update(lines=4, value="hello"), "test/test_files/bus.png"],
|
|
"text",
|
|
["text", "image"],
|
|
examples=[["World"], ["Dunya"], ["Monde"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(1)
|
|
assert prediction[0] == {
|
|
"lines": 4,
|
|
"value": "hello",
|
|
"__type__": "update",
|
|
}
|
|
|
|
def test_caching_with_dict(self, patched_cache_folder, connect):
|
|
text = gr.Textbox()
|
|
out = gr.Label()
|
|
|
|
io = gr.Interface(
|
|
lambda _: {text: gr.update(lines=4, interactive=False), out: "lion"},
|
|
"textbox",
|
|
[text, out],
|
|
examples=["abc"],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction == [
|
|
{"lines": 4, "__type__": "update", "interactive": False},
|
|
gr.Label.data_model(**{"label": "lion", "confidences": None}),
|
|
]
|
|
|
|
def test_caching_with_generators(self, patched_cache_folder, connect):
|
|
def test_generator(x):
|
|
for y in range(len(x)):
|
|
yield "Your output: " + x[: y + 1]
|
|
|
|
io = gr.Interface(
|
|
test_generator,
|
|
"textbox",
|
|
"textbox",
|
|
examples=["abcdef"],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction[0] == "Your output: abcdef"
|
|
|
|
def test_caching_with_generators_and_streamed_output(
|
|
self, patched_cache_folder, connect
|
|
):
|
|
file_dir = Path(Path(__file__).parent, "test_files")
|
|
audio = str(file_dir / "audio_sample.wav")
|
|
|
|
def test_generator(x):
|
|
for y in range(int(x)):
|
|
yield audio, y * 5
|
|
|
|
io = gr.Interface(
|
|
test_generator,
|
|
"number",
|
|
[gr.Audio(streaming=True), "number"],
|
|
examples=[3],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
len_input_audio = len(AudioSegment.from_file(audio))
|
|
len_output_audio = len(AudioSegment.from_file(prediction[0].path))
|
|
length_ratio = len_output_audio / len_input_audio
|
|
assert 3 <= round(length_ratio, 1) < 4 # might not be exactly 3x
|
|
assert float(prediction[1]) == 10.0
|
|
|
|
def test_caching_with_async_generators(self, patched_cache_folder, connect):
|
|
async def test_generator(x):
|
|
for y in range(len(x)):
|
|
yield "Your output: " + x[: y + 1]
|
|
|
|
io = gr.Interface(
|
|
test_generator,
|
|
"textbox",
|
|
"textbox",
|
|
examples=["abcdef"],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction[0] == "Your output: abcdef"
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_raise_helpful_error_message_if_providing_partial_examples(
|
|
self, patched_cache_folder, tmp_path
|
|
):
|
|
def foo(a, b):
|
|
return a + b
|
|
|
|
with pytest.warns(
|
|
UserWarning,
|
|
match="^Examples will be cached but not all input components have",
|
|
):
|
|
with pytest.raises(Exception):
|
|
io = gr.Interface(
|
|
foo,
|
|
inputs=["text", "text"],
|
|
outputs=["text"],
|
|
examples=[["foo"], ["bar"]],
|
|
cache_examples=True,
|
|
)
|
|
await io.examples_handler._start_caching()
|
|
|
|
with pytest.warns(
|
|
UserWarning,
|
|
match="^Examples will be cached but not all input components have",
|
|
):
|
|
with pytest.raises(Exception):
|
|
io = gr.Interface(
|
|
foo,
|
|
inputs=["text", "text"],
|
|
outputs=["text"],
|
|
examples=[["foo", "bar"], ["bar", None]],
|
|
cache_examples=True,
|
|
)
|
|
await io.examples_handler._start_caching()
|
|
|
|
def foo_no_exception(a, b=2):
|
|
return a * b
|
|
|
|
gr.Interface(
|
|
foo_no_exception,
|
|
inputs=["text", "number"],
|
|
outputs=["text"],
|
|
examples=[["foo"], ["bar"]],
|
|
cache_examples=True,
|
|
)
|
|
|
|
def many_missing(a, b, c):
|
|
return a * b
|
|
|
|
with pytest.warns(
|
|
UserWarning,
|
|
match="^Examples will be cached but not all input components have",
|
|
):
|
|
with pytest.raises(Exception):
|
|
io = gr.Interface(
|
|
many_missing,
|
|
inputs=["text", "number", "number"],
|
|
outputs=["text"],
|
|
examples=[["foo", None, None], ["bar", 2, 3]],
|
|
cache_examples=True,
|
|
)
|
|
await io.examples_handler._start_caching()
|
|
|
|
def test_caching_with_batch(self, patched_cache_folder, connect):
|
|
def trim_words(words, lens):
|
|
trimmed_words = [
|
|
word[:length] for word, length in zip(words, lens, strict=False)
|
|
]
|
|
return [trimmed_words]
|
|
|
|
io = gr.Interface(
|
|
trim_words,
|
|
["textbox", gr.Number(precision=0)],
|
|
["textbox"],
|
|
batch=True,
|
|
max_batch_size=16,
|
|
examples=[["hello", 3], ["hi", 4]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction == ["hel"]
|
|
|
|
def test_caching_with_batch_multiple_outputs(self, patched_cache_folder, connect):
|
|
def trim_words(words, lens):
|
|
trimmed_words = [
|
|
word[:length] for word, length in zip(words, lens, strict=False)
|
|
]
|
|
return trimmed_words, lens
|
|
|
|
io = gr.Interface(
|
|
trim_words,
|
|
["textbox", gr.Number(precision=0)],
|
|
["textbox", gr.Number(precision=0)],
|
|
batch=True,
|
|
max_batch_size=16,
|
|
examples=[["hello", 3], ["hi", 4]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert prediction == ["hel", "3"]
|
|
|
|
def test_caching_with_non_io_component(self, patched_cache_folder, connect):
|
|
def predict(name):
|
|
return name, gr.update(visible=True)
|
|
|
|
with gr.Blocks() as demo:
|
|
t1 = gr.Textbox()
|
|
with gr.Column(visible=False) as c:
|
|
t2 = gr.Textbox()
|
|
|
|
examples = gr.Examples(
|
|
[["John"], ["Mary"]],
|
|
fn=predict,
|
|
inputs=[t1],
|
|
outputs=[t2, c], # type: ignore
|
|
cache_examples=True,
|
|
)
|
|
|
|
with connect(demo):
|
|
prediction = examples.load_from_cache(0)
|
|
assert prediction == ["John", {"visible": True, "__type__": "update"}]
|
|
|
|
def test_end_to_end(self, patched_cache_folder):
|
|
def concatenate(str1, str2):
|
|
return str1 + str2
|
|
|
|
with gr.Blocks() as demo:
|
|
t1 = gr.Textbox()
|
|
t2 = gr.Textbox()
|
|
t1.submit(concatenate, [t1, t2], t2)
|
|
|
|
gr.Examples(
|
|
[["Hello,", None], ["Michael", None]],
|
|
inputs=[t1, t2],
|
|
api_name="load_example",
|
|
)
|
|
|
|
app, _, _ = demo.launch(prevent_thread_lock=True)
|
|
client = TestClient(app)
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [0]})
|
|
assert response.json()["data"] == [
|
|
{
|
|
"lines": 1,
|
|
"max_lines": 20,
|
|
"show_label": True,
|
|
"container": True,
|
|
"min_width": 160,
|
|
"autofocus": False,
|
|
"autoscroll": True,
|
|
"elem_classes": [],
|
|
"rtl": False,
|
|
"show_copy_button": False,
|
|
"__type__": "update",
|
|
"visible": True,
|
|
"value": "Hello,",
|
|
"type": "text",
|
|
"stop_btn": False,
|
|
"submit_btn": False,
|
|
}
|
|
]
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [1]})
|
|
assert response.json()["data"] == [
|
|
{
|
|
"lines": 1,
|
|
"max_lines": 20,
|
|
"show_label": True,
|
|
"container": True,
|
|
"min_width": 160,
|
|
"autofocus": False,
|
|
"autoscroll": True,
|
|
"elem_classes": [],
|
|
"rtl": False,
|
|
"show_copy_button": False,
|
|
"__type__": "update",
|
|
"visible": True,
|
|
"value": "Michael",
|
|
"type": "text",
|
|
"stop_btn": False,
|
|
"submit_btn": False,
|
|
}
|
|
]
|
|
|
|
def test_end_to_end_cache_examples(self, patched_cache_folder):
|
|
def concatenate(str1, str2):
|
|
return f"{str1} {str2}"
|
|
|
|
with gr.Blocks() as demo:
|
|
t1 = gr.Textbox()
|
|
t2 = gr.Textbox()
|
|
t1.submit(concatenate, [t1, t2], t2)
|
|
|
|
gr.Examples(
|
|
examples=[["Hello,", "World"], ["Michael", "Jordan"]],
|
|
inputs=[t1, t2],
|
|
outputs=[t2],
|
|
fn=concatenate,
|
|
cache_examples=True,
|
|
api_name="load_example",
|
|
)
|
|
|
|
app, _, _ = demo.launch(prevent_thread_lock=True)
|
|
client = TestClient(app)
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [0]})
|
|
assert response.json()["data"] == ["Hello,", "World", "Hello, World"]
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [1]})
|
|
assert response.json()["data"] == ["Michael", "Jordan", "Michael Jordan"]
|
|
|
|
def test_end_to_end_lazy_cache_examples(self, patched_cache_folder):
|
|
def image_identity(image, string):
|
|
return image
|
|
|
|
with gr.Blocks() as demo:
|
|
i1 = gr.Image()
|
|
t = gr.Textbox()
|
|
i2 = gr.Image()
|
|
|
|
gr.Examples(
|
|
examples=[
|
|
["test/test_files/cheetah1.jpg", "cheetah"],
|
|
["test/test_files/bus.png", "bus"],
|
|
],
|
|
inputs=[i1, t],
|
|
outputs=[i2],
|
|
fn=image_identity,
|
|
cache_examples=True,
|
|
cache_mode="lazy",
|
|
api_name="load_example",
|
|
)
|
|
|
|
app, _, _ = demo.launch(prevent_thread_lock=True)
|
|
client = TestClient(app)
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [0]})
|
|
data = response.json()["data"]
|
|
assert data[0]["value"]["path"].endswith("cheetah1.jpg")
|
|
assert data[1]["value"] == "cheetah"
|
|
|
|
response = client.post(f"{API_PREFIX}/api/load_example/", json={"data": [1]})
|
|
data = response.json()["data"]
|
|
assert data[0]["value"]["path"].endswith("bus.png")
|
|
assert data[1]["value"] == "bus"
|
|
|
|
|
|
def test_multiple_file_flagging(tmp_path, connect):
|
|
with patch("gradio.utils.get_cache_folder", return_value=tmp_path):
|
|
io = gr.Interface(
|
|
fn=lambda *x: list(x),
|
|
inputs=[
|
|
gr.Image(type="filepath", label="frame 1"),
|
|
gr.Image(type="filepath", label="frame 2"),
|
|
],
|
|
outputs=[gr.Files()],
|
|
examples=[["test/test_files/cheetah1.jpg", "test/test_files/bus.png"]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
|
|
assert len(prediction[0].root) == 2
|
|
assert all(isinstance(d, gr.FileData) for d in prediction[0].root)
|
|
|
|
|
|
def test_examples_keep_all_suffixes(tmp_path, connect):
|
|
with patch("gradio.utils.get_cache_folder", return_value=Path(tempfile.mkdtemp())):
|
|
file_1 = tmp_path / "foo.bar.txt"
|
|
file_1.write_text("file 1")
|
|
file_2 = tmp_path / "file_2"
|
|
file_2.mkdir(parents=True)
|
|
file_2 = file_2 / "foo.bar.txt"
|
|
file_2.write_text("file 2")
|
|
io = gr.Interface(
|
|
fn=lambda x: x.name,
|
|
inputs=gr.File(),
|
|
outputs=[gr.File()],
|
|
examples=[[str(file_1)], [str(file_2)]],
|
|
cache_examples=True,
|
|
)
|
|
with connect(io):
|
|
prediction = io.examples_handler.load_from_cache(0)
|
|
assert Path(prediction[0].path).read_text() == "file 1"
|
|
assert prediction[0].orig_name == "foo.bar.txt"
|
|
assert prediction[0].path.endswith("foo.bar.txt")
|
|
prediction = io.examples_handler.load_from_cache(1)
|
|
assert Path(prediction[0].path).read_text() == "file 2"
|
|
assert prediction[0].orig_name == "foo.bar.txt"
|
|
assert prediction[0].path.endswith("foo.bar.txt")
|
|
|
|
|
|
class TestProgressBar:
|
|
@pytest.mark.asyncio
|
|
async def test_progress_bar(self):
|
|
with gr.Blocks() as demo:
|
|
name = gr.Textbox()
|
|
greeting = gr.Textbox()
|
|
button = gr.Button(value="Greet")
|
|
|
|
def greet(s, prog=gr.Progress()):
|
|
prog(0, desc="start")
|
|
time.sleep(0.15)
|
|
for _ in prog.tqdm(range(4), unit="iter"):
|
|
time.sleep(0.15)
|
|
time.sleep(0.15)
|
|
for _ in tqdm(["a", "b", "c"], desc="alphabet"):
|
|
time.sleep(0.15)
|
|
return f"Hello, {s}!"
|
|
|
|
button.click(greet, name, greeting)
|
|
demo.queue(max_size=1).launch(prevent_thread_lock=True)
|
|
assert demo.local_url
|
|
|
|
client = grc.Client(demo.local_url)
|
|
job = client.submit("Gradio")
|
|
|
|
status_updates = []
|
|
while not job.done():
|
|
status = job.status()
|
|
update = (
|
|
status.progress_data[0].index if status.progress_data else None,
|
|
status.progress_data[0].desc if status.progress_data else None,
|
|
)
|
|
if update != (None, None) and (
|
|
len(status_updates) == 0 or status_updates[-1] != update
|
|
):
|
|
status_updates.append(update)
|
|
time.sleep(0.05)
|
|
|
|
assert status_updates == [
|
|
(None, "start"),
|
|
(0, None),
|
|
(1, None),
|
|
(2, None),
|
|
(3, None),
|
|
(4, None),
|
|
]
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_progress_bar_track_tqdm(self):
|
|
with gr.Blocks() as demo:
|
|
name = gr.Textbox()
|
|
greeting = gr.Textbox()
|
|
button = gr.Button(value="Greet")
|
|
|
|
def greet(s, prog=gr.Progress(track_tqdm=True)):
|
|
prog(0, desc="start")
|
|
time.sleep(0.15)
|
|
for _ in prog.tqdm(range(4), unit="iter"):
|
|
time.sleep(0.15)
|
|
time.sleep(0.15)
|
|
for _ in tqdm(["a", "b", "c"], desc="alphabet"):
|
|
time.sleep(0.15)
|
|
return f"Hello, {s}!"
|
|
|
|
button.click(greet, name, greeting)
|
|
demo.queue(max_size=1).launch(prevent_thread_lock=True)
|
|
assert demo.local_url
|
|
|
|
client = grc.Client(demo.local_url)
|
|
job = client.submit("Gradio")
|
|
|
|
status_updates = []
|
|
while not job.done():
|
|
status = job.status()
|
|
update = (
|
|
status.progress_data[0].index if status.progress_data else None,
|
|
status.progress_data[0].desc if status.progress_data else None,
|
|
)
|
|
if update != (None, None) and (
|
|
len(status_updates) == 0 or status_updates[-1] != update
|
|
):
|
|
status_updates.append(update)
|
|
time.sleep(0.05)
|
|
|
|
assert status_updates == [
|
|
(None, "start"),
|
|
(0, None),
|
|
(1, None),
|
|
(2, None),
|
|
(3, None),
|
|
(4, None),
|
|
(0, "alphabet"),
|
|
(1, "alphabet"),
|
|
(2, "alphabet"),
|
|
]
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.flaky(reruns=5)
|
|
async def test_progress_bar_track_tqdm_without_iterable(self):
|
|
def greet(s, _=gr.Progress(track_tqdm=True)):
|
|
with tqdm(total=len(s)) as progress_bar:
|
|
for _c in s:
|
|
progress_bar.update()
|
|
time.sleep(0.1)
|
|
return f"Hello, {s}!"
|
|
|
|
demo = gr.Interface(greet, "text", "text")
|
|
demo.queue().launch(prevent_thread_lock=True)
|
|
assert demo.local_url
|
|
|
|
client = grc.Client(demo.local_url)
|
|
job = client.submit("Gradio")
|
|
|
|
status_updates = []
|
|
while not job.done():
|
|
status = job.status()
|
|
update = (
|
|
status.progress_data[0].index if status.progress_data else None,
|
|
status.progress_data[0].unit if status.progress_data else None,
|
|
)
|
|
if update != (None, None) and (
|
|
len(status_updates) == 0 or status_updates[-1] != update
|
|
):
|
|
status_updates.append(update)
|
|
time.sleep(0.05)
|
|
|
|
assert status_updates[-1] == (6, "steps")
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_info_and_warning_alerts(self):
|
|
def greet(s):
|
|
for _c in s:
|
|
gr.Info(f"Letter {_c}")
|
|
time.sleep(0.15)
|
|
if len(s) < 5:
|
|
gr.Warning("Too short!")
|
|
time.sleep(0.15)
|
|
return f"Hello, {s}!"
|
|
|
|
demo = gr.Interface(greet, "text", "text")
|
|
demo.queue().launch(prevent_thread_lock=True)
|
|
assert demo.local_url
|
|
|
|
client = grc.Client(demo.local_url)
|
|
job = client.submit("Jon")
|
|
|
|
status_updates = []
|
|
while not job.done():
|
|
status = job.status()
|
|
update = status.log
|
|
if update is not None and (
|
|
len(status_updates) == 0 or status_updates[-1] != update
|
|
):
|
|
status_updates.append(update)
|
|
time.sleep(0.05)
|
|
|
|
assert status_updates == [
|
|
("Letter J", "info"),
|
|
("Letter o", "info"),
|
|
("Letter n", "info"),
|
|
("Too short!", "warning"),
|
|
]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize("async_handler", [True, False])
|
|
async def test_info_isolation(async_handler: bool):
|
|
async def greet_async(name):
|
|
await asyncio.sleep(2)
|
|
gr.Info(f"Hello {name}")
|
|
await asyncio.sleep(1)
|
|
return name
|
|
|
|
def greet_sync(name):
|
|
time.sleep(2)
|
|
gr.Info(f"Hello {name}")
|
|
time.sleep(1)
|
|
return name
|
|
|
|
demo = gr.Interface(
|
|
greet_async if async_handler else greet_sync,
|
|
"text",
|
|
"text",
|
|
concurrency_limit=2,
|
|
)
|
|
demo.launch(prevent_thread_lock=True)
|
|
|
|
async def session_interaction(name, delay=0):
|
|
assert demo.local_url
|
|
client = grc.Client(demo.local_url)
|
|
job = client.submit(name)
|
|
|
|
status_updates = []
|
|
while not job.done():
|
|
status = job.status()
|
|
update = status.log
|
|
if update is not None and (
|
|
len(status_updates) == 0 or status_updates[-1] != update
|
|
):
|
|
status_updates.append(update)
|
|
time.sleep(0.05)
|
|
return status_updates[-1][0] if status_updates else None
|
|
|
|
alice_logs, bob_logs = await asyncio.gather(
|
|
session_interaction("Alice"),
|
|
session_interaction("Bob", delay=1),
|
|
)
|
|
|
|
assert alice_logs == "Hello Alice"
|
|
assert bob_logs == "Hello Bob"
|
|
|
|
|
|
def test_check_event_data_in_cache():
|
|
def get_select_index(evt: gr.SelectData):
|
|
return evt.index
|
|
|
|
with pytest.raises(gr.Error):
|
|
helpers.special_args(
|
|
get_select_index,
|
|
inputs=[],
|
|
event_data=helpers.EventData(
|
|
None,
|
|
{
|
|
"index": {"path": "foo", "meta": {"_type": "gradio.FileData"}},
|
|
"value": "whatever",
|
|
},
|
|
),
|
|
)
|