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

Using marked for chatbot markdown parsing #4150

Merged
merged 15 commits into from
May 18, 2023
Merged

Using marked for chatbot markdown parsing #4150

merged 15 commits into from
May 18, 2023

Conversation

dawoodkhan82
Copy link
Collaborator

@dawoodkhan82 dawoodkhan82 commented May 10, 2023

Description

Move chatbot markdown parsing to frontend using marked, and highlight.js.

Screenshot 2023-05-15 at 4 21 23 PM

Please include:

  • relevant motivation
  • a summary of the change
  • which issue is fixed.
  • any additional dependencies that are required for this change.

Closes: #4146
Closes: #3680
Closes: #4143
Closes: #4092

Checklist:

  • I have performed a self-review of my own code
  • I have added a short summary of my change to the CHANGELOG.md
  • My code follows the style guidelines of this project
  • I have commented my code in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

A note about the CHANGELOG

Hello 👋 and thank you for contributing to Gradio!

All pull requests must update the change log located in CHANGELOG.md, unless the pull request is labeled with the "no-changelog-update" label.

Please add a brief summary of the change to the Upcoming Release > Full Changelog section of the CHANGELOG.md file and include
a link to the PR (formatted in markdown) and a link to your github profile (if you like). For example, "* Added a cool new feature by [@myusername](link-to-your-github-profile) in [PR 11111](https://github.com/gradio-app/gradio/pull/11111)".

If you would like to elaborate on your change further, feel free to include a longer explanation in the other sections.
If you would like an image/gif/video showcasing your feature, it may be best to edit the CHANGELOG file using the
GitHub web UI since that lets you upload files directly via drag-and-drop.

@pngwn
Copy link
Member

pngwn commented May 10, 2023

looks so cool.

Maybe if we add a min height to the chatbubbles that is roughly equal to one line, it will prevent that initial jumpy feeling?

@pngwn
Copy link
Member

pngwn commented May 10, 2023

Maybe consider prism over highlightjs for syntax highlighting. I think it is a little more complete and slightly better maintained. We're also using it elsewhere in the repo.

@abidlabs
Copy link
Member

@dawoodkhan82 this is still a draft or ready to be reviewed?

@gradio-pr-bot
Copy link
Collaborator

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

@dawoodkhan82
Copy link
Collaborator Author

@abidlabs will be ready for review later today. have to make some fixes first

aliabid94 and others added 4 commits May 12, 2023 00:21
* changes

* changes

* changes

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
* hotfix for test

* removed comment
@dawoodkhan82 dawoodkhan82 marked this pull request as ready for review May 12, 2023 05:33
@aliabid94
Copy link
Collaborator

Great work @dawoodkhan82. Can we make the codeboxes more clearly separate from the rest of the content?
Screen Shot 2023-05-12 at 12 34 32 PM
Screen Shot 2023-05-12 at 12 34 43 PM
Screen Shot 2023-05-12 at 12 37 07 PM

There is more of a visible difference on main:
Screen Shot 2023-05-12 at 12 37 01 PM

@abidlabs
Copy link
Member

abidlabs commented May 15, 2023

Haven't taken a deep look at this PR yet (having some issues building with pnpm) but wondering if this also solves (or can easily be adapted to solve) some of the other Markdown-related issues in the Chatbot, like rendering headings, lists and tables

Also, does this approach play nicely with LaTeX rendering in the backend?

@dawoodkhan82
Copy link
Collaborator Author

See updated screenshot for fixes. Ready for re-review @abidlabs @pngwn

@abidlabs
Copy link
Member

Very cool! Taking a look now

@abidlabs
Copy link
Member

This is fantastic @dawoodkhan82! Works quite well in my tests. This also closes #3680 I believe so I've added that to the parent comment.

I did notice some design nits:

Code

  1. In Dark mode, code with a specified language has a weird gold border and gold background color:
image

Code to reproduce:

import gradio as gr

code = """
This is some code in Python:

```python
def test(x):
  return x
```
"""

value = [
    ("Hello", code),
    (code, "Nice!")
]

with gr.Blocks() as demo:
    gr.Chatbot(value)
    
demo.launch()

In light mode, it looks great. It would be good to check the other built-in gradio themes to confirm that they work appropriately

  1. Code with no language specified has reduced margin

There's slightly less vertical margin around the code if no language is specified. I think it should be a little more:

image

Code to reproduce:

import gradio as gr

code = """
This is some code in Python:

```
def test(x):
  return x
```
"""

value = [
    ("Hello", code),
    (code, "Nice!")
]

with gr.Blocks() as demo:
    gr.Chatbot(value)
    
demo.launch()

@abidlabs
Copy link
Member

Tables and Lists

  1. It would be good to add a tiny bit of vertical margin above and below the tables, just like there is with the code:
image
  1. In Dark mode, there is no visible table border when the table is on the right side of the chat:
image

It would be good to test with the other built-in themes as well

  1. The lists look good when they are on the left side of the chat. When they are on the right side, there isn't enough margin on the left side:
image

Code to reproduce the above:

import gradio as gr

code = """
And here is a table:
| Syntax      | Description |
| ----------- | ----------- |
| Header      | Title       |
| Paragraph   | Text        |

And here is a list:
1. ad
2. ad
3. ad

And here are bullets
* sdf
* adslkfjasldkf
* dasf
"""

value = [
    ("Hello", code),
    (code, "Nice!")
]

with gr.Blocks() as demo:
    gr.Chatbot(value)
    
demo.launch()

@dawoodkhan82
Copy link
Collaborator Author

Fixed the styling issues @abidlabs

@abidlabs
Copy link
Member

Looks lovely!

@dawoodkhan82
Copy link
Collaborator Author

@abidlabs Sure, I can look into latex support in a separate pr

@abidlabs
Copy link
Member

Based on @aliabid94’s benchmarking, this should close #4092 as well

@Keldos-Li Keldos-Li mentioned this pull request May 17, 2023
7 tasks
@Keldos-Li
Copy link
Contributor

little suggestion:

How should you fix list styling:

message-wrap :global(ol),
message-wrap :global(ul) {
    padding-inline-start: 2em;
}

@Keldos-Li
Copy link
Contributor

Keldos-Li commented May 17, 2023

In our own project built with gradio, we rendered latex using mathjax:

iShot_2023-04-25_.1.34.09.mp4

BUT PLEASE give users or developers a choice of whether or not to render in-line formulas! Because the $ symbol can really cause a lot of problems. The $ in the table or the $ in the code block displaying shell code is likely to cause the entire display to be confused. Do not add formula rendering directly by default please. As the developer who actually uses Gradio for user-oriented projects, I believe we have encountered more issues with $ than you think...

@Keldos-Li
Copy link
Contributor

In fact, I felt really upset when I saw this PR 🤧. Maybe you can let developers decide what to do with chatbot messages?😢 The origin method using python to post_process messages allows us to achieve some cool effects such as:
iShot_2023-05-18_上午12 57 55

And for us, at least we believe and implement the principle that all messages sent by users should remain in their original format without being rendered by markdown or something. Though I know there may be different opinions, but at least, the origin method makes it possible for us to override and take control of the styles of the output... I'm now very nervous that we may lose our features with this gradio update.

I would also say this should be written in breaking change rather than other changes😕

or maybe something cool may happen with svelte? I'm not quite sure with that.

@abidlabs
Copy link
Member

abidlabs commented May 17, 2023

Hi @Keldos-Li I think it should still be possible to achieve what you're showing in the screenshot. Basically the difference between the two is that in one case, you escape the Markdown, while in the other, you do not, correct? If you escape the Markdown and send it to the frontend, it will (should?) remain in its raw form even if the rendering is moved the frontend.

Are there any other concerns that you have? There are a variety of reasons that we moved the rendering to the frontend (you can take a look at the linked issues to see, among them being: (1) more expected results when using Gradio Chatbots via APIs and (2) less latency

@abidlabs
Copy link
Member

little suggestion:

How should you fix list styling:

message-wrap :global(ol),
message-wrap :global(ul) {
    padding-inline-start: 2em;
}

Adding a little bit of padding on the left of the lists is not a bad idea @dawoodkhan82

@Keldos-Li
Copy link
Contributor

If you escape the Markdown and send it to the frontend, it will (should?) remain in its raw form even if the rendering is moved the frontend.

That makes sense!We'll try to handle this. Thanks for the reply!

Now I understand why it's important for you to move rendering to the front-end. You are right.

Yeah... I think I'll just have no more concerns for now if we still get a chance to take control of the message output. Thanks.

Gradio is such a great app, we really appreciate your contribution.

@dawoodkhan82 dawoodkhan82 merged commit 7145327 into main May 18, 2023
@dawoodkhan82 dawoodkhan82 deleted the marked branch May 18, 2023 15:55
@pseudotensor
Copy link
Contributor

Awesome!

@dawoodkhan82 dawoodkhan82 mentioned this pull request May 18, 2023
1 task
@Keldos-Li
Copy link
Contributor

Hi @Keldos-Li I think it should still be possible to achieve what you're showing in the screenshot. Basically the difference between the two is that in one case, you escape the Markdown, while in the other, you do not, correct? If you escape the Markdown and send it to the frontend, it will (should?) remain in its raw form even if the rendering is moved the frontend.

Are there any other concerns that you have? There are a variety of reasons that we moved the rendering to the frontend (you can take a look at the linked issues to see, among them being: (1) more expected results when using Gradio Chatbots via APIs and (2) less latency

@abidlabs Sorry to bother you again. We have encountered a problem that we cannot solve... So I'm here to ask for help.

These days we have been working hard to adapt to the new Gradio, but we have encountered difficulties in achieving our original feature in the screenshot above. Perhaps we could write a function to convert the special markdown control characters in advance, but our main issue at the moment is that we are unable to switch the display of rendered and not-rendered text.

Previously, we developed new postprocess and postprocess_chat_messages functions to override the original Gradio functions. This allowed us to parse chat_message through our additional functions. The core code for this part of the function is roughly as follows:

def convert_mdtext(md_text):
    ...
    raw = f'<div class="raw-message hideM">{html.escape(md_text)}</div>'
    result = ...
    output = f'<div class="md-message">{result}</div>'
    output += raw
    ...
    return output

Then, we use CSS and JavaScript to control the display of these two divs through the click event of the button we created.

However, after {@html marked.parse(message)}, everything is invalid... I saw that you configured it for marked:

marked.setOptions({
    ...
    sanitize: true,
    ...
});

marked.setOptions({
renderer: new marked.Renderer(),
gfm: true,
breaks: true,
pedantic: false,
sanitize: true,
smartLists: true,
smartypants: false
});

However, in the marked documentation, it says:

image

Although it does mention that this may bring XSS attacks, turning off sanitize may be crucial for our project. Moreover, marked also recommends not to use its sanitize directly (but to use other libraries).

Warning: 🚨 Marked does not sanitize the output HTML. If you are processing potentially unsafe strings, it's important to filter for possible XSS attacks. Some filtering options include DOMPurify (recommended), js-xss, sanitize-html and insane on the output HTML! 🚨

I was wondering if it's possible to set the sanitize option in marked.setOptions to false? Or maybe provide an option for us to choose whether to sanitize... (I know it's unlikely, sigh)

Alternatively, do you know of any other methods to prevent HTML tags from being rendered by marked?

Or perhaps you could think of some other ways for us to achieve the desired effect?

Or... maybe Gradio has considered adding a feature that allows switching between markdown rendering and copying raw output? It shouldn't be too difficult to implement with Svelte... (we'd be happy to help) If Gradio had these features natively, we wouldn't be having this problem.

Sorry for replying in this PR again, please forgive me if I'm mistaken.

@abidlabs
Copy link
Member

abidlabs commented May 31, 2023

I was wondering if it's possible to set the sanitize option in marked.setOptions to false?

We are working on doing something like this in this PR in progress: #4360 (feel free to chime in if that does not fix it for you)

Apologies for the breaking change, but we are working on restoring functionality soon & hopefully with the move the frontend, processing should be much faster.

@Keldos-Li
Copy link
Contributor

We are working on doing something like this in this PR in progress: #4360 (feel free to chime in if that does not fix it for you)

Such great news! Thank you!!!

@abidlabs
Copy link
Member

Such great news! Thank you!!!

Feel free to test it out by installing pip install https://gradio-builds.s3.amazonaws.com/db234a0f26a2720b1764be97e3cc4bfa70795275/gradio-3.32.0-py3-none-any.whl and letting us know if it works/doesn't work for your use case

dawoodkhan82 added a commit that referenced this pull request Jun 11, 2023
* Add min max handling for Number (#3871)

* feat: add min max handling for Number

* Update CHANGELOG.md

* fix: Error when min or max is not specified

* fix formatting

* fix: error when nothing is specified

* Just put infinity in min and max

---------

Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com>

* number limit

* Update gradio/components.py

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

* New Version Docs (#4027)

* [create-pull-request] automated change

* Trigger Build

---------

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

* Safer `HuggingFaceDatasetSaver` (and deprecate `HuggingFaceDatasetJsonSaver`) (#3973)

* Draft for a safer HuggingFaceDatasetSaver

* Rename (and replace) gr.SaferHuggingFaceDatasetSaver as gr.HuggingFaceDatasetSaver

* update changelog

* ruff

* doc

* tmp work

* merge 2 classes

* remove useless code

* adapt tests

* Update gradio/flagging.py

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

* Update CHANGELOG.md

* fix typing

* code formatting

* removed print from tests

* removing imports

* removing imports

* fix paths

* formatting

* wording

* formating

* fix tests

---------

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

* merge

* Allow state to be rendered multiple times (#4030)

* state render

* add test

* formatting

* changelog

* Allow decoding b64 string without header in processing utils (#4031)

* allow decoding b64 string without headers

* install gradio-client in edittable mode

* update GH actions

* add test for decoding headerless b64

* add test for decoding headerless b64 image

* some linting

* fix test

---------

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

* Sets matplotlib backend to agg before rendering math (#4029)

* matplotlib-agg

* fix

* context manager

* Update CHANGELOG.md

* update demos

* linting

* removed warning

* fix test

* fixes

* fix tests

* Upgrade pyright to 1.1.305 (#4042)

* Fastapi Python Client Guide (#3892)

* fastapi guide

* changelog

* writing

* finish guide

* fix

* Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* dependencies

* html

---------

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* fix overflowing gutter and dark mode base color (#4051)

* Add ability to blocklist filepaths, ability to specify where gradio temp files are created (#4047)

* temporary file

* tests

* formatting

* rename

* added another test

* guide

* formatting

* changelog

* added custom gradio temp directory (#4053)

* added custom gradio temp directory

* Update 03_sharing-your-app.md

* rename test

* address review

* remove print

* Chatbot code syntax highlighting (#4048)

* first pass

* fixes

* more fixes

* remove breaks

* format

* version

* pr fixes

* changelog

* test fix

* background color

* format

* revert test fix

* changes

* changes

* test

* changes

* changes

* changes

* changes

* changes

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Ali Abid <aabid94@gmail.com>

* Fixes issue with indentation in code field with streaming (#4043)

* indent fix

* fix

* changelog

* fix overflowing gutter and dark mode base color (#4051)

* Add ability to blocklist filepaths, ability to specify where gradio temp files are created (#4047)

* temporary file

* tests

* formatting

* rename

* added another test

* guide

* formatting

* changelog

* added custom gradio temp directory (#4053)

* added custom gradio temp directory

* Update 03_sharing-your-app.md

* rename test

* address review

* remove print

* Chatbot code syntax highlighting (#4048)

* first pass

* fixes

* more fixes

* remove breaks

* format

* version

* pr fixes

* changelog

* test fix

* background color

* format

* revert test fix

* changes

* changes

* test

* changes

* changes

* changes

* changes

* changes

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Ali Abid <aabid94@gmail.com>

* fix

* fix test

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: pngwn <hello@pngwn.io>
Co-authored-by: Ali Abid <aabid94@gmail.com>

* [create-pull-request] automated change (#4059)

Co-authored-by: aliabid94 <aliabid94@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* changelog (#4064)

* New Version Docs (#4069)

* [create-pull-request] automated change

* Trigger Build

---------

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

* Soft theme fix (#4070)

* fix

* fix

---------

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

* Empty gallery fix (#4072)

* changes

* changes

---------

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

* Fix bug where functions with type hints caused errors (#4068)

* Fix + test

* CHANGELOG

* Update test/test_utils.py

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

* Update gradio/utils.py

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

---------

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

* More Ruff rules (#4038)

* Bump ruff to 0.0.264

* Enable Ruff Naming rules and fix most errors

* Move `clean_html` to utils (to fix an N lint error)

* Changelog

* Clean up possibly leaking file handles

* Enable and autofix Ruff SIM

* Fix remaining Ruff SIMs

* Enable and autofix Ruff UP issues

* Fix misordered import from #4048

* Fix bare except from #4048

---------

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

* [WIP] Language Agnostic Typing in `/info` route (#4039)

* First commit

* All serializers

* Remove output type

* Add route

* Format json

* Modify dropdown and slider choices

* Fix impl

* Lint

* Add tests

* Fix lint

* remove breakpoint

* Tests passing locally

* Format code

* Address comments

* Use union + fix tests

* handle multiple file case

* Add serializer to info payload

* lint

* Add to CHANGELOG

* grc version

* requirements

* fix test

---------

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

* Keep hidden Accordion content in DOM (#4073)

* changes

* changes

---------

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

* Theme builder fixes (#4080)

* theme-builder-fixes

* theme-builder-fixes

* fix expand issue

* changes

* Update gradio/themes/builder_app.py

* changelog

---------

Co-authored-by: Ali Abid <aabid94@gmail.com>

* Misc file and docs fixes (#4086)

* uvicorn version

* uvicorn version

* changes

* guides

* guide

* changelog

* typo

* typo

* Update guides/04_integrating-other-frameworks/01_using-hugging-face-integrations.md

* chinese lang

* rename

* Update guides/04_integrating-other-frameworks/01_using-hugging-face-integrations.md

* Update guides/03_building-with-blocks/04_custom-CSS-and-JS.md

Co-authored-by: aliabid94 <aabid94@gmail.com>

* address review

* simplify section

---------

Co-authored-by: aliabid94 <aabid94@gmail.com>

* Removing "State" from view API info (#4107)

* wip pr

* update client version

* update space fetcher

* changelog, workflow

* fix not flaky tests

* lint

* v2

* Dont send request to `/info` if version before 3.28.3 (#4109)

* Add code

* Lint

* CHANGELOG

---------

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

* Upload audio ios (#4071)

* changes

* changes

* change

* changes

* changes

* changes

---------

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

* Allow textbox / number submits to trigger Interface submit (#4090)

* changes

* changes

* changes

* changes

* changes

---------

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

* Fix slider released event not triggering when released on mobile (#4098)

* Fix slider released event not triggering when released on mobile

* Update CHANGELOG

* fix range test

* retrigger

---------

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

* Fix then logic to work after failures (#4115)

* change

* changes

* changes

---------

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

* Fixes to view API page (#4112)

* logo

* fix for new info and logo path

* changelog

* remove example_input from returns

---------

Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* Add support for async generators (#3821)

* Add impl + unit test

* CHANGELOG

* Lint

* Type check

* Remove print

* Fix tests

* revert change

* Lint

* formatting

* Fix test

* Lint

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Ali Abid <aabid94@gmail.com>

* release (#4116)

* Bumpt client version (#4125)

* New Version Docs (#4131)

* [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 create version docs action (#4130)

* define version instead of upgrading

* add sleep

---------

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

* Fix dev docs (#4132)

* Move .config/README.md to js/README.md

* Link js/README.md from CONTRIBUTING.md

* Update CHANGELOG.md

---------

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

* changelog (#4136)

* Fix website build issue (#4142)

* upgrade pnpm

* changelgo

* Fix python client test (#4138)

* Fix python client test

* CHANGELOG

---------

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

* Fix isssue with running with nginx (#4133)

* nginx-root

* fix

* ability to set root path

* removed root

* removed root

* fix

* changelog

* Update gradio/routes.py

Co-authored-by: aliabid94 <aabid94@gmail.com>

* Update gradio/routes.py

Co-authored-by: aliabid94 <aabid94@gmail.com>

---------

Co-authored-by: aliabid94 <aabid94@gmail.com>

* Record username when flagging (#4135)

* record username

* fix

* changelog fix

* format

* fix hf saver

* fix deserialization

* fixes

* Fix api info for File component (#4153)

* Fix output file type info

* Fix example inputs

* CHANGELOG

* Update client

* Add test

* Bump version

* Bump min client version

* Update .prettierignore adding client/js/dist and .venv (#4160)

* Fix the prettier.ignorePath field in the VSCode workspace settings (#4164)

Co-authored-by: pngwn <hello@pngwn.io>

* simplify format of changelog (#4163)

* Fix the wildcard in .editorconfig to match files in nested directories (#4165)

* Fix the wildcard in .editorconfig to match files in nested directories

* Remove a wrong whitespace in a brace expansion notation in .editorconfig

---------

Co-authored-by: pngwn <hello@pngwn.io>

* Fix flaky interface test (#4168)

* Fix test

* Lint

* Fix vs code lint

* Adds missing components to gradio client serializing's component mapping (#4167)

* add missing serialization

* format

* update release note format

* update release note format

* fix test

* Release 3.30 (#4166)

* release

* requirements

* [Docs] Resolve numerous typos (#4170)

* Resolve numerous typos

* Delete test.py

* Run generate_notebooks

* notebooks

---------

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

* New Version Docs (#4172)

* [create-pull-request] automated change

* Update v3.30.0_template.html

---------

Co-authored-by: abidlabs <abidlabs@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Dispatch dropdown change on value change for any reason (#4128)

* changes

* changes

* changes

---------

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

* hotfix for test (#4173)

* hotfix for test

* removed comment

* 3712 js client (#3899)

* update ci (#4184)

* bump client version (#4185)

* bump client version

* ignore spaces-test

* Fix (#4186)

* bump client version

* ignore spaces-test

* fix

* update token for npm action (#4187)

* change (#4189)

* ci typo (#4190)

* Fix npm publish again again (#4191)

* ci typo

* fix

* Fix npm publish again again (#4192)

* ci typo

* fix

* again

* Fix npm publish again again (#4193)

* ci typo

* fix

* again

* again

* Add format argument to Audio (#4178)

* experimental

* Add test

* Rename to format

* Rename

* CHANGELOG

* Add to docstring

* Update gradio/components.py

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

---------

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

* chore: update versions (#4188)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Fix npm publish again again (#4195)

* ci typo

* fix

* again

* again

* again

* client docs tweaks (#4196)

* ci typo

* fix

* again

* again

* again

* ignore workbench

* small tweaks for publish + docs

* Fix "TypeError: issubclass() arg 1 must be a class" When Optional args  (#4200)

* fix "issubclass() arg 1 must be a class" when args is Optional

* Update CHANGELOG.md

add fix "TypeError: issubclass() arg 1 must be a class" when use Optional args

* Update gradio/helpers.py

Co-authored-by: Aarni Koskela <akx@iki.fi>

* changelog

* formatting

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Aarni Koskela <akx@iki.fi>

* Fix semiver import (#4201)

* fix token (#4208)

* fix token

* add label

* Fix Explanation Regarding NumPy Image Component (#4204)

* 20230513 swap np height and width in docs

* changelog

---------

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

* Correct stacklevel for check_deprecated_parameters (#4203)

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

* Programmatically launch reload to allow factories and arguments to be passed to the app (#4119)

* Programmatically lauch reload to allow factories and arguments to be passed to the app

* add warning

* modify warning

* guide fixes

* formatting

* changes

* warning

* import fix

* fix tests

* fix tests

---------

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

* Update CONTRIBUTING.md (#4220)

* Input listener (#4157)

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* chnages

* fix

* changes

* changes

* merge

* changes

* restore

---------

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

* Do not do any analytics requests if analytics are disabled (#4194)

* Move analytics-related bits to gradio.analytics

* Do not do any analytics requests if analytics are disabled

* Remove unused log_feature_analytics

* removed redundant analytics, rewrote

* renamed

* save

* fixed test'

---------

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

* Increase websocket messaging timeout (#4235)

* increase websocket timeout

* changelog

* Fix for `typing.get_type_hints()` on Python 3.9 or lower (#4228)

* fix

* fix docstring

* type hint fix

* fix test

* Update gradio/utils.py

Co-authored-by: Aarni Koskela <akx@iki.fi>

* fix indentation

---------

Co-authored-by: Aarni Koskela <akx@iki.fi>

* Some tweaks to the Client (#4230)

* parameter names

* tweaks

* separate out serialize

* fix

* changelog

* fix

* fix

* improve test

* Only allow messaging update if analytics is enabled (#4236)

* Only allow messaging update if analytics are allowed

Follows up on #4194

* Remove duplicate changelog entry

* remove circular import

---------

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

* Fix client filepaths (#4202)

* transform returned paths to useful URLs

* changeset

* update app

* revert

* revert

* changelog

* Update client/js/src/client.ts

Co-authored-by: aliabid94 <aabid94@gmail.com>

* format

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: aliabid94 <aabid94@gmail.com>

* fix cancels (#4225)

* fix cancels

* changelog

* refactor to make it work

* chore: update versions (#4207)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Fix publish (#4240)

* fix npm publish

* fix npm publish

* release (#4219)

Co-authored-by: pngwn <hello@pngwn.io>

* Fixes chatbot_dialogpt demo (#4238)

* demo fix

* changelog

* fix

* demo

---------

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

* Fix JSONDecodeError (#4241)

* Fix JSONDecodeError bug (#4237)

* Remove unused import

* Clean up code

* Fix JSONDecodeError (#4241)

* Accept all Exceptions

---------

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

* make workbench private (#4247)

* Refactoring (#4223)

* Replace var with const in js/app/src/main.ts

* Remove unnecessary nullish coalescing in js/app/src/main.ts

* Remove unnecessary white spaces in the NPM scripts in js/app/package.json

* Use object key-value shorthand

* changelog

---------

Co-authored-by: pngwn <hello@pngwn.io>

* Move mount_css() from main.ts to css.ts (#4222)

* Move mount_css() from main.ts to css.ts because these is a circular dependency between main.ts and Index.svelte (and it will help the development of the Wasm ver in the future)

* changelog

---------

Co-authored-by: pngwn <hello@pngwn.io>

* [create-pull-request] automated change (#4250)

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

* Fix run on click (#4258)

* fix run on click

* changelog

* Upgrade black to 23.3 (#4259)

* Upgrade black

* Conservatively upgrade packaging too since it's black's dependency

* Using marked for chatbot markdown parsing (#4150)

* fix info request in js client (#4271)

* fix info request in js client

* changelog

* Temp file fixes (#4256)

* Fix bug

* Linting

* CHANGELOG

* Add tests

* Update test

* Fix remaining components + add tests

* Fix tests

* Fix tests

* Address comments

* Ensure error modal display as expected when using the queue (#4273)

* Allow passing FastAPI app options (#4282)

* App: don't force docs_url and redoc_url to None

* App.create_app: allow passing in app_kwargs

* start_server + launch: allow passing in app_kwargs

* Changelog

* Apply suggestions from code review

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

* Use .launch for tests

---------

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

* Katex support in chatbot (#4285)

* katex

* katex support

* changelog

* fixes

* pr fixes

---------

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

* Release 3.32.0 (#4293)

* release 3.32.0

* changelog

* New Version Docs (#4296)

* [create-pull-request] automated change

* Update v3.32.0_template.html

---------

Co-authored-by: abidlabs <abidlabs@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Add overridden type annotations on `normalise_file()` to remove @TS-i… (#4315)

* Add overridden type annotations on `normalise_file()` to remove @ts-ignore, and remove its unnecessary export

* changeset

---------

Co-authored-by: pngwn <hello@pngwn.io>

* typo (minor): extra newline puts the documentation of colums to grid (#4337)

* typo (minor): extra newline puts the documentation of colums to grid

* edited changelog

* changelog

---------

Co-authored-by: thiswillbeyourgithub <github@32mail.33mail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* return a Dependency instance from Blocks.load event listener (#4304)

* return a Dependency instance from Blocks.load event listener

* a test case for chaining then from load event

* update CHANGELOG

* add test for load.then with blocks re-used

* fixes

---------

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

* Fix typo in client/js/README.md (#4310)

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

* chore: update versions (#4283)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Optimize frontend's is_dep calls (#4334)

* Optimize is_dep (36 to 12 msec)

* Call is_dep less (12 msec to 9 msec)

* Changelog

---------

Co-authored-by: pngwn <hello@pngwn.io>

* various client refactors + tweaks (#4357)

* changeset

* Add a type annotation on the `api` variable to which the return value of `view_config()` is assigned, and update the type annotation and exception handling on `view_config` as well (#4311)

* Remove unnecessary @ts-ignore (#4314)

* Remove unnecessary Promise wrapping another promise (#4313)

* Remove unnecessary Promise wrapping another promise

* Remove an error handeler that may remove detailed error stacks

* changeset

* remove changeset

---------

Co-authored-by: pngwn <hello@pngwn.io>

* Stop using `let` for unchanged variables in `client.ts` (#4312)

* Stop using `let` for unchanged variables in `client.ts`

* fixes

---------

Co-authored-by: pngwn <hello@pngwn.io>

---------

Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com>

* Remove a bunch of unused frontend code (#4275)

Co-authored-by: pngwn <hello@pngwn.io>

* Respect `interactive=True` in output of `gr.Interface` (#4356)

* tests

* changelog

* lint

* Update gradio/interface.py

Co-authored-by: Aarni Koskela <akx@iki.fi>

* format

---------

Co-authored-by: Aarni Koskela <akx@iki.fi>

* Don't allow dotfiles for /file= route (#4303)

* Don't allow dotfiles or files in "dot directories" for /file=

* update guide

---------

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

* Push to spaces (#4033)

* changes

* first commit

* Update gradio/upload.py

Co-authored-by: Aarni Koskela <akx@iki.fi>

* Update gradio/upload.py

Co-authored-by: Aarni Koskela <akx@iki.fi>

* changes

* changes

* changes

* changes

* changes

* changes

* changes

* chnages

* changes

* changes

* changes

* changes

* Update 03_sharing-your-app.md

* changes

* changes

* change

* changes

* changes

* changes

* Update gradio/deploy_space.py

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

* changes

* changes

* changes

---------

Co-authored-by: Aarni Koskela <akx@iki.fi>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Do not send HF token to other domains via `/proxy` (#4368)

* test

* fix

* changelog

* fix, add warnings

* Make chatbot input fields non-interactive while bot is streaming (#4363)

* Add demo impl

* trigger then if generating

* remove unused value

* CHANGELOG

* Fix code

* Update guide

* Update guides/07_other-tutorials/creating-a-chatbot.md

Co-authored-by: pngwn <hello@pngwn.io>

---------

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

* Prevent path traversal in `/file` routes (#4370)

* add tests

* add tests

* file route fix

* update tests

* formatting

* file access

* cleanup

* cleaning

* fix tests

* Favicon fix for Windows (#4369)

* favicon fix

* changelog

* svg

* remove favicon

* actual fix

* Add pypi classifiers to pyproject.toml (#4383)

* Add pypi classifiers to pyproject.toml

* Add OS classifier

---------

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

* Use DOMPurify to sanitize html in chatbot (#4360)

* dompurify

* changelog

* format

* clean

* changelog

* Update run.py

* update happy-dom

---------

Co-authored-by: pngwn <hello@pngwn.io>

* fix copy button invalid & copy button (invisible) duplication bug in chatbot (#4350)

* fix a copy button duplication bug in chatbot

* fix copy button invalid issue

* Update CHANGELOG.md: Fixed Copy Button

* fix changelog typo

* switch to static HTML + event delegation for copy button

* fix

* format + notebooks

* format + notebooks

---------

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

* release 3.33.0 (#4392)

Co-authored-by: aliabid94 <aabid94@gmail.com>

* Restore offline support (#4398)

* changes

* changes

* changes

* New Version Docs (#4397)

* [create-pull-request] automated change

* Update temporary_template.html

---------

Co-authored-by: abidlabs <abidlabs@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>

* Fix Base parent in Docs, add Group (#4391)

* fix base parent

* add group to docs

---------

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

* Remove old versioned docs and fix repo classification  (#4362)

* remove old versioned docs

* delete versioned docs when new one is created

* ignore website dir in linguist calc

* upload and download versioned docs

* modify github action

* remove gitattributes file

---------

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

* Update message when share link binary is blocked (#4380)

* update share link message

* address suggestion

* changelog

* fix

* formatting

* Update utils.py for validate_url (#4388)

* Update utils.py for validate_url

AWS s3 presigned url cannot work for both HEAD and GET. So when HEAD the presigned url, it will return 403(Forbidden)

* Update gradio/utils.py

* changelog

---------

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

* v3.33.1 + Guide on setting up Gradio behind nginx... (#4379)

* nginx guide

* delete 3.33.0

* version

* unindent

* Prevent label change event from triggering itself (#4371)

* Fix the Node and pnpm setup actions (#4394)

* Run `pnpm i` with pnpm@8.6.0 to re-generate the lock file (#4393)

* fix indent (#4404)

* Throttle scroll event  (#4158)

* Throttle scroll event

This decreases the amount of function calls when scrolling through the documentation website.

* fix themes base

---------

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>

* merge

* fixes

* changes

* more changes

* notebook

* changelog

* error handle backend

* Update gradio/components.py

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

* Update gradio/components.py

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

* Adds `variant` and `interactive` props to `gr.UploadButton` (#4436)

* upload button

* fix index

* changelog

* formatting

* cleanup

* fix  get_continuous_fn bug when having every (#4434)

* fix the bug for wrap continuous func with parameter every while origin func return generator

* Update utils.py

* Update CHANGELOG.md

* Update test_utils.py

* Update CHANGELOG.md

* formatting

---------

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

* Fix Safari video playback (#4433)

* changes

* changes

---------

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

* test fix

* test

* tests

* fix ui test

* format

* Increase version gradio-client version/changelog (#4441)

* Increase version gradio-client version/changelog

* req

---------

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

* fixes

* notebook

* fixed tests finally

* format

* python test fix

* test fix

* remove style from test

* Update CHANGELOG.md

* theme test fix

---------

Co-authored-by: Artemy Egorov <artegoser@gmail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: aliabd <aliabd@users.noreply.github.com>
Co-authored-by: aliabd <ali.si3luwa@gmail.com>
Co-authored-by: Lucain <lucainp@gmail.com>
Co-authored-by: testbot <lucainp@hf.co>
Co-authored-by: 1lint <105617163+1lint@users.noreply.github.com>
Co-authored-by: Aarni Koskela <akx@iki.fi>
Co-authored-by: pngwn <hello@pngwn.io>
Co-authored-by: Ali Abid <aabid94@gmail.com>
Co-authored-by: aliabid94 <aliabid94@users.noreply.github.com>
Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>
Co-authored-by: space-nuko <24979496+space-nuko@users.noreply.github.com>
Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com>
Co-authored-by: Tom Aarsen <37621491+tomaarsen@users.noreply.github.com>
Co-authored-by: abidlabs <abidlabs@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: LingFeng.Chen.Cn <lingfeng.chen.cn@gmail.com>
Co-authored-by: Der Chien <b03902015@ntu.edu.tw>
Co-authored-by: Micky Brunetti <micky2be@users.noreply.github.com>
Co-authored-by: David Ai <davidai2018@gmail.com>
Co-authored-by: thiswillbeyourgithub <26625900+thiswillbeyourgithub@users.noreply.github.com>
Co-authored-by: thiswillbeyourgithub <github@32mail.33mail.com>
Co-authored-by: Paul Garner <ego@anentropic.com>
Co-authored-by: WilliamRoyNelson <william.roy.nelson@gmail.com>
Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com>
Co-authored-by: Yan <alvindaiyan@gmail.com>
Co-authored-by: Shavit <shavit@users.noreply.github.com>
Co-authored-by: dkjshk <xie0510@126.com>
@jefffohl
Copy link

jefffohl commented Jun 13, 2023

Thanks for this @dawoodkhan82 - this is great. However, I noticed that there seems to be a problem with dark/light mode handling and the Prism code highlighting. When the operating system has selected "light" or "dark" themes, the Chatbot component works fine. However, when using the dark/light mode theming pattern established elsewhere in Gradio, which uses the class name dark applied to the <body> element, we run into problems. When the OS is indicating the preferred theme to be "light", but then we toggle the them to "dark" using the classname method, the Prism code highlighting is not also toggled.

Example:
Screenshot 2023-06-13 at 9 27 59 AM

then, toggling the "Dark Mode" by clicking the button which applies the class dark to the <body> element of the app, which enables the dark mode of the theme (as applied in the base Gradio theme):

Screenshot 2023-06-13 at 9 28 09 AM

We see that the logic for applying the Prism code highlighting is separate from the CSS pattern described above, which results in what is seen in the second example shown above.

Am I simply implementing this incorrectly, or is there more work to do here to sync up the code highlighting dark mode with the Gradio theme for dark mode handling? If the latter, I would be happy to try and help.

@pseudotensor
Copy link
Contributor

Thanks for giving details @jefffohl !

@dawoodkhan82
Copy link
Collaborator Author

@jefffohl seems like its a bug, where the prism highlighting doesn't react to the dark mode change. Can you open a new issue with this context and assign it to me? I'll take a look. Thanks!

@jefffohl
Copy link

Will do - thanks @dawoodkhan82 !

@jefffohl
Copy link

@dawoodkhan82 issue created ^^ - I don't seem to have permission to assign it to anyone though. Thanks for your help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
9 participants