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

Add Windows CI #3628

Merged
merged 16 commits into from
Mar 27, 2023
Merged

Add Windows CI #3628

merged 16 commits into from
Mar 27, 2023

Conversation

space-nuko
Copy link
Contributor

No description provided.

@gradio-pr-bot
Copy link
Collaborator

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

@abidlabs
Copy link
Member

Thanks @space-nuko for making this addition! Quick question: why are these 3 tests flaky only on Windows?

Let me cc @freddyaboulton @pngwn as well for their thoughts. Quick context guys: as part of this #3608, we generally discussed adding CI to run on Windows, as some Python packages and dependencies behave differently on Windows vs. OSX, and @space-nuko went ahead and added the CI for Windows. I'm broadly in supportive of this PR as I've noticed some tests failing only on Windows (example: tempfile.NamedTemporaryFile requires delete=False to be set to work correctly), which would currently be uncaught.

@space-nuko
Copy link
Contributor Author

space-nuko commented Mar 27, 2023

Tests that didn't work when I ran them on CI (they succeed on my machine)

https://github.com/gradio-app/gradio/actions/runs/4526804333/jobs/7972195763

TestProgressBar.test_progress_bar_track_tqdm
self = <test.test_blocks.TestProgressBar object at 0x0000021CA3B75B[48](https://github.com/gradio- app/gradio/actions/runs/4526804333/jobs/7972195763#step:18:49)>

    @pytest.mark.asyncio
    async def test_progress_bar_track_tqdm(self):
        from tqdm import tqdm
    
        with gr.Blocks() as demo:
            name = gr.Textbox()
            greeting = gr.Textbox()
            button = gr.Button(value="Greet")
    
            def greet(s, prog=gr.Progress(track_tqdm=True)):
                prog(0, desc="start")
                time.sleep(0.25)
                for _ in prog.tqdm(range(4), unit="iter"):
                    time.sleep(0.25)
                time.sleep(1)
                for i in tqdm(["a", "b", "c"], desc="alphabet"):
                    time.sleep(0.25)
                return f"Hello, {s}!"
    
            button.click(greet, name, greeting)
        demo.queue(max_size=1).launch(prevent_thread_lock=True)
    
        async with websockets.connect(
            f"{demo.local_url.replace('http', 'ws')}queue/join"
        ) as ws:
            completed = False
            progress_updates = []
            while not completed:
                msg = json.loads(await ws.recv())
                if msg["msg"] == "send_data":
                    await ws.send(json.dumps({"data": [0], "fn_index": 0}))
                if msg["msg"] == "send_hash":
                    await ws.send(json.dumps({"fn_index": 0, "session_hash": "shdce"}))
                if msg["msg"] == "progress":
                    progress_updates.append(msg["progress_data"])
                if msg["msg"] == "process_completed":
                    completed = True
                    break
>       assert progress_updates == [
            [
                {
                    "index": None,
                    "length": None,
                    "unit": "steps",
                    "progress": 0.0,
                    "desc": "start",
                }
            ],
            [{"index": 0, "length": 4, "unit": "iter", "progress": None, "desc": None}],
            [{"index": 1, "length": 4, "unit": "iter", "progress": None, "desc": None}],
            [{"index": 2, "length": 4, "unit": "iter", "progress": None, "desc": None}],
            [{"index": 3, "length": 4, "unit": "iter", "progress": None, "desc": None}],
            [{"index": 4, "length": 4, "unit": "iter", "progress": None, "desc": None}],
            [
                {
                    "index": 0,
                    "length": 3,
                    "unit": "steps",
                    "progress": None,
                    "desc": "alphabet",
                }
            ],
            [
                {
                    "index": 1,
                    "length": 3,
                    "unit": "steps",
                    "progress": None,
                    "desc": "alphabet",
                }
            ],
            [
                {
                    "index": 2,
                    "length": 3,
                    "unit": "steps",
                    "progress": None,
                    "desc": "alphabet",
                }
            ],
        ]
E       AssertionError: assert [[{'desc': 's...e, ...}], ...] == [[{'desc': 's...e, ...}], ...]
E         Left contains one more item: []
E         Full diff:
E           [
E            [{'desc': 'start',
E              'index': None,
E              'length': None,
E              'progress': 0.0,
E              'unit': 'steps'}],
E            [{'desc': None,
E              'index': 0,
E              'length': 4,
E              'progress': None,
E              'unit': 'iter'}],
E            [{'desc': None,
E              'index': 1,
E              'length': 4,
E              'progress': None,
E              'unit': 'iter'}],
E            [{'desc': None,
E              'index': 2,
E              'length': 4,
E              'progress': None,
E              'unit': 'iter'}],
E            [{'desc': None,
E              'index': 3,
E              'length': 4,
E              'progress': None,
E              'unit': 'iter'}],
E            [{'desc': None,
E              'index': 4,
E              'length': 4,
E              'progress': None,
E              'unit': 'iter'}],
E            [{'desc': 'alphabet',
E              'index': 0,
E              'length': 3,
E              'progress': None,
E              'unit': 'steps'}],
E            [{'desc': 'alphabet',
E              'index': 1,
E              'length': 3,
E              'progress': None,
E              'unit': 'steps'}],
E            [{'desc': 'alphabet',
E              'index': 2,
E              'length': 3,
E              'progress': None,
E              'unit': 'steps'}],
E         +  [],
E           ]

test\test_blocks.py:1287: AssertionError
---------------------------- Captured stdout call -----------------------------
Running on local URL:  http://127.0.0.1:78[66](https://github.com/gradio-app/gradio/actions/runs/4526804333/jobs/7972195763#step:18:67)

To create a public link, set `share=True` in `launch()`.

https://github.com/gradio-app/gradio/actions/runs/4525655930/jobs/7970310041#step:18:515

test_queue_when_using_auth
@pytest.mark.asyncio
    async def test_queue_when_using_auth():
        sleep_time = 1
    
        async def say_hello(name):
            await asyncio.sleep(sleep_time)
            return f"Hello {name}!"
    
        with gr.Blocks() as demo:
            _input = gr.Textbox()
            _output = gr.Textbox()
            button = gr.Button()
            button.click(say_hello, _input, _output)
        demo.queue()
        app, _, _ = demo.launch(auth=("abc", "123"), prevent_thread_lock=True)
        client = TestClient(app)
    
        resp = client.post(
            f"{demo.local_url}login",
            data={"username": "abc", "password": "123"},
            follow_redirects=False,
        )
        assert resp.status_code == 200
        token = resp.cookies.get("access-token")
        assert token
    
        with pytest.raises(Exception) as e:
            async with websockets.connect(
                f"{demo.local_url.replace('http', 'ws')}queue/join",
            ) as ws:
                await ws.recv()
        assert e.type == websockets.InvalidStatusCode
    
        async def run_ws(_loop, _time, i):
            async with websockets.connect(
                f"{demo.local_url.replace('http', 'ws')}queue/join",
                extra_headers={"Cookie": f"access-token={token}"},
            ) as ws:
                while True:
                    try:
                        msg = json.loads(await ws.recv())
                    except websockets.ConnectionClosedOK:
                        break
                    if msg["msg"] == "send_hash":
                        await ws.send(
                            json.dumps({"fn_index": 0, "session_hash": "enwpitpex2q"})
                        )
                    if msg["msg"] == "send_data":
                        await ws.send(
                            json.dumps(
                                {
                                    "data": [str(i)],
                                    "fn_index": 0,
                                    "session_hash": "enwpitpex2q",
                                }
                            )
                        )
                        msg = json.loads(await ws.recv())
                        assert msg["msg"] == "process_starts"
                    if msg["msg"] == "process_completed":
                        assert msg["success"]
                        assert msg["output"]["data"] == [f"Hello {i}!"]
                        assert _loop.time() > _time
                        break
    
        loop = asyncio.get_event_loop()
        tm = loop.time()
        group = asyncio.gather(
            *[run_ws(loop, tm + sleep_time * (i + 1) - 1, i) for i in range(3)]
        )
>       await group

test\test_blocks.py:1482: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_loop = <ProactorEventLoop running=False closed=False debug=False>
_time = 1029.375, i = 2

    async def run_ws(_loop, _time, i):
        async with websockets.connect(
            f"{demo.local_url.replace('http', 'ws')}queue/join",
            extra_headers={"Cookie": f"access-token={token}"},
        ) as ws:
            while True:
                try:
                    msg = json.loads(await ws.recv())
                except websockets.ConnectionClosedOK:
                    break
                if msg["msg"] == "send_hash":
                    await ws.send(
                        json.dumps({"fn_index": 0, "session_hash": "enwpitpex2q"})
                    )
                if msg["msg"] == "send_data":
                    await ws.send(
                        json.dumps(
                            {
                                "data": [str(i)],
                                "fn_index": 0,
                                "session_hash": "enwpitpex2q",
                            }
                        )
                    )
                    msg = json.loads(await ws.recv())
                    assert msg["msg"] == "process_starts"
                if msg["msg"] == "process_completed":
                    assert msg["success"]
                    assert msg["output"]["data"] == [f"Hello {i}!"]
>                   assert _loop.time() > _time
E                   assert 1028.406 > 1029.375
E                    +  where 1028.406 = <bound method BaseEventLoop.time of <ProactorEventLoop running=True closed=False debug=False>>()
E                    +    where <bound method BaseEventLoop.time of <ProactorEventLoop running=True closed=False debug=False>> = <ProactorEventLoop running=True closed=False debug=False>.time

test\test_blocks.py:1474: AssertionError
---------------------------- Captured stdout call -----------------------------
Running on local URL:  http://127.0.0.1:78[67](https://github.com/gradio-app/gradio/actions/runs/4525655930/jobs/7970310041#step:18:68)

To create a public link, set `share=True` in `launch()`.

https://github.com/gradio-app/gradio/actions/runs/4525534957/jobs/7970100856

TestDisableFlagging.test_flagging_no_permission_error_with_flagging_disabled
self = <test.test_flagging.TestDisableFlagging object at 0x0000026F0CD68D08>

    def test_flagging_no_permission_error_with_flagging_disabled(self):
        with tempfile.TemporaryDirectory() as tmpdirname:
            os.chmod(tmpdirname, 0o444)  # Make directory read-only
            nonwritable_path = os.path.join(tmpdirname, "flagging_dir")
    
            io = gr.Interface(
                lambda x: x,
                "text",
                "text",
                allow_flagging="never",
                flagging_dir=nonwritable_path,
            )
            try:
>               io.launch(prevent_thread_lock=True)

test\test_flagging.py:120: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
c:\hostedtoolcache\windows\python\3.7.9\x64\lib\tempfile.py:807: in __exit__
    self.cleanup()
c:\hostedtoolcache\windows\python\3.7.9\x64\lib\tempfile.py:811: in cleanup
    _shutil.rmtree(self.name)
c:\hostedtoolcache\windows\python\3.7.9\x64\lib\shutil.py:516: in rmtree
    return _rmtree_unsafe(path, onerror)
c:\hostedtoolcache\windows\python\3.7.9\x64\lib\shutil.py:[40](https://github.com/gradio-app/gradio/actions/runs/4525534957/jobs/7970100856#step:18:41)4: in _rmtree_unsafe
    onerror(os.rmdir, path, sys.exc_info())
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpsxrziwfp'
onerror = <function rmtree.<locals>.onerror at 0x0000026F16375E[58](https://github.com/gradio-app/gradio/actions/runs/4525534957/jobs/7970100856#step:18:59)>

    def _rmtree_unsafe(path, onerror):
        try:
            with os.scandir(path) as scandir_it:
                entries = list(scandir_it)
        except OSError:
            onerror(os.scandir, path, sys.exc_info())
            entries = []
        for entry in entries:
            fullname = entry.path
            try:
                is_dir = entry.is_dir(follow_symlinks=False)
            except OSError:
                is_dir = False
            if is_dir:
                try:
                    if entry.is_symlink():
                        # This can only happen if someone replaces
                        # a directory with a symlink after the call to
                        # os.scandir or entry.is_dir above.
                        raise OSError("Cannot call rmtree on a symbolic link")
                except OSError:
                    onerror(os.path.islink, fullname, sys.exc_info())
                    continue
                _rmtree_unsafe(fullname, onerror)
            else:
                try:
                    os.unlink(fullname)
                except OSError:
                    onerror(os.unlink, fullname, sys.exc_info())
        try:
>           os.rmdir(path)
E           PermissionError: [WinError 5] Access is denied: 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpsxrziwfp'

c:\hostedtoolcache\windows\python\3.7.9\x[64](https://github.com/gradio-app/gradio/actions/runs/4525534957/jobs/7970100856#step:18:65)\lib\shutil.py:402: PermissionError
---------------------------- Captured stdout call -----------------------------
Running on local URL:  http://127.0.0.1:78[73](https://github.com/gradio-app/gradio/actions/runs/4525534957/jobs/7970100856#step:18:74)

To create a public link, set `share=True` in `launch()`.

pngwn
pngwn previously requested changes Mar 27, 2023
Copy link
Member

@pngwn pngwn left a comment

Choose a reason for hiding this comment

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

Why are certain tests classed as flaky only on windows? We should get those behaving the same across OSes.

I am definitely in favour of this addition (although windows machines are typically slo.wer on GH Actions, so we need to be ready for a slowdown in CI)

@@ -23,6 +23,7 @@
## Testing and Infrastructure Changes:

- Removed heavily-mocked tests related to comet_ml, wandb, and mlflow as they added a significant amount of test dependencies that prevented installation of test dependencies on Windows environemnts. By [@abidlabs](https://github.com/abidlabs) in [PR 3608](https://github.com/gradio-app/gradio/pull/3608)
- Added Windows continuous integration, by [@space-nuko](https://github.com/space-nuko) in [PR 3628](https://github.com/gradio-app/gradio/pull/3628)
Copy link
Member

Choose a reason for hiding this comment

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

Internal changes don't require a changelog entry.

@abidlabs @freddyaboulton We should remove this section from the changelog. Its adds noise for people who are interested in learning about bug fixes and new features. We can keep track of internal changes elsewhere if we want to but we should separate them from the changleog which is for users and should only contain changes with have a user-impact.

Copy link
Member

@abidlabs abidlabs Mar 27, 2023

Choose a reason for hiding this comment

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

Sgtm we can remove in a separate PR

Copy link
Collaborator

Choose a reason for hiding this comment

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

Only downside is that if a community member makes an internal change (modifying a guide), they would not get credited

Copy link
Member

Choose a reason for hiding this comment

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

That's true. I'll leave things as is in this PR, we can figure out a policy in a separate PR

@abidlabs
Copy link
Member

Tests that didn't work when I ran them on CI (they succeed on my machine)

Just to confirm I'm not missing anything, @space-nuko, they are working now on CI, correct? I mean all of the tests (including) flaky test are passing on Windows CI

@space-nuko
Copy link
Contributor Author

All the tests succeed on my computer and CI yes

@abidlabs
Copy link
Member

abidlabs commented Mar 27, 2023

A different test fails for me locally on Windows: test/test_components.py::TestImage::test_serialize_url

Let me see if I can get the tests to run work consistently across OS-es and then we should be good here to merge.

@abidlabs abidlabs dismissed pngwn’s stale review March 27, 2023 15:50

The CI isn't running all of the tests. Maybe because of this? Gonna dismiss but will fix the issue you raised

@abidlabs
Copy link
Member

Made some updates to the tests:

  • \test\test_blocks.py::test_queue_when_using_auth should indeed have been marked as flaky across all operating systems, as discussed in the original issue when this first came out (thanks @freddyaboulton for pointing me to that). But given that the test is flaky and very non-essential, I have opted to remove it altogther
  • test.test_flagging.TestDisableFlagging::test_flagging_no_permission_error_with_flagging_disabled was written in a way that was not valid for Windows (Windows deletes temporary directories but the test changed the permissions on the directory so that it could not be deleted). This test has been rewritten to work across OS systems

With these two changes, the CI is passing locally and on GitHub so we should be good to merge.

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.

Thank you @space-nuko and @abidlabs !

@abidlabs
Copy link
Member

Merging, thanks for the contribution @space-nuko!

@abidlabs abidlabs merged commit e6ea19d into gradio-app:main Mar 27, 2023
dawoodkhan82 pushed a commit that referenced this pull request Mar 29, 2023
* 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 <abubakar@huggingface.co>
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 <lucainp@gmail.com>

* 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 <lucainp@gmail.com>

* 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 <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* 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 <alfonsoboulton@gmail.com>

* 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 <alfonsoboulton@gmail.com>

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

* fixes

* changelog

* Update gradio/components.py

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Update CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Fix embedded demos (#3638)

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* Fix windows flake (#3650)

* fix windows flake

* format backend

---------

Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>

* 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 <abubakar@huggingface.co>

* Fix test

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* Nit in ValueError (#3669)

* Nit in ValueError

* CHANGELOG

---------

Co-authored-by: freddyaboulton <alfonsoboulton@gmail.com>

* 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 <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* 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 <dawoodkhan82@gmail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Fix outdated sharing your app guide (#3699)

* fix embed this space screenshot

* fix use via api

* changelog

---------

Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>

* 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 <abubakar@huggingface.co>

* Update gradio/themes/builder.py

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* changes

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* 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 <abidlabs@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Fix chatbot newline issue (#3717)

* changes

* changes

* changes

* changelog

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* New Version Docs (#3720)

* [create-pull-request] automated change

* Trigger Build

---------

Co-authored-by: aliabd <aliabd@users.noreply.github.com>
Co-authored-by: aliabd <ali.si3luwa@gmail.com>

* 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 <alfonsoboulton@gmail.com>

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

* increase timeout

* merge

* Add changelog

---------

Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>

* 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 <abubakar@huggingface.co>

* 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 <akx@iki.fi>

* import (#3742)

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

* Fix typing extensions

* Import typing_extensions

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Access http token for ws connection (#3735)

* Access unsecure token

* CHANGELOG

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* 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 <abubakar@huggingface.co>

* changes (#3760)

* Make Client Jobs Iterable (#3762)

* Add iterator

* Break if done

* Add test for early termination

* changelog

* notebooks

---------

Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Lucain <lucainp@gmail.com>
Co-authored-by: pngwn <hello@pngwn.io>
Co-authored-by: Omar Sanseviero <osanseviero@gmail.com>
Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>
Co-authored-by: space-nuko <24979496+space-nuko@users.noreply.github.com>
Co-authored-by: Luo Peng <luopeng.he@gmail.com>
Co-authored-by: aliabid94 <aabid94@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: abidlabs <abidlabs@users.noreply.github.com>
Co-authored-by: aliabd <aliabd@users.noreply.github.com>
Co-authored-by: Dan Sully <dan+github@sully.org>
Co-authored-by: Aarni Koskela <akx@iki.fi>
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.

5 participants