Steveeeeeeen's picture
Steveeeeeeen HF staff
Upload folder using huggingface_hub
9f0d781 verified
|
raw
history blame
45 kB

gradio_client

1.4.3

Fixes

  • #9913 d81f430 - fix: Fix filename stripping to preserve extensions. Thanks @TakaSoap!

1.4.2

Fixes

  • #9754 36a5076 - Update client.py: raise error on 429 get_config. Thanks @Pendrokar!

1.4.1

Fixes

  • #9678 a25a26e - Fix: file_types checking bug. Thanks @jasongzy!

1.4.0-beta.5

Features

  • #9589 477f45c - Only move files to the cache that have a meta key. Thanks @freddyaboulton!

1.4.0-beta.4

Features

  • #9550 b0fedd7 - Fix most flaky Python tests in 5.0-dev branch. Thanks @abidlabs!
  • #9483 8dc7c12 - Send Streaming data over Websocket if possible. Also support base64 output format for images. Thanks @freddyaboulton!
  • #9522 3b71ed2 - Api info fix. Thanks @freddyaboulton!

1.4.0-beta.3

Fixes

  • #9431 7065e11 - Check for file_types parameter in the backend. Thanks @dawoodkhan82!

1.4.0-beta.2

Features

1.4.0-beta.1

Features

1.4.0-beta.0

Features

  • #9140 c054ec8 - Drop python 3.8 and 3.9. Thanks @abidlabs!
  • #8941 97a7bf6 - Streaming inputs for 5.0. Thanks @freddyaboulton!

1.3.0

Features

  • #8968 38b3682 - Improvements to FRP client download and usage. Thanks @abidlabs!
  • #9059 981731a - Fix flaky tests and tests on Windows. Thanks @abidlabs!

1.2.0

Features

  • #8862 ac132e3 - Support the use of custom authentication mechanism, timeouts, and other httpx parameters in Python Client. Thanks @valgai!
  • #8948 f7fbd2c - Bump websockets version max for gradio-client. Thanks @evanscho!

1.1.1

Features

  • #8757 6073736 - Document FileData class in docs. Thanks @hannahblair!

1.1.0

Fixes

1.0.2

Features

  • #8516 de6aa2b - Add helper classes to docs. Thanks @aliabd!

1.0.1

Features

1.0.0

Highlights

Clients 1.0 Launch! (#8468 7cc0a0c)

We're excited to unveil the first major release of the Gradio clients. We've made it even easier to turn any Gradio application into a production endpoint thanks to the clients' ergonomic, transparent, and portable design.

Ergonomic API 💆

Stream From a Gradio app in 5 lines

Use the submit method to get a job you can iterate over:

from gradio_client import Client

client = Client("gradio/llm_stream")

for result in client.submit("What's the best UI framework in Python?"):
    print(result)
import { Client } from "@gradio/client";

const client = await Client.connect("gradio/llm_stream")
const job = client.submit("/predict", {"text": "What's the best UI framework in Python?"})

for await (const msg of job) console.log(msg.data)

Use the same keyword arguments as the app

from gradio_client import Client

client = Client("http://127.0.0.1:7860/")
result = client.predict(
        message="Hello!!",
        system_prompt="You are helpful AI.",
        tokens=10,
        api_name="/chat"
)
print(result)
import { Client } from "@gradio/client";

const client = await Client.connect("http://127.0.0.1:7860/");
const result = await client.predict("/chat", { 		
        message: "Hello!!", 		
        system_prompt: "Hello!!", 		
        tokens: 10, 
});

console.log(result.data);

Better Error Messages

If something goes wrong in the upstream app, the client will raise the same exception as the app provided that show_error=True in the original app's launch() function, or it's a gr.Error exception.

Transparent Design 🪟

Anything you can do in the UI, you can do with the client:

  • 🔒 Authentication
  • 🛑 Job Cancelling
  • ℹ️ Access Queue Position and API
  • 📕 View the API information

Here's an example showing how to display the queue position of a pending job:

from gradio_client import Client

client = Client("gradio/diffusion_model")

job = client.submit("A cute cat")
while not job.done():
    status = job.status()
    print(f"Current in position {status.rank} out of {status.queue_size}")

Portable Design ⛺️

The client can run from pretty much any python and javascript environment (node, deno, the browser, Service Workers).

Here's an example using the client from a Flask server using gevent:

from gevent import monkey
monkey.patch_all()

from gradio_client import Client
from flask import Flask, send_file
import time

app = Flask(__name__)

imageclient = Client("gradio/diffusion_model")

@app.route("/gen")
def gen():
      result = imageclient.predict(
                "A cute cat",
                api_name="/predict"
              )
      return send_file(result)

if __name__ == "__main__":
      app.run(host="0.0.0.0", port=5000)

1.0 Migration Guide and Breaking Changes

Python

  • The serialize argument of the Client class was removed. Has no effect.
  • The upload_files argument of the Client was removed.
  • All filepaths must be wrapped in the handle_file method. Example:
from gradio_client import Client, handle_file

client = Client("gradio/image_captioner")
client.predict(handle_file("cute_cat.jpg"))
  • The output_dir argument was removed. It is not specified in the download_files argument.

Javascript The client has been redesigned entirely. It was refactored from a function into a class. An instance can now be constructed by awaiting the connect method.

const app = await Client.connect("gradio/whisper")

The app variable has the same methods as the python class (submit, predict, view_api, duplicate).

Additional Changes

  • #8243 - Set orig_name in python client file uploads.
  • #8264 - Make exceptions in the Client more specific.
  • #8247 - Fix api recorder.
  • #8276 - Fix bug where client could not connect to apps that had self signed certificates.
  • #8245 - Cancel server progress from the python client.
  • #8200 - Support custom components in gr.load
  • #8182 - Convert sse calls in client from async to sync.
  • #7732 - Adds support for kwargs and default arguments in the python client, and improves how parameter information is displayed in the "view API" page.
  • #7888 - Cache view_api info in server and python client.
  • #7575 - Files should now be supplied as file(...) in the Client, and some fixes to gr.load() as well.
  • #8401 - Add CDN installation to JS docs.
  • #8299 - Allow JS Client to work with authenticated spaces 🍪.
  • #8408 - Connect heartbeat if state created in render. Also fix config cleanup bug #8407.
  • #8258 - Improve URL handling in JS Client.
  • #8322 - ensure the client correctly handles all binary data.
  • #8296 - always create a jwt when connecting to a space if a hf_token is present.
  • #8285 - use the correct query param to pass the jwt to the heartbeat event.
  • #8272 - ensure client works for private spaces.
  • #8197 - Add support for passing keyword args to data in JS client.
  • #8252 - Client node fix.
  • #8209 - Rename eventSource_Factory and fetch_implementation.
  • #8109 - Implement JS Client tests.
  • #8211 - remove redundant event source logic.
  • #8179 - rework upload to be a class method + pass client into each component.
  • #8181 - Ensure connectivity to private HF spaces with SSE protocol.
  • #8169 - Only connect to heartbeat if needed.
  • #8118 - Add eventsource polyfill for Node.js and browser environments.
  • #7646 - Refactor JS Client.
  • #7974 - Fix heartbeat in the js client to be Lite compatible.
  • #7926 - Fixes streaming event race condition.

Thanks @freddyaboulton!

Features

  • #8444 2cd02ff - Remove deprecated parameters from Python Client. Thanks @abidlabs!

0.17.0

Features

  • #8243 55f664f - Add event listener support to render blocks. Thanks @aliabid94!
  • #8409 8028c33 - Render decorator documentation. Thanks @aliabid94!

Fixes

  • #8371 a373b0e - Set orig_name in python client file uploads. Thanks @freddyaboulton!

0.16.4

Fixes

0.16.3

Features

  • #8264 a9e1a8a - Make exceptions in the Client more specific. Thanks @abidlabs!

Fixes

  • #8276 0bf3d1a - Fix bug where client could not connect to apps that had self signed certificates. Thanks @freddyaboulton!

0.16.2

Fixes

  • #8245 c562a3d - Cancel server progress from the python client. Thanks @freddyaboulton!

0.16.1

Highlights

Support custom components in gr.load (#8200 72039be)

It is now possible to load a demo with a custom component with gr.load.

The custom component must be installed in your system and imported in your python session.

import gradio as gr
import gradio_pdf

demo = gr.load("freddyaboulton/gradiopdf", src="spaces")

if __name__ == "__main__":
    demo.launch()
image

Thanks @freddyaboulton!

Fixes

  • #8182 39791eb - Convert sse calls in client from async to sync. Thanks @abidlabs!

0.16.0

Highlights

Setting File Upload Limits (#7909 2afca65)

We have added a max_file_size size parameter to launch() that limits to size of files uploaded to the server. This limit applies to each individual file. This parameter can be specified as a string or an integer (corresponding to the size in bytes).

The following code snippet sets a max file size of 5 megabytes.

import gradio as gr

demo = gr.Interface(lambda x: x, "image", "image")

demo.launch(max_file_size="5mb")
# or
demo.launch(max_file_size=5 * gr.FileSize.MB)

max_file_size_upload

Error states can now be cleared

When a component encounters an error, the error state shown in the UI can now be cleared by clicking on the x icon in the top right of the component. This applies to all types of errors, whether it's raised in the UI or the server.

error_modal_calculator

Thanks @freddyaboulton!

Features

  • #8100 cbdfbdf - upgrade ruff test dependency to ruff==0.4.1. Thanks @abidlabs!

0.15.1

Features

  • #7850 2bae1cf - Adds an "API Recorder" to the view API page, some internal methods have been made async. Thanks @abidlabs!

0.15.0

Highlights

Automatically delete state after user has disconnected from the webpage (#7829 6a4bf7a)

Gradio now automatically deletes gr.State variables stored in the server's RAM when users close their browser tab. The deletion will happen 60 minutes after the server detected a disconnect from the user's browser. If the user connects again in that timeframe, their state will not be deleted.

Additionally, Gradio now includes a Blocks.unload() event, allowing you to run arbitrary cleanup functions when users disconnect (this does not have a 60 minute delay). You can think of the unload event as the opposite of the load event.

with gr.Blocks() as demo:
    gr.Markdown(
"""# State Cleanup Demo
🖼️ Images are saved in a user-specific directory and deleted when the users closes the page via demo.unload.
""")
    with gr.Row():
        with gr.Column(scale=1):
            with gr.Row():
                img = gr.Image(label="Generated Image", height=300, width=300)
            with gr.Row():
                gen = gr.Button(value="Generate")
            with gr.Row():
                history = gr.Gallery(label="Previous Generations", height=500, columns=10)
                state = gr.State(value=[], delete_callback=lambda v: print("STATE DELETED"))

    demo.load(generate_random_img, [state], [img, state, history]) 
    gen.click(generate_random_img, [state], [img, state, history])
    demo.unload(delete_directory)


demo.launch(auth=lambda user,pwd: True,
            auth_message="Enter any username and password to continue")

Thanks @freddyaboulton!

Fixes

  • #7888 946487c - Cache view_api info in server and python client. Thanks @freddyaboulton!

0.14.0

Features

  • #7800 b0a3ea9 - Small fix to client.view_api() in the case of default file values. Thanks @abidlabs!
  • #7732 2efb05e - Adds support for kwargs and default arguments in the python client, and improves how parameter information is displayed in the "view API" page. Thanks @abidlabs!

0.13.0

Features

  • #7691 84f81fe - Closing stream from the backend. Thanks @aliabid94!

Fixes

  • #7718 6390d0b - Add support for python client connecting to gradio apps running with self-signed SSL certificates. Thanks @abidlabs!
  • #7706 bc61ff6 - Several fixes to gr.load. Thanks @abidlabs!

0.12.0

Fixes

  • #7575 d0688b3 - Files should now be supplied as file(...) in the Client, and some fixes to gr.load() as well. Thanks @abidlabs!
  • #7618 0ae1e44 - Control which files get moved to cache with gr.set_static_paths. Thanks @freddyaboulton!

0.11.0

Features

Fixes

  • #7555 fc4c2db - Allow Python Client to upload/download files when connecting to Gradio apps with auth enabled. Thanks @abidlabs!

0.10.1

Features

0.10.0

Features

Fixes

0.9.0

Features

  • #7062 0fddd0f - Determine documentation group automatically. Thanks @akx!
  • #7102 68a54a7 - Improve chatbot streaming performance with diffs. Thanks @aliabid94!/n Note that this PR changes the API format for generator functions, which would be a breaking change for any clients reading the EventStream directly
  • #7116 3c8c4ac - Document the gr.ParamViewer component, and fix component preprocessing/postprocessing docstrings. Thanks @abidlabs!
  • #7061 05d8a3c - Update ruff to 0.1.13, enable more rules, fix issues. Thanks @akx!

Fixes

0.8.1

Features

0.8.0

Fixes

  • #6846 48d6534 - Add show_api parameter to events, and fix gr.load(). Also makes some minor improvements to the "view API" page when running on Spaces. Thanks @abidlabs!
  • #6767 7bb561a - Rewriting parts of the README and getting started guides for 4.0. Thanks @abidlabs!

0.7.3

Fixes

  • #6693 34f9431 - Python client properly handles hearbeat and log messages. Also handles responses longer than 65k. Thanks @freddyaboulton!

0.7.2

Features

Fixes

0.7.1

Fixes

0.7.0

Features

0.7.0-beta.2

Features

0.7.0-beta.1

Features

0.7.0-beta.0

Features

0.6.1

Fixes

0.6.0

Highlights

new FileExplorer component (#5672 e4a307ed6)

Thanks to a new capability that allows components to communicate directly with the server without passing data via the value, we have created a new FileExplorer component.

This component allows you to populate the explorer by passing a glob, but only provides the selected file(s) in your prediction function.

Users can then navigate the virtual filesystem and select files which will be accessible in your predict function. This component will allow developers to build more complex spaces, with more flexible input options.

output

For more information check the FileExplorer documentation.

Thanks @aliabid94!

0.5.3

Features

0.5.2

Features

0.5.1

Features

0.5.0

Highlights

Enable streaming audio in python client (#5248 390624d8)

The gradio_client now supports streaming file outputs 🌊

No new syntax! Connect to a gradio demo that supports streaming file outputs and call predict or submit as you normally would.

import gradio_client as grc
client = grc.Client("gradio/stream_audio_out")

# Get the entire generated audio as a local file
client.predict("/Users/freddy/Pictures/bark_demo.mp4", api_name="/predict")

job = client.submit("/Users/freddy/Pictures/bark_demo.mp4", api_name="/predict")

# Get the entire generated audio as a local file
job.result()

# Each individual chunk
job.outputs()

Thanks @freddyaboulton!

Fixes

0.4.0

Highlights

Client.predict will now return the final output for streaming endpoints (#5057 35856f8b)

This is a breaking change (for gradio_client only)!

Previously, Client.predict would only return the first output of an endpoint that streamed results. This was causing confusion for developers that wanted to call these streaming demos via the client.

We realize that developers using the client don't know the internals of whether a demo streams or not, so we're changing the behavior of predict to match developer expectations.

Using Client.predict will now return the final output of a streaming endpoint. This will make it even easier to use gradio apps via the client.

Thanks @freddyaboulton!

Features

Fixes

0.3.0

Highlights

Create Discord Bots from Gradio Apps 🤖 (#4960 46e4ef67)

We're excited to announce that Gradio can now automatically create a discord bot from any gr.ChatInterface app.

It's as easy as importing gradio_client, connecting to the app, and calling deploy_discord!

🦙 Turning Llama 2 70b into a discord bot 🦙

import gradio_client as grc
grc.Client("ysharma/Explore_llamav2_with_TGI").deploy_discord(to_id="llama2-70b-discord-bot")

Getting started with template spaces

To help get you started, we have created an organization on Hugging Face called gradio-discord-bots with template spaces you can use to turn state of the art LLMs powered by Gradio to discord bots.

Currently we have template spaces for:

But once again, you can deploy ANY gr.ChatInterface app exposed on the internet! So don't hesitate to try it on your own Chatbots.

❗️ Additional Note ❗️: Technically, any gradio app that exposes an api route that takes in a single string and outputs a single string can be deployed to discord. But gr.ChatInterface apps naturally lend themselves to discord's chat functionality so we suggest you start with those.

Thanks @freddyaboulton!

New Features:

  • Endpoints that return layout components are now properly handled in the submit and view_api methods. Output layout components are not returned by the API but all other components are (excluding gr.State). By @freddyaboulton in PR 4871

Bug Fixes:

No changes to highlight

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

0.2.9

New Features:

No changes to highlight

Bug Fixes:

Breaking Changes:

No changes to highlight.

Full Changelog:

  • Pinned dependencies to major versions to reduce the likelihood of a broken gradio_client due to changes in downstream dependencies by @abidlabs in PR 4885

0.2.8

New Features:

Bug Fixes:

  • Fix bug where space duplication would error if the demo has cpu-basic hardware by @freddyaboulton in PR 4583
  • Fixes and optimizations to URL/download functions by @akx in PR 4695

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

0.2.7

New Features:

  • The output directory for files downloaded via the Client can now be set by the output_dir parameter in Client by @abidlabs in PR 4501

Bug Fixes:

  • The output directory for files downloaded via the Client are now set to a temporary directory by default (instead of the working directory in some cases) by @abidlabs in PR 4501

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

0.2.6

New Features:

No changes to highlight.

Bug Fixes:

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

0.2.5

New Features:

No changes to highlight.

Bug Fixes:

  • Fixes parameter names not showing underscores by @abidlabs in PR 4230
  • Fixes issue in which state was not handled correctly if serialize=False by @abidlabs in PR 4230

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

0.2.4

Bug Fixes:

  • Fixes missing serialization classes for several components: Barplot, Lineplot, Scatterplot, AnnotatedImage, Interpretation by @abidlabs in PR 4167

Documentation Changes:

No changes to highlight.

Testing and Infrastructure Changes:

No changes to highlight.

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

Contributors Shoutout:

No changes to highlight.

0.2.3

New Features:

No changes to highlight.

Bug Fixes:

Documentation Changes:

No changes to highlight.

Testing and Infrastructure Changes:

No changes to highlight.

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

Contributors Shoutout:

No changes to highlight.

0.2.2

New Features:

No changes to highlight.

Bug Fixes:

Other Changes:

Breaking Changes:

No changes to highlight.

0.2.1

New Features:

No changes to highlight.

Bug Fixes:

Removes extraneous State component info from the Client.view_api() method by @abidlabs in PR 4107

Documentation Changes:

No changes to highlight.

Testing and Infrastructure Changes:

Separates flaky tests from non-flaky tests by @abidlabs in PR 4107

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

Contributors Shoutout:

No changes to highlight.

0.1.4

New Features:

Bug Fixes:

  • Fixed bug where unnamed routes where displayed with api_name instead of fn_index in view_api by @freddyaboulton in PR 3972

Documentation Changes:

No changes to highlight.

Testing and Infrastructure Changes:

No changes to highlight.

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

Contributors Shoutout:

No changes to highlight.

0.1.3

New Features:

No changes to highlight.

Bug Fixes:

  • Fixed bug where Video components in latest gradio were not able to be deserialized by @freddyaboulton in PR 3860

Documentation Changes:

No changes to highlight.

Testing and Infrastructure Changes:

No changes to highlight.

Breaking Changes:

No changes to highlight.

Full Changelog:

No changes to highlight.

Contributors Shoutout:

No changes to highlight.

0.1.2

First public release of the Gradio Client library! The gradio_client 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."

Read more about how to use the gradio_client library here: https://gradio.app/getting-started-with-the-python-client/