Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
262 changes: 131 additions & 131 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,143 +15,143 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

- name: Install dependencies
run: python -m pip install -U "jupyterlab>=4.0.0,<5"

- name: Lint the extension
run: |
set -eux
jlpm
jlpm run lint:check

- name: Test the extension
run: |
set -eux
jlpm run test

- name: Build the extension
run: |
set -eux
python -m pip install .[test]

pytest -vv -r ap --cov jupyter_ai_chat_commands
jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyter_ai_chat_commands.*OK"

jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyter-ai/chat-commands.*OK"
python -m jupyterlab.browser_check

- name: Package the extension
run: |
set -eux

pip install build
python -m build
pip uninstall -y "jupyter_ai_chat_commands" jupyterlab

- name: Upload extension packages
uses: actions/upload-artifact@v4
with:
name: extension-artifacts
path: dist/jupyter_ai_chat_commands*
if-no-files-found: error
- name: Checkout
uses: actions/checkout@v4

- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

- name: Install dependencies
run: python -m pip install -U "jupyterlab>=4.0.0,<5"

- name: Lint the extension
run: |
set -eux
jlpm
jlpm run lint:check

- name: Test the extension
run: |
set -eux
jlpm run test

- name: Build the extension
run: |
set -eux
python -m pip install .[test]

pytest -vv -r ap --cov jupyter_ai_chat_commands
jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyter_ai_chat_commands.*OK"

jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyter-ai/chat-commands.*OK"
python -m jupyterlab.browser_check

- name: Package the extension
run: |
set -eux

pip install build
python -m build
pip uninstall -y "jupyter_ai_chat_commands" jupyterlab

- name: Upload extension packages
uses: actions/upload-artifact@v4
with:
name: extension-artifacts
path: dist/jupyter_ai_chat_commands*
if-no-files-found: error

test_isolated:
needs: build
runs-on: ubuntu-latest

steps:
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.9'
architecture: 'x64'
- uses: actions/download-artifact@v4
with:
name: extension-artifacts
- name: Install and Test
run: |
set -eux
# Remove NodeJS, twice to take care of system and locally installed node versions.
sudo rm -rf $(which node)
sudo rm -rf $(which node)

pip install "jupyterlab>=4.0.0,<5" jupyter_ai_chat_commands*.whl


jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyter_ai_chat_commands.*OK"

jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyter-ai/chat-commands.*OK"
python -m jupyterlab.browser_check --no-browser-test

integration-tests:
name: Integration tests
needs: build
runs-on: ubuntu-latest

env:
PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

- name: Download extension package
uses: actions/download-artifact@v4
with:
name: extension-artifacts

- name: Install the extension
run: |
set -eux
python -m pip install "jupyterlab>=4.0.0,<5" jupyter_ai_chat_commands*.whl

- name: Install dependencies
working-directory: ui-tests
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: 0
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
run: jlpm install

- name: Set up browser cache
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/pw-browsers
key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }}

- name: Install browser
run: |
set -eux
jlpm playwright install-deps
jlpm playwright install chromium
working-directory: ui-tests

- name: Execute integration tests
working-directory: ui-tests
run: |
jlpm playwright test

- name: Upload Playwright Test report
if: always()
uses: actions/upload-artifact@v4
with:
name: jupyter_ai_chat_commands-playwright-tests
path: |
ui-tests/test-results
ui-tests/playwright-report
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
architecture: 'x64'
- uses: actions/download-artifact@v4
with:
name: extension-artifacts
- name: Install and Test
run: |
set -eux
# Remove NodeJS, twice to take care of system and locally installed node versions.
sudo rm -rf $(which node)
sudo rm -rf $(which node)

pip install "jupyterlab>=4.0.0,<5" jupyter_ai_chat_commands*.whl


jupyter server extension list
jupyter server extension list 2>&1 | grep -ie "jupyter_ai_chat_commands.*OK"

jupyter labextension list
jupyter labextension list 2>&1 | grep -ie "@jupyter-ai/chat-commands.*OK"
python -m jupyterlab.browser_check --no-browser-test

# integration-tests:
# name: Integration tests
# needs: build
# runs-on: ubuntu-latest

# env:
# PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers

# steps:
# - name: Checkout
# uses: actions/checkout@v4

# - name: Base Setup
# uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

# - name: Download extension package
# uses: actions/download-artifact@v4
# with:
# name: extension-artifacts

# - name: Install the extension
# run: |
# set -eux
# python -m pip install "jupyterlab>=4.0.0,<5" jupyter_ai_chat_commands*.whl

# - name: Install dependencies
# working-directory: ui-tests
# env:
# YARN_ENABLE_IMMUTABLE_INSTALLS: 0
# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
# run: jlpm install

# - name: Set up browser cache
# uses: actions/cache@v4
# with:
# path: |
# ${{ github.workspace }}/pw-browsers
# key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }}

# - name: Install browser
# run: |
# set -eux
# jlpm playwright install-deps
# jlpm playwright install chromium
# working-directory: ui-tests

# - name: Execute integration tests
# working-directory: ui-tests
# run: |
# jlpm playwright test

# - name: Upload Playwright Test report
# if: always()
# uses: actions/upload-artifact@v4
# with:
# name: jupyter_ai_chat_commands-playwright-tests
# path: |
# ui-tests/test-results
# ui-tests/playwright-report

check_links:
name: Check Links
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,6 @@ dmypy.json

# Yarn cache
.yarn/

*.chat
.jupyter_ystore.db
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ This extension is composed of a Python package named `jupyter_ai_chat_commands`
for the server extension and a NPM package named `@jupyter-ai/chat-commands`
for the frontend extension.

This package provides 2 commands:

- `@file:<path>`: Add a file as an attachment to a message.

- `/refresh-personas`: Reload local personas defined in `.jupyter/personas`.

## QUICK START

Everything that follows after this section was from the extension template. We
Expand Down
17 changes: 3 additions & 14 deletions jupyter_ai_chat_commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import warnings
warnings.warn("Importing 'jupyter_ai_chat_commands' outside a proper installation.")
__version__ = "dev"
from .handlers import setup_handlers
from .extension_app import JaiChatCommandsExtension


def _jupyter_labextension_paths():
Expand All @@ -19,18 +19,7 @@ def _jupyter_labextension_paths():

def _jupyter_server_extension_points():
return [{
"module": "jupyter_ai_chat_commands"
"module": "jupyter_ai_chat_commands",
"app": JaiChatCommandsExtension
}]


def _load_jupyter_server_extension(server_app):
"""Registers the API handler to receive HTTP requests from the frontend extension.

Parameters
----------
server_app: jupyterlab.labapp.LabApp
JupyterLab application instance
"""
setup_handlers(server_app.web_app)
name = "jupyter_ai_chat_commands"
server_app.log.info(f"Registered {name} server extension")
Loading