From d09eb4f7cc80e25ccab8eec5252bb8fcd420a6cf Mon Sep 17 00:00:00 2001 From: Marc Skov Madsen Date: Sun, 1 Oct 2023 11:49:35 +0200 Subject: [PATCH 01/12] add locust load tests --- README.md | 19 +++++++++++++++++ assets/images/panel-chat-examples-locust.png | Bin 0 -> 107173 bytes requirements_dev.txt | 3 ++- tests/locustfile.py | 21 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 assets/images/panel-chat-examples-locust.png create mode 100644 tests/locustfile.py diff --git a/README.md b/README.md index 589bf16..c1fe166 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,25 @@ SCREENSHOT=true pytest tests --headed The screenshots can be found in tests/ui/screenshots +### Load testing + +To ensure the apps can be deployed for example to Hugging Face spaces we need them to load fast. +We can test the loading time with [Locust](https://docs.locust.io/en/stable/index.html). + +First you need to [serve the examples](#serve-the-examples). + +Then you should run + +```bash +locust -f tests/locustfile.py -H http://localhost:5006 --users 1 --spawn-rate 1 +``` + +Finally you can open [http://localhost:8089/](http://localhost:8089/) and click "Start swarming" + +You should make sure the RPS (Request per seconds) stay above 1. In the image below its 2.3. + +![Locust](assets/images/panel-chat-examples-locust.png) + ### Pre Commit Before committing please run diff --git a/assets/images/panel-chat-examples-locust.png b/assets/images/panel-chat-examples-locust.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9e763857c43586219705b83e7b114b4f5a485e GIT binary patch literal 107173 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≪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
xe$W#D_iokubRIP; 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 R!TovI!p!DM^{=-c{4YimciI2| literal 0 HcmV?d00001 diff --git a/requirements_dev.txt b/requirements_dev.txt index 056938f..58a1786 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,4 +2,5 @@ isort black pytest -pytest-playwright \ No newline at end of file +pytest-playwright +locust \ No newline at end of file diff --git a/tests/locustfile.py b/tests/locustfile.py new file mode 100644 index 0000000..d69e00f --- /dev/null +++ b/tests/locustfile.py @@ -0,0 +1,21 @@ +"""Locust load test file""" +from pathlib import Path +from random import choice + +from conftest import APP_PATHS # pylint: disable=import-error +from locust import HttpUser, task + + +class RandomPageUser(HttpUser): + """This User gets a random page""" + + @task(weight=len(APP_PATHS)) + def get_random_page(self): + """Gets a random page""" + app_path = choice(APP_PATHS) + self.client.get(f"/{Path(app_path).name.replace('.py', '')}") + + @task + def get_index_page(self): + """Gets the index page""" + self.client.get("/") From 0224e1e395bdd893aa984cab60e1074875b86dab Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 03:49:29 +0000 Subject: [PATCH 02/12] fix install issue --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f4e5592..58be8b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,6 @@ commit_extra_args = ["-e"] path = "panel_chat_examples/__init__.py" [tool.hatch.envs.default] -python = "3.9" dependencies = [ "black", "mypy", From 409d2024b3a15872e29c795280595d6b775c5442 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 07:51:51 +0000 Subject: [PATCH 03/12] add missing isort --- docs/index.md | 7 +++---- pyproject.toml | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/index.md b/docs/index.md index 7912148..8199521 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,7 +6,7 @@ To run all of these examples locally: git clone https://github.com/holoviz-topics/panel-chat-examples cd panel-chat-examples pip install hatch -hatch run panel serve docs/examples/**/*.py --static-dirs thumbnails=docs/assets/thumbnails --autoreload +hatch run panel-serve ``` Note the default installation is not optimized for GPU usage. To enable GPU support for local @@ -157,7 +157,6 @@ Demonstrates how to delay the display of the placeholder. """ from asyncio import sleep -from random import choice import panel as pn @@ -448,7 +447,6 @@ Llama2. """ import panel as pn - from langchain.chains import LLMChain from langchain.llms import CTransformers from langchain.prompts import PromptTemplate @@ -574,7 +572,7 @@ def add_key_to_env(key): os.environ["OPENAI_API_KEY"] = key chat_interface.send( "Your OpenAI key has been set. Feel free to minimize the sidebar.", - **SYSTEM_KWARGS + **SYSTEM_KWARGS, ) chat_interface.disabled = False @@ -882,3 +880,4 @@ chat_interface.send( chat_interface.servable() ``` + diff --git a/pyproject.toml b/pyproject.toml index 697c830..576284e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ path = "panel_chat_examples/__init__.py" [tool.hatch.envs.default] dependencies = [ "black", + "isort", "locust", "mkdocs-material", "mkdocstrings[python]", @@ -53,8 +54,8 @@ lint-check = [ "ruff .", "mypy panel_chat_examples/", ] -docs-serve = "mkdocs serve" -docs-build = "mkdocs build" +docs-serve = "python scripts/generate_gallery.py;mkdocs serve" +docs-build = "python scripts/generate_gallery.py;mkdocs build" panel-serve = "panel serve docs/examples/**/*.py --static-dirs thumbnails=docs/assets/thumbnails --autoreload" loadtest = "locust -f tests/locustfile.py -H http://localhost:5006 --users 1 --spawn-rate 1" From aa97936053dbfc1dea8631c67747e83155a48e31 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 07:55:48 +0000 Subject: [PATCH 04/12] run black --- docs/examples/features/delayed_placeholder.py | 1 - docs/examples/langchain/llama_and_mistral.py | 1 - docs/examples/openai/authentication.py | 2 +- scripts/generate_gallery.py | 2 +- tests/conftest.py | 2 +- 5 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/examples/features/delayed_placeholder.py b/docs/examples/features/delayed_placeholder.py index 13e0f0e..8b46bc3 100644 --- a/docs/examples/features/delayed_placeholder.py +++ b/docs/examples/features/delayed_placeholder.py @@ -3,7 +3,6 @@ """ from asyncio import sleep -from random import choice import panel as pn diff --git a/docs/examples/langchain/llama_and_mistral.py b/docs/examples/langchain/llama_and_mistral.py index b29e928..0195959 100644 --- a/docs/examples/langchain/llama_and_mistral.py +++ b/docs/examples/langchain/llama_and_mistral.py @@ -4,7 +4,6 @@ """ import panel as pn - from langchain.chains import LLMChain from langchain.llms import CTransformers from langchain.prompts import PromptTemplate diff --git a/docs/examples/openai/authentication.py b/docs/examples/openai/authentication.py index 344790d..f83cde0 100644 --- a/docs/examples/openai/authentication.py +++ b/docs/examples/openai/authentication.py @@ -22,7 +22,7 @@ def add_key_to_env(key): os.environ["OPENAI_API_KEY"] = key chat_interface.send( "Your OpenAI key has been set. Feel free to minimize the sidebar.", - **SYSTEM_KWARGS + **SYSTEM_KWARGS, ) chat_interface.disabled = False diff --git a/scripts/generate_gallery.py b/scripts/generate_gallery.py index 4a02975..af82f76 100644 --- a/scripts/generate_gallery.py +++ b/scripts/generate_gallery.py @@ -1,7 +1,7 @@ """Generates a markdown file describing the examples apps""" -from textwrap import dedent, indent from pathlib import Path +from textwrap import dedent, indent DOCS_PATH = Path(__file__).parent.parent / "docs" EXAMPLES_PATH = DOCS_PATH / "examples" diff --git a/tests/conftest.py b/tests/conftest.py index 199820b..191702b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -37,7 +37,7 @@ def module_cleanup(): """ from bokeh.core.has_props import ( _default_resolver, - ) # pylint: disable=import-outside-toplevel + ) to_reset = list(panel_extension._imports.values()) From 14d0896544b97639bd6b981f90b1bba3b4abc989 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 08:04:13 +0000 Subject: [PATCH 05/12] solve lint issues --- docs/examples/basics/echo_stream.py | 6 ++++-- docs/examples/langchain/llama_and_mistral.py | 3 ++- scripts/generate_gallery.py | 19 +++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/docs/examples/basics/echo_stream.py b/docs/examples/basics/echo_stream.py index a509996..8c0e6fe 100644 --- a/docs/examples/basics/echo_stream.py +++ b/docs/examples/basics/echo_stream.py @@ -1,7 +1,9 @@ """ -Demonstrates how to use the `ChatInterface` and a `callback` function to stream back responses. +Demonstrates how to use the `ChatInterface` and a `callback` function to stream back +responses. -The chatbot Assistant echoes back the message entered by the User in a *streaming* fashion. +The chatbot Assistant echoes back the message entered by the User in a *streaming* +fashion. """ diff --git a/docs/examples/langchain/llama_and_mistral.py b/docs/examples/langchain/llama_and_mistral.py index 0195959..b45d8f4 100644 --- a/docs/examples/langchain/llama_and_mistral.py +++ b/docs/examples/langchain/llama_and_mistral.py @@ -22,7 +22,8 @@ } llm_chains = {} -TEMPLATE = """[INST] You are a friendly chat bot who's willing to help answer the user: +TEMPLATE = """[INST] You are a friendly chat bot who's willing to help answer the +user: {user_input} [/INST] """ diff --git a/scripts/generate_gallery.py b/scripts/generate_gallery.py index af82f76..d5d09c6 100644 --- a/scripts/generate_gallery.py +++ b/scripts/generate_gallery.py @@ -15,8 +15,8 @@ def run(): Generates the text description looping the inside the EXAMPLES_PATH recursively - For each folder a header "## Folder Name" is added to the text - - For each .py file of a header is added "### File Name" to the text as well as the content of the - module docstring. + - For each .py file of a header is added "### File Name" to the text as well as the + content of the module docstring. """ text = dedent( @@ -28,12 +28,13 @@ def run(): git clone https://github.com/holoviz-topics/panel-chat-examples cd panel-chat-examples pip install hatch - hatch run panel serve docs/examples/**/*.py --static-dirs thumbnails=docs/assets/thumbnails --autoreload + hatch run panel-serve ``` - Note the default installation is not optimized for GPU usage. To enable GPU support for local - models (i.e. not OpenAI), install `ctransformers` with the proper backend and modify the - scripts configs' accordingly, e.g. `n_gpu_layers=1` for a single GPU. + Note the default installation is not optimized for GPU usage. To enable GPU + support for local models (i.e. not OpenAI), install `ctransformers` with the + proper backend and modify the scripts configs' accordingly, e.g. + `n_gpu_layers=1` for a single GPU. """ ) for folder in sorted(EXAMPLES_PATH.glob("**/"), key=lambda folder: folder.name): @@ -63,12 +64,14 @@ def run(): thumbnail_str = ( "\n" f'[]({source_path})\n' + f'alt="{title}" style="max-height: 400px; max-width: 100%;">]' + f"({source_path})\n" ) docstring_lines.append(thumbnail_str) docstring_lines.append( f"
\n" - f"Source code for {source_path.name}\n" + f"Source code for {source_path.name}\n" f"```python\n" f"{indent(file.read_text(), '' * 4).rstrip()}\n" f"```\n" From 8e1634efe5db50bee660c111dc6d89853231587b Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 08:51:07 +0000 Subject: [PATCH 06/12] add playwright --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3037a6c..639bd69 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,9 @@ jobs: - name: Lint and typecheck run: | hatch run lint-check + - name: Install Playwright browser(s)s + run: | + playwright install chromium - name: Test run: | hatch run test-cov-xml From 39f8d532c168715e9d9d8f4417195c934f42a3cb Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 08:54:44 +0000 Subject: [PATCH 07/12] get build working --- .github/workflows/build.yml | 2 +- DEVELOPER_GUIDE.md | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 639bd69..3d59cdb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: hatch run lint-check - name: Install Playwright browser(s)s run: | - playwright install chromium + hatch run playwright install chromium - name: Test run: | hatch run test-cov-xml diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 3c4fd39..8ba6369 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -36,11 +36,17 @@ pip install hatch Please ensure [Playwright](https://playwright.dev/python/) browsers are installed ```bash -hatch run playwright install +hatch run playwright install chromium ``` The first time `hatch run ...` is run, it will install the required dependencies. +Please ensure `pre-commit` is installed by running + +```bash +hatch run pre-commit run --all +``` + ## Format, lint and type check the code Execute the following command to apply autoformatting, linting and check typing: From a7a4659fa67ab835d8f5fede2606fb8d46d0d069 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 09:33:33 +0000 Subject: [PATCH 08/12] make apps works --- DEVELOPER_GUIDE.md | 8 ++++++++ tests/conftest.py | 15 ++++++++++++++- tests/ui/test_all.py | 4 ++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 8ba6369..b6f97be 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -47,6 +47,14 @@ Please ensure `pre-commit` is installed by running hatch run pre-commit run --all ``` +You will also need to set the below environment variables + +```bash +export OPENAI_API_KEY=... +``` + +Please note that you will be incurring costs from OPENAI when you run the tests or serve the apps! + ## Format, lint and type check the code Execute the following command to apply autoformatting, linting and check typing: diff --git a/tests/conftest.py b/tests/conftest.py index 7ce730b..7bd81a6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -22,6 +22,17 @@ def get_default_port(): PORT = [get_default_port()] +REQUIRES_OPENAI_API_KEY = [ + "docs/examples/langchain/math_chain.py", + "docs/examples/langchain/chat_memory.py", +] + + +def _examples_to_skip(): + if "OPENAI_API_KEY" not in os.environ: + return [Path(path).absolute() for path in REQUIRES_OPENAI_API_KEY] + return [] + @pytest.fixture def port() -> int: @@ -66,13 +77,15 @@ def cache_cleanup(): def _get_paths(): + skip_paths = _examples_to_skip() paths = [] for folder in sorted(EXAMPLES_PATH.glob("**/"), key=lambda folder: folder.name): if folder.name == "examples": continue for file in folder.glob("*.py"): - paths.append(str(file)) + if file not in skip_paths: + paths.append(str(file)) return paths diff --git a/tests/ui/test_all.py b/tests/ui/test_all.py index 7c5a103..8c7696c 100644 --- a/tests/ui/test_all.py +++ b/tests/ui/test_all.py @@ -56,10 +56,14 @@ def _take_screenshot(app_path, page): @pytest.fixture def server(app_path, port): """Returns a panel server runnning the app""" + bokeh_allow_ws_origin = os.environ.get("BOKEH_ALLOW_WS_ORIGIN") + os.environ["BOKEH_ALLOW_WS_ORIGIN"] = "localhost" server = serve(app_path, port=port, threaded=True, show=False) time.sleep(0.2) yield server server.stop() + if bokeh_allow_ws_origin: + os.environ["BOKEH_ALLOW_WS_ORIGIN"] = bokeh_allow_ws_origin def test_app(server, app_path, port, page): From 8046d69843a5607ed51ceb1dbe229bfe89cfe4e6 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 09:38:13 +0000 Subject: [PATCH 09/12] add note about api key --- README.md | 3 ++- scripts/generate_gallery.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 166448d..302550d 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ To install and serve all examples: git clone https://github.com/holoviz-topics/panel-chat-examples cd panel-chat-examples pip install hatch +# Set the OPENAI_API_KEY environment variable hatch run panel-serve ``` @@ -40,7 +41,7 @@ CT_METAL=1 pip install ctransformers --no-binary ctransformers # for m1 ## Contributing -Check out the [DEVELOPER GUIDE](DEVELOPER_GUIDE.md) for to get started. +We would ❤️ to collaborate with you. Check out the [DEVELOPER GUIDE](DEVELOPER_GUIDE.md) for to get started. ## License diff --git a/scripts/generate_gallery.py b/scripts/generate_gallery.py index d5d09c6..f5b07c0 100644 --- a/scripts/generate_gallery.py +++ b/scripts/generate_gallery.py @@ -28,6 +28,7 @@ def run(): git clone https://github.com/holoviz-topics/panel-chat-examples cd panel-chat-examples pip install hatch + # Set the OPENAI_API_KEY environment variable hatch run panel-serve ``` From 03dfeb1f868bc735bd331d37c3eb597f3b9ba9c3 Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 09:43:43 +0000 Subject: [PATCH 10/12] remove extra s --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3d59cdb..fb989aa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: - name: Lint and typecheck run: | hatch run lint-check - - name: Install Playwright browser(s)s + - name: Install Playwright browser(s) run: | hatch run playwright install chromium - name: Test From aea6727ca5951e98b043beb7633da7acc537f81b Mon Sep 17 00:00:00 2001 From: MarcSkovMadsen Date: Sat, 7 Oct 2023 10:02:21 +0000 Subject: [PATCH 11/12] update screenshot command --- DEVELOPER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index b6f97be..c8b408c 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -82,7 +82,7 @@ hatch run pytest -m ui --headed You can take screenshots via ```bash -SCREENSHOT=true hatch run pytest -m ui --headed +SCREENSHOT=true hatch run pytest -m ui ``` The screenshots can be found in [tests/ui/screenshots](tests/ui/screenshots) From 977cb974c47b133d1e2e19be81d78c70a6e648f0 Mon Sep 17 00:00:00 2001 From: Andrew <15331990+ahuang11@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:46:10 -0700 Subject: [PATCH 12/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 302550d..61d936a 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ git clone https://github.com/holoviz-topics/panel-chat-examples cd panel-chat-examples pip install hatch # Set the OPENAI_API_KEY environment variable -hatch run panel-serve +hatch run panel-serve # or equivalently panel serve docs/examples/**/*.py --static-dirs thumbnails=docs/assets/thumbnails --autoreload ``` Note the default installation is not optimized for GPU usage. To enable GPU support for local