gradio/guides/04_additional-features/07_sharing-your-app.md
Abubakar Abid 6f95286337
5.0 dev -> main (#8843)
* 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 commit e2a26e6d28.

* 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 commit 9e2ae43330.

* Revert "changes"

This reverts commit 9f4c3eec0f.

* 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 commit a89fcb1134.

* 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 commit 4605302df4.

* 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 commit 855b012a20.

* 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 commit 4605302df4.

* 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 commit 855b012a20.

* 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 commit 2e43584a87.

---------

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 commit 278645b649.

* 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 in 98cbcaef82/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 commit 40c9e396a1.

* Revert "test"

This reverts commit 660a6b06ea.

* 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>
2024-10-08 22:17:17 -07:00

22 KiB

Sharing Your App

In this Guide, we dive more deeply into the various aspects of sharing a Gradio app with others. We will cover:

  1. Sharing demos with the share parameter
  2. Hosting on HF Spaces
  3. Embedding hosted spaces
  4. Using the API page
  5. Accessing network requests
  6. Mounting within FastAPI
  7. Authentication
  8. Analytics

Sharing Demos

Gradio demos can be easily shared publicly by setting share=True in the launch() method. Like this:

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 🚀

This generates a public, shareable link that you can send to anybody! When you send this link, the user on the other side can try out the model in their browser. Because the processing happens on your device (as long as your device stays on), you don't have to worry about any packaging any dependencies.

sharing

A share link usually looks something like this: https://07ff8706ab.gradio.live. Although the link is served through the Gradio Share Servers, these servers are only a proxy for your local server, and do not store any data sent through your app. Share links expire after 72 hours. (it is also possible to set up your own Share Server on your own cloud server to overcome this restriction.)

Tip: Keep in mind that share links are publicly accessible, meaning that anyone can use your model for prediction! Therefore, make sure not to expose any sensitive information through the functions you write, or allow any critical changes to occur on your device. Or you can add authentication to your Gradio app as discussed below.

Note that by default, share=False, which means that your server is only running locally. (This is the default, except in Google Colab notebooks, where share links are automatically created). As an alternative to using share links, you can use use SSH port-forwarding to share your local server with specific users.

Hosting on HF Spaces

If you'd like to have a permanent link to your Gradio demo on the internet, use Hugging Face Spaces. Hugging Face Spaces provides the infrastructure to permanently host your machine learning model for free!

After you have created a free Hugging Face account, you have two methods to deploy your Gradio app to Hugging Face Spaces:

  1. From terminal: run gradio deploy in your app directory. The CLI will gather some basic metadata and then launch your app. To update your space, you can re-run this command or enable the Github Actions option to automatically update the Spaces on git push.

  2. From your browser: Drag and drop a folder containing your Gradio model and all related files here. See this guide how to host on Hugging Face Spaces for more information, or watch the embedded video:

Embedding Hosted Spaces

Once you have hosted your app on Hugging Face Spaces (or on your own server), you may want to embed the demo on a different website, such as your blog or your portfolio. Embedding an interactive demo allows people to try out the machine learning model that you have built, without needing to download or install anything — right in their browser! The best part is that you can embed interactive demos even in static websites, such as GitHub pages.

There are two ways to embed your Gradio demos. You can find quick links to both options directly on the Hugging Face Space page, in the "Embed this Space" dropdown option:

Embed this Space dropdown option

Embedding with Web Components

Web components typically offer a better experience to users than IFrames. Web components load lazily, meaning that they won't slow down the loading time of your website, and they automatically adjust their height based on the size of the Gradio app.

To embed with Web Components:

  1. Import the gradio JS library into into your site by adding the script below in your site (replace {GRADIO_VERSION} in the URL with the library version of Gradio you are using).
<script
	type="module"
	src="https://gradio.s3-us-west-2.amazonaws.com/{GRADIO_VERSION}/gradio.js"
></script>
  1. Add
<gradio-app src="https://$your_space_host.hf.space"></gradio-app>

element where you want to place the app. Set the src= attribute to your Space's embed URL, which you can find in the "Embed this Space" button. For example:

<gradio-app
	src="https://abidlabs-pytorch-image-classifier.hf.space"
></gradio-app>

You can see examples of how web components look on the Gradio landing page.

You can also customize the appearance and behavior of your web component with attributes that you pass into the <gradio-app> tag:

  • src: as we've seen, the src attributes links to the URL of the hosted Gradio demo that you would like to embed
  • space: an optional shorthand if your Gradio demo is hosted on Hugging Face Space. Accepts a username/space_name instead of a full URL. Example: gradio/Echocardiogram-Segmentation. If this attribute attribute is provided, then src does not need to be provided.
  • control_page_title: a boolean designating whether the html title of the page should be set to the title of the Gradio app (by default "false")
  • initial_height: the initial height of the web component while it is loading the Gradio app, (by default "300px"). Note that the final height is set based on the size of the Gradio app.
  • container: whether to show the border frame and information about where the Space is hosted (by default "true")
  • info: whether to show just the information about where the Space is hosted underneath the embedded app (by default "true")
  • autoscroll: whether to autoscroll to the output when prediction has finished (by default "false")
  • eager: whether to load the Gradio app as soon as the page loads (by default "false")
  • theme_mode: whether to use the dark, light, or default system theme mode (by default "system")
  • render: an event that is triggered once the embedded space has finished rendering.

Here's an example of how to use these attributes to create a Gradio app that does not lazy load and has an initial height of 0px.

<gradio-app
	space="gradio/Echocardiogram-Segmentation"
	eager="true"
	initial_height="0px"
></gradio-app>

Here's another example of how to use the render event. An event listener is used to capture the render event and will call the handleLoadComplete() function once rendering is complete.

<script>
	function handleLoadComplete() {
		console.log("Embedded space has finished rendering");
	}

	const gradioApp = document.querySelector("gradio-app");
	gradioApp.addEventListener("render", handleLoadComplete);
</script>

Note: While Gradio's CSS will never impact the embedding page, the embedding page can affect the style of the embedded Gradio app. Make sure that any CSS in the parent page isn't so general that it could also apply to the embedded Gradio app and cause the styling to break. Element selectors such as header { ... } and footer { ... } will be the most likely to cause issues.

Embedding with IFrames

To embed with IFrames instead (if you cannot add javascript to your website, for example), add this element:

<iframe src="https://$your_space_host.hf.space"></iframe>

Again, you can find the src= attribute to your Space's embed URL, which you can find in the "Embed this Space" button.

Note: if you use IFrames, you'll probably want to add a fixed height attribute and set style="border:0;" to remove the boreder. In addition, if your app requires permissions such as access to the webcam or the microphone, you'll need to provide that as well using the allow attribute.

API Page

You can use almost any Gradio app as an API! In the footer of a Gradio app like this one, you'll see a "Use via API" link.

Use via API

This is a page that lists the endpoints that can be used to query the Gradio app, via our supported clients: either the Python client, or the JavaScript client. For each endpoint, Gradio automatically generates the parameters and their types, as well as example inputs, like this.

The endpoints are automatically created when you launch a Gradio Interface. If you are using Gradio Blocks, you can also set up a Gradio API page, though we recommend that you explicitly name each event listener, such as

btn.click(add, [num1, num2], output, api_name="addition")

This will add and document the endpoint /api/addition/ to the automatically generated API page. Otherwise, your API endpoints will appear as "unnamed" endpoints.

Accessing the Network Request Directly

When a user makes a prediction to your app, you may need the underlying network request, in order to get the request headers (e.g. for advanced authentication), log the client's IP address, getting the query parameters, or for other reasons. Gradio supports this in a similar manner to FastAPI: simply add a function parameter whose type hint is gr.Request and Gradio will pass in the network request as that parameter. Here is an example:

import gradio as gr

def echo(text, request: gr.Request):
    if request:
        print("Request headers dictionary:", request.headers)
        print("IP address:", request.client.host)
        print("Query parameters:", dict(request.query_params))
    return text

io = gr.Interface(echo, "textbox", "textbox").launch()

Note: if your function is called directly instead of through the UI (this happens, for example, when examples are cached, or when the Gradio app is called via API), then request will be None. You should handle this case explicitly to ensure that your app does not throw any errors. That is why we have the explicit check if request.

Mounting Within Another FastAPI App

In some cases, you might have an existing FastAPI app, and you'd like to add a path for a Gradio demo. You can easily do this with gradio.mount_gradio_app().

Here's a complete example:

$code_custom_path

Note that this approach also allows you run your Gradio apps on custom paths (http://localhost:8000/gradio in the example above).

Authentication

Password-protected app

You may wish to put an authentication page in front of your app to limit who can open your app. With the auth= keyword argument in the launch() method, you can provide a tuple with a username and password, or a list of acceptable username/password tuples; Here's an example that provides password-based authentication for a single user named "admin":

demo.launch(auth=("admin", "pass1234"))

For more complex authentication handling, you can even pass a function that takes a username and password as arguments, and returns True to allow access, False otherwise.

Here's an example of a function that accepts any login where the username and password are the same:

def same_auth(username, password):
    return username == password
demo.launch(auth=same_auth)

If you have multiple users, you may wish to customize the content that is shown depending on the user that is logged in. You can retrieve the logged in user by accessing the network request directly as discussed above, and then reading the .username attribute of the request. Here's an example:

import gradio as gr

def update_message(request: gr.Request):
    return f"Welcome, {request.username}"

with gr.Blocks() as demo:
    m = gr.Markdown()
    demo.load(update_message, None, m)
    
demo.launch(auth=[("Abubakar", "Abubakar"), ("Ali", "Ali")])

Note: For authentication to work properly, third party cookies must be enabled in your browser. This is not the case by default for Safari or for Chrome Incognito Mode.

If users visit the /logout page of your Gradio app, they will automatically be logged out and session cookies deleted. This allows you to add logout functionality to your Gradio app as well. Let's update the previous example to include a log out button:

import gradio as gr

def update_message(request: gr.Request):
    return f"Welcome, {request.username}"

with gr.Blocks() as demo:
    m = gr.Markdown()
    logout_button = gr.Button("Logout", link="/logout")
    demo.load(update_message, None, m)
    
demo.launch(auth=[("Pete", "Pete"), ("Dawood", "Dawood")])

Note: Gradio's built-in authentication provides a straightforward and basic layer of access control but does not offer robust security features for applications that require stringent access controls (e.g. multi-factor authentication, rate limiting, or automatic lockout policies).

OAuth (Login via Hugging Face)

Gradio natively supports OAuth login via Hugging Face. In other words, you can easily add a "Sign in with Hugging Face" button to your demo, which allows you to get a user's HF username as well as other information from their HF profile. Check out this Space for a live demo.

To enable OAuth, you must set hf_oauth: true as a Space metadata in your README.md file. This will register your Space as an OAuth application on Hugging Face. Next, you can use gr.LoginButton to add a login button to your Gradio app. Once a user is logged in with their HF account, you can retrieve their profile by adding a parameter of type gr.OAuthProfile to any Gradio function. The user profile will be automatically injected as a parameter value. If you want to perform actions on behalf of the user (e.g. list user's private repos, create repo, etc.), you can retrieve the user token by adding a parameter of type gr.OAuthToken. You must define which scopes you will use in your Space metadata (see documentation for more details).

Here is a short example:

$code_login_with_huggingface

When the user clicks on the login button, they get redirected in a new page to authorize your Space.

Users can revoke access to their profile at any time in their settings.

As seen above, OAuth features are available only when your app runs in a Space. However, you often need to test your app locally before deploying it. To test OAuth features locally, your machine must be logged in to Hugging Face. Please run huggingface-cli login or set HF_TOKEN as environment variable with one of your access token. You can generate a new token in your settings page (https://huggingface.co/settings/tokens). Then, clicking on the gr.LoginButton will login your local Hugging Face profile, allowing you to debug your app with your Hugging Face account before deploying it to a Space.

Security Note: It is important to note that adding a gr.LoginButton does not restrict users from using your app, in the same way that adding username-password authentication does. This means that users of your app who have not logged in with Hugging Face can still access and run events in your Gradio app -- the difference is that the gr.OAuthProfile or gr.OAuthToken will be None in the corresponding functions.

OAuth (with external providers)

It is also possible to authenticate with external OAuth providers (e.g. Google OAuth) in your Gradio apps. To do this, first mount your Gradio app within a FastAPI app (as discussed above). Then, you must write an authentication function, which gets the user's username from the OAuth provider and returns it. This function should be passed to the auth_dependency parameter in gr.mount_gradio_app.

Similar to FastAPI dependency functions, the function specified by auth_dependency will run before any Gradio-related route in your FastAPI app. The function should accept a single parameter: the FastAPI Request and return either a string (representing a user's username) or None. If a string is returned, the user will be able to access the Gradio-related routes in your FastAPI app.

First, let's show a simplistic example to illustrate the auth_dependency parameter:

from fastapi import FastAPI, Request
import gradio as gr

app = FastAPI()

def get_user(request: Request):
    return request.headers.get("user")

demo = gr.Interface(lambda s: f"Hello {s}!", "textbox", "textbox")

app = gr.mount_gradio_app(app, demo, path="/demo", auth_dependency=get_user)

if __name__ == '__main__':
    uvicorn.run(app)

In this example, only requests that include a "user" header will be allowed to access the Gradio app. Of course, this does not add much security, since any user can add this header in their request.

Here's a more complete example showing how to add Google OAuth to a Gradio app (assuming you've already created OAuth Credentials on the Google Developer Console):

import os
from authlib.integrations.starlette_client import OAuth, OAuthError
from fastapi import FastAPI, Depends, Request
from starlette.config import Config
from starlette.responses import RedirectResponse
from starlette.middleware.sessions import SessionMiddleware
import uvicorn
import gradio as gr

app = FastAPI()

# Replace these with your own OAuth settings
GOOGLE_CLIENT_ID = "..."
GOOGLE_CLIENT_SECRET = "..."
SECRET_KEY = "..."

config_data = {'GOOGLE_CLIENT_ID': GOOGLE_CLIENT_ID, 'GOOGLE_CLIENT_SECRET': GOOGLE_CLIENT_SECRET}
starlette_config = Config(environ=config_data)
oauth = OAuth(starlette_config)
oauth.register(
    name='google',
    server_metadata_url='https://accounts.google.com/.well-known/openid-configuration',
    client_kwargs={'scope': 'openid email profile'},
)

SECRET_KEY = os.environ.get('SECRET_KEY') or "a_very_secret_key"
app.add_middleware(SessionMiddleware, secret_key=SECRET_KEY)

# Dependency to get the current user
def get_user(request: Request):
    user = request.session.get('user')
    if user:
        return user['name']
    return None

@app.get('/')
def public(user: dict = Depends(get_user)):
    if user:
        return RedirectResponse(url='/gradio')
    else:
        return RedirectResponse(url='/login-demo')

@app.route('/logout')
async def logout(request: Request):
    request.session.pop('user', None)
    return RedirectResponse(url='/')

@app.route('/login')
async def login(request: Request):
    redirect_uri = request.url_for('auth')
    # If your app is running on https, you should ensure that the
    # `redirect_uri` is https, e.g. uncomment the following lines:
    # 
    # from urllib.parse import urlparse, urlunparse
    # redirect_uri = urlunparse(urlparse(str(redirect_uri))._replace(scheme='https'))
    return await oauth.google.authorize_redirect(request, redirect_uri)

@app.route('/auth')
async def auth(request: Request):
    try:
        access_token = await oauth.google.authorize_access_token(request)
    except OAuthError:
        return RedirectResponse(url='/')
    request.session['user'] = dict(access_token)["userinfo"]
    return RedirectResponse(url='/')

with gr.Blocks() as login_demo:
    gr.Button("Login", link="/login")

app = gr.mount_gradio_app(app, login_demo, path="/login-demo")

def greet(request: gr.Request):
    return f"Welcome to Gradio, {request.username}"

with gr.Blocks() as main_demo:
    m = gr.Markdown("Welcome to Gradio!")
    gr.Button("Logout", link="/logout")
    main_demo.load(greet, None, m)

app = gr.mount_gradio_app(app, main_demo, path="/gradio", auth_dependency=get_user)

if __name__ == '__main__':
    uvicorn.run(app)

There are actually two separate Gradio apps in this example! One that simply displays a log in button (this demo is accessible to any user), while the other main demo is only accessible to users that are logged in. You can try this example out on this Space.

Analytics

By default, Gradio collects certain analytics to help us better understand the usage of the gradio library. This includes the following information:

  • What environment the Gradio app is running on (e.g. Colab Notebook, Hugging Face Spaces)
  • What input/output components are being used in the Gradio app
  • Whether the Gradio app is utilizing certain advanced features, such as auth or show_error
  • The IP address which is used solely to measure the number of unique developers using Gradio
  • The version of Gradio that is running

No information is collected from users of your Gradio app. If you'd like to diable analytics altogether, you can do so by setting the analytics_enabled parameter to False in gr.Blocks, gr.Interface, or gr.ChatInterface. Or, you can set the GRADIO_ANALYTICS_ENABLED environment variable to "False" to apply this to all Gradio apps created across your system.

Note: this reflects the analytics policy as of gradio>=4.32.0.