* thanks o3 * add changeset * more * make events work * moreeeeeee * prettier * nb * add changeset * Update utils.py (#10773) ### Description This pull request updates the `get_node_path` function in the `gradio/utils.py` file to handle scenarios where the `which` command is missing. The function has been improved by splitting the error handling into two separate `try` blocks for better granularity and robustness. ### Changes Made - Split the `try` block into two separate `try` blocks for handling Windows and Unix-like systems. - Added error handling for `FileNotFoundError` in addition to `subprocess.CalledProcessError`. ### Rationale The original implementation did not properly handle the case when the `which` command is missing. This update ensures the function gracefully handles such scenarios and continues to check other possible locations for the `node` executable. * fix: latex rendering of markdown (#10765) * fix: latex rendering of markdown * add changeset --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * more * Tweak Image Editor UI (#10779) * tweak layers ui * upload alignment and text colour * change check icon * zoom tweaks * tweak layers panel * changes * more * fix image inputs * more fix * fix * fix loading layer via events * fix loading layer via events * allow developers to control layers more granularly * disable pan button when at min zoom * Update image_editor.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * show visual indicator for outpainting region * ensure initial image values work * fix cropped image placement * fix crop intiialisation options * demos and fix brush opacity options * fix layer_options updates and add demo * more * fix webcam * fix * fix * improve color swatches * fix canvas resizing * simplify crop * fix crop yet again * rework controls * scripts * tweaks * tweaks * fix things * Add two more demos for `gr.ImageEditor` (#10946) * changes * sketchpad * changes * various fixed * generate notebooks * update changes * lockfile * format code * notebooks * tweaks * fix test * fix notebooks * changes * fix storybook * changes * interface * remove redo/undo story * fix pytest * changes * push * fiiiiiix * tweaks * fix * fix thingy * tweaks * changeset * add changeset * fix * fix * website build issue * add changeset * add layeroptions to docs * formatting * fix --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Hannah <hannahblair@users.noreply.github.com> Co-authored-by: Pablo Speciale <pablospe@users.noreply.github.com> Co-authored-by: Col0ring <47329987+Col0ring@users.noreply.github.com> Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: aliabd <ali.si3luwa@gmail.com>
gradio_client
: Use a Gradio app as an API -- in 3 lines of Python
This directory contains the source code for gradio_client
, a lightweight Python library that makes it very easy to use any Gradio app as an API.
As an example, consider this Hugging Face Space that transcribes audio files that are recorded from the microphone.
Using the gradio_client
library, we can easily use the Gradio as an API to transcribe audio files programmatically.
Here's the entire code to do it:
from gradio_client import Client
client = Client("abidlabs/whisper")
client.predict("audio_sample.wav")
>> "This is a test of the whisper speech recognition model."
The Gradio client works with any Gradio Space, whether it be an image generator, a stateful chatbot, or a tax calculator.
Installation
If you already have a recent version of gradio
, then the gradio_client
is included as a dependency.
Otherwise, the lightweight gradio_client
package can be installed from pip (or pip3) and works with Python versions 3.10 or higher:
$ pip install gradio_client
Basic Usage
Connecting to a Space or a Gradio app
Start by connecting instantiating a Client
object and connecting it to a Gradio app that is running on Spaces (or anywhere else)!
Connecting to a Space
from gradio_client import Client
client = Client("abidlabs/en2fr") # a Space that translates from English to French
You can also connect to private Spaces by passing in your HF token with the hf_token
parameter. You can get your HF token here: https://huggingface.co/settings/tokens
from gradio_client import Client
client = Client("abidlabs/my-private-space", hf_token="...")
Duplicating a Space for private use
While you can use any public Space as an API, you may get rate limited by Hugging Face if you make too many requests. For unlimited usage of a Space, simply duplicate the Space to create a private Space, and then use it to make as many requests as you'd like!
The gradio_client
includes a class method: Client.duplicate()
to make this process simple:
from gradio_client import Client
client = Client.duplicate("abidlabs/whisper")
client.predict("audio_sample.wav")
>> "This is a test of the whisper speech recognition model."
If you have previously duplicated a Space, re-running duplicate()
will not create a new Space. Instead, the Client will attach to the previously-created Space. So it is safe to re-run the Client.duplicate()
method multiple times.
Note: if the original Space uses GPUs, your private Space will as well, and your Hugging Face account will get billed based on the price of the GPU. To minimize charges, your Space will automatically go to sleep after 1 hour of inactivity. You can also set the hardware using the hardware
parameter of duplicate()
.
Connecting a general Gradio app
If your app is running somewhere else, just provide the full URL instead, including the "http://" or "https://". Here's an example of making predictions to a Gradio app that is running on a share URL:
from gradio_client import Client
client = Client("https://bec81a83-5b5c-471e.gradio.live")
Inspecting the API endpoints
Once you have connected to a Gradio app, you can view the APIs that are available to you by calling the .view_api()
method. For the Whisper Space, we see the following:
Client.predict() Usage Info
---------------------------
Named API endpoints: 1
- predict(input_audio, api_name="/predict") -> value_0
Parameters:
- [Audio] input_audio: str (filepath or URL)
Returns:
- [Textbox] value_0: str (value)
This shows us that we have 1 API endpoint in this space, and shows us how to use the API endpoint to make a prediction: we should call the .predict()
method, providing a parameter input_audio
of type str
, which is a filepath or URL
.
We should also provide the api_name='/predict'
argument. Although this isn't necessary if a Gradio app has a single named endpoint, it does allow us to call different endpoints in a single app if they are available. If an app has unnamed API endpoints, these can also be displayed by running .view_api(all_endpoints=True)
.
Making a prediction
The simplest way to make a prediction is simply to call the .predict()
function with the appropriate arguments:
from gradio_client import Client
client = Client("abidlabs/en2fr")
client.predict("Hello")
>> Bonjour
If there are multiple parameters, then you should pass them as separate arguments to .predict()
, like this:
from gradio_client import Client
client = Client("gradio/calculator")
client.predict(4, "add", 5)
>> 9.0
For certain inputs, such as images, you should pass in the filepath or URL to the file. Likewise, for the corresponding output types, you will get a filepath or URL returned.
from gradio_client import Client
client = Client("abidlabs/whisper")
client.predict("https://audio-samples.github.io/samples/mp3/blizzard_unconditional/sample-0.mp3")
>> "My thought I have nobody by a beauty and will as you poured. Mr. Rochester is serve in that so don't find simpus, and devoted abode, to at might in a r—"
Advanced Usage
For more ways to use the Gradio Python Client, check out our dedicated Guide on the Python client, available here: https://www.gradio.app/guides/getting-started-with-the-python-client