Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sets up the Python gradio client #3300

Merged
merged 119 commits into from
Mar 23, 2023
Merged

Sets up the Python gradio client #3300

merged 119 commits into from
Mar 23, 2023

Conversation

abidlabs
Copy link
Member

@abidlabs abidlabs commented Feb 24, 2023

Creates a lightweight Python library called gradio_client

Documentation:


gradio_client: Use any Gradio app as an API -- in 3 lines of Python

Installation

The lightweight gradio_client package can be installed from pip (or pip3) and works with Python versions 3.7 or higher:

$ pip install gradio_client

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

import gradio_client as grc

client = grc.Client(space="abidlabs/en2fr")

Connecting a general Gradio app

If your app is running somewhere else, provide the full URL instead to the src argument. Here's an example of making predictions to a Gradio app that is running on a share URL:

import gradio_client as grc

client = grc.Client(src="btd372-js72hd.gradio.app")

Making a prediction

The simplest way to make a prediction is simply to call the .predict() function with the appropriate arguments and then immediately calling .result(), like this:

import gradio_client as grc

client = grc.Client(space="abidlabs/en2fr")

client.predict("Hello").result()

>> Bonjour

Running jobs asyncronously

Oe should note that .result() is a blocking operation as it waits for the operation to complete before returning the prediction.

In many cases, you may be better off letting the job run asynchronously and waiting to call .result() when you need the results of the prediction. For example:

import gradio_client as grc

client = grc.Client(space="abidlabs/en2fr")

job = client.predict("Hello")

# Do something else

job.result()

>> Bonjour

Adding callbacks

Alternatively, one can add callbacks to perform actions after the job has completed running, like this:

import gradio_client as grc

def print_result(x):
    print(x"The translated result is: {x}")

client = grc.Client(space="abidlabs/en2fr")

job = client.predict("Hello", result_callbacks=[print_result])

Closes: #2516

@gradio-pr-bot
Copy link
Collaborator

All the demos for this PR have been deployed at https://huggingface.co/spaces/gradio-pr-deploys/pr-3300-all-demos

@pngwn
Copy link
Member

pngwn commented Feb 24, 2023

I've created #3310 and renamed #2516 so we can close them separately.

@abidlabs abidlabs changed the title Python gradio client [WIP] Python gradio client Mar 2, 2023
@abidlabs abidlabs marked this pull request as ready for review March 22, 2023 01:29
@abidlabs
Copy link
Member Author

abidlabs commented Mar 22, 2023

Made some changes to this PR:

  • Reconciled with main
  • Documented gr.load(). I kept the documentation for gr.Blocks.load() and gr.Interface.load() but marked them as methods that will be deprecated:

image

image

  • Added telemetry using the huggingface_hub library

Put remaining TODOs here: #3565

Copy link
Collaborator

@aliabid94 aliabid94 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

client/python/README.md Outdated Show resolved Hide resolved
client/python/README.md Outdated Show resolved Hide resolved
client/python/README.md Show resolved Hide resolved
client/python/gradio_client/client.py Show resolved Hide resolved
client/python/gradio_client/client.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@freddyaboulton freddyaboulton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super awesome PR @abidlabs !

Left some comments that can be handled in future PRs

client/python/requirements.txt Outdated Show resolved Hide resolved
client/python/scripts/ci.sh Show resolved Hide resolved
client/python/scripts/format.sh Show resolved Hide resolved
client/python/gradio_client/client.py Outdated Show resolved Hide resolved
client/python/gradio_client/client.py Outdated Show resolved Hide resolved
client/python/gradio_client/client.py Show resolved Hide resolved
client/python/gradio_client/client.py Show resolved Hide resolved
gradio/external.py Show resolved Hide resolved
scripts/format_backend.sh Outdated Show resolved Hide resolved
test/test_blocks.py Outdated Show resolved Hide resolved
@abidlabs
Copy link
Member Author

Thanks for the review @freddyaboulton and @aliabid94! Will address these comments

@abidlabs
Copy link
Member Author

Ok I think that should be everything! Will merge in after CI passes

@abidlabs abidlabs merged commit 6e6121a into main Mar 23, 2023
@abidlabs abidlabs deleted the py-client branch March 23, 2023 22:33
dawoodkhan82 pushed a commit that referenced this pull request Mar 29, 2023
* placeholder

* changelog

* added to readme

* client

* implement futures

* utils

* scripts

* lint

* reorg

* scripts

* serialization

* cleanup

* fns

* serialize

* cache

* callbacks

* updates

* formatting

* packaging

* requirements

* remove changelog

* client

* access token

* formatting

* deprecate

* format backend

* client replace

* updates

* moving from utils

* remove code duplication

* rm duplicates

* simplify

* galleryserializer

* serializable

* load serializers

* fixing errors

* errors

* typing

* tests

* changelog

* lint

* fix lint

* fixing files

* formatting

* type

* fix type checking

* changelog

* changelog

* Update client/python/gradio_client/client.py

Co-authored-by: Lucain <[email protected]>

* formatting, tests

* formatting, tests

* gr.load

* refactoring

* refactoring'

* formatting

* formatting

* tests

* tests

* fix tests

* cleanup

* added tests

* adding scripts

* formatting

* address review comments

* readme

* serialize info

* remove from changelog

* version 0.0.2 released

* lint

* type fix

* check

* type issues

* hf_token

* update hf token

* telemetry

* docs, circle dependency

* hf token

* formatting

* updates

* sort

* script

* external

* docs

* formatting

* fixes

* scripts

* requirements

* fix tests

* context

* changes

* formatting

* fixes

* format fix

---------

Co-authored-by: Lucain <[email protected]>
dawoodkhan82 added a commit that referenced this pull request Apr 6, 2023
* update gallery styles

* Set theme name from load (#3595)

* Add name + test

* Add theme names

* CHANGELOG

* Delete theme in interface

* Trigger event when Slider number input is released (#3589)

* Add event

* Add unit test

* CHANGELOG

* Sets up the Python `gradio` client (#3300)

* placeholder

* changelog

* added to readme

* client

* implement futures

* utils

* scripts

* lint

* reorg

* scripts

* serialization

* cleanup

* fns

* serialize

* cache

* callbacks

* updates

* formatting

* packaging

* requirements

* remove changelog

* client

* access token

* formatting

* deprecate

* format backend

* client replace

* updates

* moving from utils

* remove code duplication

* rm duplicates

* simplify

* galleryserializer

* serializable

* load serializers

* fixing errors

* errors

* typing

* tests

* changelog

* lint

* fix lint

* fixing files

* formatting

* type

* fix type checking

* changelog

* changelog

* Update client/python/gradio_client/client.py

Co-authored-by: Lucain <[email protected]>

* formatting, tests

* formatting, tests

* gr.load

* refactoring

* refactoring'

* formatting

* formatting

* tests

* tests

* fix tests

* cleanup

* added tests

* adding scripts

* formatting

* address review comments

* readme

* serialize info

* remove from changelog

* version 0.0.2 released

* lint

* type fix

* check

* type issues

* hf_token

* update hf token

* telemetry

* docs, circle dependency

* hf token

* formatting

* updates

* sort

* script

* external

* docs

* formatting

* fixes

* scripts

* requirements

* fix tests

* context

* changes

* formatting

* fixes

* format fix

---------

Co-authored-by: Lucain <[email protected]>

* Translate "or" for i18n (#3599)

* Translate or for i18n

* CHANGELOG

* Fixes Blocks exit issue (#3600)

* fix

* changelog

* blocks

* formatting

* Use gradio-api-server for telemetry (#3488)

* analytics

* changelog

* remove interface analytics

* ip

* remove import

* format

* theme name

* theme analytics

* format

* changelog

* fixes

* format

* remove unused param

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Simplify tests (#3608)

* simplify tests

* imports

* imports

* formatting

* removed cometml typing

* simplify

* changelog

* fix wc error in dev mode (#3572)

Co-authored-by: Abubakar Abid <[email protected]>

* A few small fixes to docs / demos (#3611)

* fixes

* remove binaries

* doc

* changelog

* typing

* run on windows

* cancels

* added clarifications

* Add docs for HF Json saver (#3604)

* Add docs for flagging

* Fix params

* CHANGELOG

---------

Co-authored-by: freddyaboulton <[email protected]>

* ensure css loads before mounting app (#3573)

* ensure css loads before mounting app

* changelog

* fix tests

* change?

* changelog

* fix issue with missing version (#3632)

Co-authored-by: Freddy Boulton <[email protected]>

* Fixes chatbot autoscroll + Textbox lines > 20 issue (#3637)

* fixes

* changelog

* Update gradio/components.py

Co-authored-by: Abubakar Abid <[email protected]>

* Update CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Fix embedded demos (#3638)

Co-authored-by: Abubakar Abid <[email protected]>

* Add Windows CI (#3628)

* Add Windows CI

* Update changelog

* fix

* Skip one test on Windows

* Preserve virtualenv path

* Skip another test on Windows

* Make conditional flaky

* Requested changes

* consistent os

* cleanup

* fix test for windows

* remove unnecessary check

* lint

* lint

---------

Co-authored-by: Abubakar Abid <[email protected]>

* move files (#3605)

* move files

* commit the rest of the files

* fix lockfile

* fix workflow

* fix type errors

* fix tests

* only run ci when certain files change

* run correct test command in ci

* version

* fix pypi script

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Support empty lists being used in `gr.Dataframe` (#3646)

* Support empty lists being used in `gr.Dataframe`

* Update changelog

* Add empty dataframe test

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Fix windows flake (#3650)

* fix windows flake

* format backend

---------

Co-authored-by: Freddy Boulton <[email protected]>

* Raise errror if event queued but queue is not enabled (#3640)

* Raise Error

* CHANGELOG

* Add progress tracking validate_queue_settings

* Update gradio/blocks.py

Co-authored-by: Abubakar Abid <[email protected]>

* Fix test

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Copy everything in website Dockerfile, fix build issues (#3659)

* dockerfile

* copy everything from repo

* correct dir

* changelog

* Correct the documentation of `gr.File` component (#3660)

This closes #3658.

Co-authored-by: Abubakar Abid <[email protected]>

* Nit in ValueError (#3669)

* Nit in ValueError

* CHANGELOG

---------

Co-authored-by: freddyaboulton <[email protected]>

* Load upstream theme (#3641)

* theme loading

* upstream theme

* version

* format themes

* fixes

* tests

* one more test

* fix test

* address review

* Add job for python client ci (#3674)

* Add job + lint

* Fix path

* Fix path

* Fix path

* Checkout

* Add test requirements

* Fix syntax

* Fix test

* Lint

* Fix deps + README

* Move dependency

* Hide dropdown if in single-select mode (#3678)

* Hide dropdown if in single-select mode

* Update changelog

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Fix default parameters value and gr.Progress in same function (#3671)

* Fix default parameters value and gr.Progress in same function

* Update changelog

* Fix tests

* Format

* Expand tests for other types of special function arguments

* Augment SelectData tests

---------

Co-authored-by: Abubakar Abid <[email protected]>

* warning

* changelog

* ghangelog

* changelog

* object fit optional

* Add status for Python Client Jobs (#3645)

* Add status + unit test (flaky) for now

* Install client

* Fix tests

* Lint backend + tests

* Add non-queue test

* Fix name

* Use lock instead

* Add simplify implementation + fix tests

* Restore changes to scripts

* Fix README typo

* Fix CI

* Add two concurrent test

* Fix broken spaces in docs (#3698)

* fix examples in sentence_builder

* fix sklearn error in titanic demo

* regenerate notebooks

* changelgo

* Add download button for video (#3581)

* Add download buttom

* Add missing imports

* CHANGELOG

* Update CHANGELOG.md

* Trigger CI

* Fix visibility

* Try to fix ci

* Fix deps

* download button change

* Lint

---------

Co-authored-by: Dawood <[email protected]>
Co-authored-by: Abubakar Abid <[email protected]>

* Fix outdated sharing your app guide (#3699)

* fix embed this space screenshot

* fix use via api

* changelog

---------

Co-authored-by: Freddy Boulton <[email protected]>

* Add orig_name field to video outputs (#3700)

* Add orig_name to video

* Fix test

* CHANGELOG

* Lint

* Theme builder (#3664)

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* Update CHANGELOG.md

Co-authored-by: Abubakar Abid <[email protected]>

* Update gradio/themes/builder.py

Co-authored-by: Abubakar Abid <[email protected]>

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

---------

Co-authored-by: Abubakar Abid <[email protected]>

* fix dropdowns, release 3.24 (#3713)

* changes

* changes

* Update version.txt

* New Version Docs (#3715)

* [create-pull-request] automated change

* fix changelog

---------

Co-authored-by: abidlabs <[email protected]>
Co-authored-by: Abubakar Abid <[email protected]>

* Fix chatbot newline issue (#3717)

* changes

* changes

* changes

* changelog

---------

Co-authored-by: Abubakar Abid <[email protected]>

* New Version Docs (#3720)

* [create-pull-request] automated change

* Trigger Build

---------

Co-authored-by: aliabd <[email protected]>
Co-authored-by: aliabd <[email protected]>

* Fix Serializer Mapping  (#3722)

* Fix mapping and test

* Bump gradio version

* Revert gradio version bump

* Fix some bugs related to Python client (#3721)

* client format

* docs

* formatting

* fix tests

* fixed bug

* api endpoint changes

* fix tests

* fix tests

* formatting

* Add support for sessions [python client] (#3731)

* client

* add state and tests

* remove session param

* node support for js client (#3692)

* bundle js client + gen types

* changeset

* changeset

* fix bugs

* fix deps

* fix deps

* format

* fix ci

* fix types

* Support IPv6 addresses for --server-name (#3695)

* Support IPv6 addresses for --server-name

* Update changelog now that I have a PR number.

---------

Co-authored-by: freddyaboulton <[email protected]>

* Increase timeout for analytics request + remove exception print (#3647)

* increase timeout

* merge

* Add changelog

---------

Co-authored-by: Freddy Boulton <[email protected]>

* Switch linting to Ruff (#3710)

* Sort requirements.in

* Switch flake8 + isort to ruff

* Apply ruff import order fixes

* Fix ruff complaints in demo/

* Fix ruff complaints in test/

* Use `x is not y`, not `not x is y`

* Remove unused listdir from website generator

* Clean up duplicate dict keys

* Add changelog entry

* Clean up unused imports (except in gradio/__init__.py)

* add space

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Fix missing docstrings (new PR) (#3740)

* Move documentation for _js into docstring, not a stray comment

* Add missing argument docstrings (and remove non-existent ones)

* Add changelog entry

* updated docstrings

* changelog

* contributors

* changelog

* formatting

* removed _js

---------

Co-authored-by: Aarni Koskela <[email protected]>

* import (#3742)

* Import Literal from typing extensions in client (#3741)

* Fix typing extensions

* Import typing_extensions

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Access http token for ws connection (#3735)

* Access unsecure token

* CHANGELOG

---------

Co-authored-by: Abubakar Abid <[email protected]>

* Add root_url to serializers in gradio_client (#3736)

* Add root_url to serializers

* Add url fix

* Respect fn parameter

* Fix docstring

* Add other test

* Pass to method

* CI tweaks (#3752)

* Adds a pypi release action for the gradio python client (#3743)

* release action

* fixes

* name

* Update version.txt

* Update version.txt

* update

* fixes

* version

* rename

* action

* fix token

* custom dir

* fixes

* change password

* revert back to token

* scripts

* remove twine

* Get Intermediate Results from Python Client (#3694)

* Add status + unit test (flaky) for now

* Install client

* Fix tests

* Lint backend + tests

* Add non-queue test

* Fix name

* Use lock instead

* Add simplify implementation + fix tests

* Restore changes to scripts

* Fix README typo

* Fix CI

* Add intermediate results to python client

* Type check

* Typecheck again

* Catch exception:

* Thinking

* Dont read generator from config

* add no queue test

* Remove unused method

* Fix types

* Remove breakpoint

* Fix code

* Fix test

* Fix tests

* Unpack list

* Add docstring

---------

Co-authored-by: Abubakar Abid <[email protected]>

* changes (#3760)

* Make Client Jobs Iterable (#3762)

* Add iterator

* Break if done

* Add test for early termination

* changelog

* notebooks

---------

Co-authored-by: Freddy Boulton <[email protected]>
Co-authored-by: Abubakar Abid <[email protected]>
Co-authored-by: Lucain <[email protected]>
Co-authored-by: pngwn <[email protected]>
Co-authored-by: Omar Sanseviero <[email protected]>
Co-authored-by: Ali Abdalla <[email protected]>
Co-authored-by: space-nuko <[email protected]>
Co-authored-by: Luo Peng <[email protected]>
Co-authored-by: aliabid94 <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: abidlabs <[email protected]>
Co-authored-by: aliabd <[email protected]>
Co-authored-by: Dan Sully <[email protected]>
Co-authored-by: Aarni Koskela <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add a Python client to make it easy to connect to hosted Gradio apps & respect the queue
8 participants