<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Jason Weill</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/author-jason-weill.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2024-11-12T19:22:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>November 2024 Jupyter Community Call</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/november-2024-jupyter-community-call/" rel="alternate"/><published>2024-10-21T20:12:00+00:00</published><updated>2024-11-12T19:22:00+00:00</updated><author><name>Jason Weill</name></author><id>tag:jasongrout.github.io,2024-10-21:/medium-archive/pelican/posts/2024/november-2024-jupyter-community-call/</id><summary type="html">&lt;p&gt;Hey, Jupyter community! We want to see the cool things you’re doing with Jupyter, so the Diversity, Equity, and Inclusion (DEI) standing…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Hey, Jupyter community! We want to see the cool things you’re doing with Jupyter, so the Diversity, Equity, and Inclusion (DEI) standing committee is holding an open call with the community for people to share and chat about their work. Think of it as a “virtual JupyterCon”: It’s a place to announce and share fun things happening in the Jupyter community.&lt;/p&gt;
&lt;p&gt;We encourage brief (5 minutes or less) presentations with a demo or screen share, as needed. If you have a GitHub repo or demo web site, please share it!&lt;/p&gt;
&lt;h2 id="event-details"&gt;Event details&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;November 13, 2024, at 9:00 AM PST (17:00 UTC; &lt;a href="https://arewemeetingyet.com/Los%20Angeles/2024-11-13/9:00/Jupyter%20Community%20Call"&gt;your timezone&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Agenda (add yourself) on &lt;a href="https://hackmd.io/Y71c6HqpSliEBb3L_McGfg?both"&gt;HackMD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Meet on &lt;a href="https://zoom.us/my/jovyan?pwd=c0JZTHlNdS9Sek9vdzR3aTJ4SzFTQT09"&gt;Zoom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyone can attend, for free! Anyone can present; add yourself to the agenda above. Anyone can sit in on the call. Presenters will lead a demo and spend a few minutes answering questions. Topics will be targeted at a broad Jupyter audience, not just programmers.&lt;/p&gt;
&lt;p&gt;Watch previous calls in our &lt;a href="https://www.youtube.com/playlist?list=PLUrHeD2K9Cmkoamm4NjLmvXC4Y6E1o8SP"&gt;YouTube playlist&lt;/a&gt;.&lt;/p&gt;
</content><category term="community"/></entry><entry><title>Generative AI in Jupyter</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/" rel="alternate"/><published>2023-08-02T16:15:00+00:00</published><updated>2023-08-16T00:33:00+00:00</updated><author><name>Jason Weill</name></author><id>tag:jasongrout.github.io,2023-08-02:/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/</id><summary type="html">&lt;p&gt;Jupyter AI, a new open source project, brings generative artificial intelligence to notebooks with magic commands and a chat interface.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyter-ai"&gt;Jupyter AI&lt;/a&gt; brings generative artificial intelligence to Jupyter notebooks, giving users the power to explain and generate code, fix errors, summarize content, ask questions about their local files, and generate entire notebooks from a natural language prompt. Using its powerful magic commands and chat interface, Jupyter AI connects Jupyter with large language models (LLM) from providers such as AI21, Anthropic, AWS, Cohere, and OpenAI. We use LangChain to support all popular LLMs and providers, giving you access to new models as they are released. LangChain will let Jupyter AI use local models as well. Jupyter AI version 1.0, for JupyterLab 3, and Jupyter AI 2.0, for JupyterLab 4, are now available as free and open source software.&lt;/p&gt;
&lt;p&gt;Jupyter AI is designed with responsible AI and data privacy in mind. You can pick which LLM and embedding model best suit your needs. The underlying prompts, chains, and other software are open source, so you can see exactly how your data is being used. Jupyter AI saves metadata about model-generated content in each AI-generated code cell, so you and your collaborators can track where AI-generated code enters your workflow. Finally, Jupyter AI only contacts an LLM when you ask it to, directly; it does not read your data or transmit it to models without your explicit consent.&lt;/p&gt;
&lt;p&gt;Jupyter AI is an official subproject of Project Jupyter and is available now as free, open source software. We designed it based on the same principles that underlie all of Project Jupyter: we made it simple, easy to use, modular, and extensible, and we prioritized ethical considerations and social responsibility. We’d love to hear from you about how we can improve it!&lt;/p&gt;
&lt;h2 id="getting-started-with-jupyter-ai"&gt;Getting started with Jupyter AI&lt;/h2&gt;
&lt;p&gt;Start using Jupyter AI by installing the appropriate version with &lt;code&gt;pip&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;jupyter-ai&amp;gt;=1.0,&amp;lt;2.0&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# If you use JupyterLab 3&lt;/span&gt;
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;jupyter-ai&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;# If you use JupyterLab 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then, launch JupyterLab. Jupyter AI provides two different interfaces to interact with LLMs. In JupyterLab, you can converse with a chat UI to assist you with your code. Also, in any supported notebook or IPython environment, including JupyterLab, Notebook, IPython, Colab, and Visual Studio Code, you can invoke LLMs using the &lt;code&gt;%%ai&lt;/code&gt; magic command. Jupyter AI can turn any Jupyter Notebook session into a generative AI playground with support for text and image models.&lt;/p&gt;
&lt;p&gt;Project Jupyter is vendor-neutral, so Jupyter AI supports LLMs from AI21, Anthropic, AWS, Cohere, HuggingFace Hub, and OpenAI. More model providers will be added in the future. Please review a provider’s privacy policy and pricing model before you use it. We’re also working on support for locally-deployed models, for maximum privacy. Once you have installed Jupyter AI, before you can use magic commands, you will need to authenticate to each model provider that you wish to use. For most providers, this involves setting an environment variable. The user documentation has detailed instructions for &lt;a href="https://jupyter-ai.readthedocs.io/en/latest/users/index.html#model-providers"&gt;configuring model providers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The chat interface has its own configuration panel for choosing a language model and an embedding model, and for authenticating to each model’s provider. A language model responds to users’ messages in the chat panel. When you ask the chat interface to learn about local files, it uses an embedding model to parse these files and to assist when you ask questions about them.&lt;/p&gt;
&lt;p&gt;You can find full details about how to configure and use Jupyter AI in the &lt;a href="https://jupyter-ai.readthedocs.io/en/latest/users/index.html"&gt;user documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-chat-interface-your-ai-assistant"&gt;The chat interface, your AI assistant&lt;/h2&gt;
&lt;p&gt;The chat interface puts you in conversation with &lt;strong&gt;Jupyternaut&lt;/strong&gt;, a conversational agent using a language model of your choice.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/001-0_LKAfjrw26xlrAJ-s.webp" alt="A screenshot of JupyterLab showing Jupyter AI in the left panel, with a help message shown to the user." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Jupyternaut communicates primarily through text, and it can also interact with files in JupyterLab. It can answer questions as a general-purpose AI assistant, include selections from your notebooks with your questions, insert AI-generated output into your notebooks, learn from and ask questions about your local files, and generate notebooks from a prompt. Jupyternaut can only see the information you send it by sending chat commands; it only reads your data when you specifically ask it to.&lt;/p&gt;
&lt;p&gt;To get started, you can ask Jupyternaut a question:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/002-0_SBrRAW0NdUWIcj3B.webp" alt="Partial screenshot of Jupyter AI showing a conversation between jweill and Jupyternaut, in which jweill has asked “What’s the difference between a tuple and a list in Python?” and Jupyternaut has provided a detailed response with a code example." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;You can also highlight part of your notebook and include it with your prompt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/003-0_ppPDPJyDZ5vjprCP.webp" alt="Screenshot of JupyterLab with some source code highlighted. The user has typed the question “What does this code do?” and has checked a checkbox to include the selection with their question." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Using prompts that include the selected code, you can ask Jupyternaut to explain your code in plain English (or in any other language it can speak), make modifications to it, and identify errors in it. If you want, Jupyternaut can even replace your selection with its response. Please review AI-generated code before you run it, as you would review code written by another person.&lt;/p&gt;
&lt;p&gt;For example, you can ask Jupyternaut to rewrite code by adding comments to it:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/004-0_lWJIaPn8REBWHPHV.webp" alt="Partial screenshot of JupyterLab with some source code selected. The user has typed the prompt “Rewrite this code with comments added to it”, and has checked the boxes for “include selection” and “replace selection”" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Jupyternaut sends the code to your chosen language model, then replaces the selection with the language model’s response.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/005-0_1AQQ9XR-JQ2oqZ10.jpg" alt="Partial screenshot of JupyterLab with source code that has been rewritten with comments" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="generating-a-notebook-from-a-text-prompt"&gt;Generating a notebook from a text prompt&lt;/h2&gt;
&lt;p&gt;Jupyter AI’s chat interface can generate an entire notebook from a text prompt. To do this, run the /generate command and provide a text description. Jupyternaut will use its AI language model to name the workbook and fill it with markdown and code cells. This may take a few minutes. While Jupyternaut is working, you can continue to use the chat UI, and Jupyternaut will continue generating your notebook.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/006-0_Ln2poeiOXHq2mlkw.webp" alt="Screenshot of a user executing a /generate command in Jupyter AI to generate a demonstration of how to use Matplotlib. Jupyternaut provides a response that it is starting to generate a notebook, then another response that it has generated a notebook" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Once Jupyternaut has finished generating your notebook, it will send you a message with its filename, so that you can open it. Please review any AI-driven code before you run it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/007-0_jdpMEQCErUeEtzO_.webp" alt="Screenshot of JupyterLab showing “Matplotlib: A Comprehensive Guide”, a Jupyter notebook generated by Jupyter AI" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="learning-from-and-asking-about-local-files"&gt;Learning from and asking about local files&lt;/h2&gt;
&lt;p&gt;You can use the &lt;code&gt;/learn&lt;/code&gt; command to teach Jupyternaut about local files, so that you can use the &lt;code&gt;/ask&lt;/code&gt; command to ask questions about them. For example, using the &lt;code&gt;/learn&lt;/code&gt; command, you can teach Jupyternaut about Jupyter AI’s documentation:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/008-0_PxPcfM_mb_ZfsfRi.webp" alt="Screenshot of Jupyter AI having run a /learn command to learn the contents of the “docs” directory" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;When you learn local files, Jupyternaut uses an embedding model to convert data, then stores the output in a local vector database. Please review the privacy policy for each model, and be aware of any restrictions about sharing your local data with third-party model providers. Once the learning process is complete, you can ask a question with the &lt;code&gt;/ask&lt;/code&gt; command. Using retrieval-augmented generation (RAG), Jupyternaut will append relevant info to your question from its vector database, then it will use the AI language model you selected to answer your question.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/009-0_fXKXFT2dq2P4yK4B.webp" alt="Screenshot of Jupyter AI answering an “/ask” command based on the data it has previously learned from local files" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="notebooks-as-generative-ai-playgrounds-with-magic-commands"&gt;Notebooks as generative AI playgrounds with magic commands&lt;/h2&gt;
&lt;p&gt;Jupyter AI also provides magic commands that you can run in notebook cells and in the IPython command-line interface. To get started, run &lt;code&gt;%load_ext jupyter_ai_magics&lt;/code&gt;, which will load the magics extension. You can then use Jupyter AI with the &lt;code&gt;%%ai&lt;/code&gt; magic command. You can run &lt;code&gt;%ai help&lt;/code&gt; to learn about all the options and commands you can run using the &lt;code&gt;%ai&lt;/code&gt; line magic and &lt;code&gt;%%ai&lt;/code&gt; cell magic commands.&lt;/p&gt;
&lt;p&gt;Each &lt;code&gt;%%ai&lt;/code&gt; command requires a model, typically specified as &lt;code&gt;provider‑id:model‑id&lt;/code&gt;. To use a particular provider, you’ll need to set its API key using an appropriate environment variable or Python module. See the &lt;a href="https://jupyter-ai.readthedocs.io/en/latest/users/index.html#model-providers"&gt;model providers section of the user documentation&lt;/a&gt; for specific information. Once you’ve provided the key to your model provider, you can run a magic command by specifying the model on the first line and specifying your prompt on subsequent lines.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/010-0_J1CWCz_eo5_vJWu0.webp" alt="Partial screenshot of JupyterLab running an %%ai magic command using the Anthropic Claude-v1.2 model" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;You can use the &lt;code&gt;-f&lt;/code&gt; or &lt;code&gt;--format&lt;/code&gt; parameter to customize the format of the output, including HTML, math, source code, and images.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/011-0_T8EepY5jfigS67Yn.webp" alt="Screenshot of JupyterLab running three %%ai magic commands to output content in HTML, math, and image formats" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;You can interpolate a variable name or expression in a prompt by enclosing it in braces (curly brackets).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/012-0_jPgHUMJegDgaQUNt.webp" alt="Screenshot showing JupyterLab running an %%ai magic command with variable interpolation" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Interpolation also works with the special &lt;code&gt;In&lt;/code&gt; and &lt;code&gt;Out&lt;/code&gt; variables, which contain the inputs and outputs of code cells. Note that a cell output can contain both text and markdown values.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/013-0_su7ZC4EpVmK2FRxg.webp" alt="Screenshot of JupyterLab running two %%ai magic commands: the first one generates output, and the second one uses interpolation to incorporate the first command’s output into its prompt" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Jupyter AI adds a special &lt;code&gt;Err&lt;/code&gt; variable, which stores the errors that occur while executing code. By interpolating this variable into a prompt, you can use an AI language model to explain and correct an error in your code.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/014-0_4fix_RU095C7PqZB.webp" alt="Screenshot of JupyterLab having run a cell with an error in it, then having run a cell that interpolates the error into a prompt" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="about-the-developers"&gt;About the developers&lt;/h2&gt;
&lt;p&gt;Jupyter AI is an officially supported Jupyter subproject. The following Jupyter contributors built Jupyter AI.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Brian Granger is a Senior Principal Technologist at AWS. Brian is a cofounder of Project Jupyter, a member of the Jupyter Executive Council, and a board member of the PyTorch Foundation." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/015-1_WC29kYZhf40VeGfM7muopg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;a href="https://github.com/ellisonbg"&gt;Brian Granger&lt;/a&gt; is a Senior Principal Technologist at AWS. Brian is a cofounder of Project Jupyter, a member of the Jupyter Executive Council, and a board member of the PyTorch Foundation.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Andrii Ieroshenko is a Software Development Engineer at AWS. Andrii is a Project Jupyter contributor and JupyterLab Council member." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/016-0_zMXhUHT0SrteMJDo.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;a href="https://github.com/andrii-i/"&gt;Andrii Ieroshenko&lt;/a&gt; is a Software Development Engineer at AWS. Andrii is a Project Jupyter contributor and JupyterLab Council member.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Piyush Jain is a Software Development Engineer at AWS working on open source contributions to Project Jupyter. He is also a member of the Jupyter Server team, actively participating in maintenance and development of the Jupyter Server project." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/017-0_wDtguQqxfEHtzgzR.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;a href="https://github.com/3coins"&gt;Piyush Jain&lt;/a&gt; is a Software Development Engineer at AWS working on open source contributions to Project Jupyter. He is also a member of the Jupyter Server team, actively participating in maintenance and development of the Jupyter Server project.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="David Qiu is a Software Development Engineer at AWS working on Project Jupyter. Previously, David was researching physical chemistry at the University of Illinois at Urbana-Champaign." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/018-0_hfX4LQ_08sjeDoKE.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;a href="https://github.com/dlqqq/"&gt;David Qiu&lt;/a&gt; is a Software Development Engineer at AWS working on Project Jupyter. Previously, David was researching physical chemistry at the University of Illinois at Urbana-Champaign.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Jason Weill is a Senior Front-End Engineer at AWS; a contributor to JupyterLab, Jupyter Governance, and Jupyter Scheduler; and a member of the JupyterLab Council, the Jupyter Security Working Group, and the Jupyter Diversity, Equity, and Inclusion Standing Committee." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/generative-ai-in-jupyter/images/019-0_65ivwhUugkG0UUR8.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;a href="https://github.com/JasonWeill"&gt;Jason Weill&lt;/a&gt; is a Senior Front-End Engineer at AWS; a contributor to JupyterLab, Jupyter Governance, and Jupyter Scheduler; and a member of the JupyterLab Council, the Jupyter Security Working Group, and the Jupyter Diversity, Equity, and Inclusion Standing Committee.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="how-can-you-help"&gt;How can you help?&lt;/h2&gt;
&lt;p&gt;We’re just getting started with generative AI in Jupyter. Please join us! We have &lt;a href="https://github.com/jupyterlab/jupyter-ai/issues"&gt;a list of issues&lt;/a&gt; that could use your help, such as &lt;a href="https://github.com/jupyterlab/jupyter-ai/issues/190"&gt;adding support for locally hosted LLMs&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Install and use the&lt;/strong&gt; &lt;a href="https://github.com/jupyterlab/jupyter-ai"&gt;&lt;strong&gt;Jupyter AI&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;extension.&lt;/strong&gt; If you find any bugs or have suggestions, please create issues on GitHub.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Join the discussion&lt;/strong&gt; about generative AI in Jupyter in the “Generative AI in Jupyter” topic on Discourse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contribute:&lt;/strong&gt; Your bug reports, feature requests, and pull requests will help improve this project for everyone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: An earlier version of this story said that users can choose which vector database to use with Jupyter AI. As of Jupyter AI 2.1.0, only FAISS is available; users cannot choose another vector database. Sorry for the error.&lt;/em&gt;&lt;/p&gt;
</content><category term="AI"/></entry><entry><title>JupyterLab 4.0 is Here</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyterlab-4-0-is-here/" rel="alternate"/><published>2023-06-05T20:04:00+00:00</published><updated>2023-06-05T21:25:00+00:00</updated><author><name>Jason Weill</name></author><id>tag:jasongrout.github.io,2023-06-05:/medium-archive/pelican/posts/2023/jupyterlab-4-0-is-here/</id><summary type="html">&lt;p&gt;The Jupyter contributor community is proud to announce JupyterLab 4.0, the next major release of our full-featured development environment…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;The Jupyter contributor community is proud to announce JupyterLab 4.0, the next major release of our full-featured development environment. The package is now available on PyPI and conda-forge. You can upgrade by running &lt;code&gt;pip install --upgrade jupyterlab&lt;/code&gt; or &lt;code&gt;conda install -c conda-forge jupyterlab&lt;/code&gt;. We have updated our &lt;a href="https://jupyterlab.readthedocs.io/en/latest/index.html"&gt;JupyterLab Documentation&lt;/a&gt; for this new version.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyterlab-4-0-is-here/images/001-1_Y3aNGoRED2q0pWjlHmr9wg.webp" alt="A screen shot of JupyterLab 4, showing many of its new and improved features." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Here are some of the major new features in JupyterLab 4.0, excerpted from our &lt;a href="https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html"&gt;changelog&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JupyterLab is now faster&lt;/strong&gt;, thanks to improvements such as CSS rules optimization, CodeMirror 6, MathJax 3, and notebook windowing. By rendering only the parts of a notebook that fit in the web browser viewport, JupyterLab 4 is much more efficient than JupyterLab 3 was when working with large notebooks.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyterlab-4-0-is-here/images/002-1_382cHBlUd2-kgWzpci8OOw.mp4" alt="A side-by-side animated comparison of performance between JupyterLab 3 and 4." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;There are additional performance improvements available via opt-in settings. You can help test them out by enabling them in your settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster tab-switching on Chromium browsers:&lt;br&gt;
“Settings” → “JupyterLab Shell” → switch “Hidden mode” to “contentVisibility”&lt;/li&gt;
&lt;li&gt;Better performance with long notebooks:&lt;br&gt;
“Settings” → “Notebook” → switch “Windowing mode” to “full”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;An upgraded text editor.&lt;/strong&gt; CodeMirror, the text editor used for cells and file editors, has been updated to &lt;a href="https://codemirror.net/"&gt;CodeMirror 6&lt;/a&gt;. This brings important accessibility and performance improvements as well as better customization capabilities. We have also improved the editor settings to be more powerful and more flexible.&lt;/p&gt;
&lt;p&gt;We have moved &lt;strong&gt;real-time collaboration&lt;/strong&gt; (RTC) into a separate package, &lt;a href="https://github.com/jupyterlab/jupyter_collaboration"&gt;jupyter_collaboration&lt;/a&gt;, version 1.0.0 of which is &lt;a href="https://github.com/jupyterlab/jupyter_collaboration/releases/tag/v1.0.0"&gt;now available&lt;/a&gt;. Highlights include support for displaying multiple cursors and selections, and support for registration of new shared model types. If you’d like to use RTC in JupyterLab 4, please install the jupyter_collaboration package.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyterlab-4-0-is-here/images/003-1_DL6GE3nEYT9SGn7oDGnydQ.mp4" alt="A side-by-side animated view of two users collaborating in JupyterLab 4 using the jupyter_collaboration package for real-time collaboration (RTC)" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A new extension manager.&lt;/strong&gt; In JupyterLab 4, the Extension Manager includes both prebuilt Python extensions and extensions from &lt;a href="https://pypi.org/search/?c=Framework+%3A%3A+Jupyter+%3A%3A+JupyterLab"&gt;pypi.org&lt;/a&gt;. Installing from PyPI removes the need to build when installing an extension using the Extension Manager. Developers can provide an alternative package repository to display their own set of extensions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Improved document search.&lt;/strong&gt; The Search and Replace functionality has been improved with new features when searching in a notebook, including highlighting matches in rendered markdown cells, searching in the current selection, multi-line search, replacement using regular expression capture-group references, and replacement while preserving case.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UI improvements,&lt;/strong&gt; including a reworked running kernels section, an “Add a new cell” button at the bottom of a notebook, a dialog to display keyboard shortcuts as in the Classic Notebook (use Ctrl + Shift + H), and displaying the first line of collapsed cell inputs and outputs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accessibility improvements,&lt;/strong&gt; including improved focus and keyboard navigation in the file browser, more ARIA roles and labels for UI elements, and the main menu collapsing to a hamburger menu if there is not enough space to display all items.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development tool updates&lt;/strong&gt; to TypeScript v5, Yarn v3, React v18, and Lumino v2. We recommend using Node.js v18 or newer, to ensure that you’re using a version that will continue to receive updates through at least the end of 2023.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bug fixes.&lt;/strong&gt; More than 100 bugs have been addressed and resolved, enhancing JupyterLab’s stability and performance. You can find a full list of bug fixes &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.0.0rc0"&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition, a few features in JupyterLab 4 have also been backported to JupyterLab 3.6, but if you’re upgrading from 3.5 or earlier, they will also be new to you:&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;dual-mode settings editor&lt;/strong&gt; now offers a JSON editor and a new, user-friendly interactive mode, built with React JSON Schema. This intuitive interface makes customization accessible to users of all skill levels.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;cell toolbar&lt;/strong&gt;, a graphical interface for quick cell manipulation (copy, move, insert, delete), provides an alternative to hotkeys or dropdown menu editing. The cell toolbar appears in the current cell as long as there is room for it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notifications&lt;/strong&gt; come from extensions and from JupyterLab itself, for real-time announcements, alerts, and updates. This enhances JupyterLab’s responsiveness and provides a way to stay informed about ongoing processes. Announcements from the JupyterLab team, including new version notifications, can be disabled; see the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/announcements.html"&gt;documentation&lt;/a&gt; for instructions.&lt;/p&gt;
&lt;p&gt;Thank you to all the users, contributors, extension developers, and community members who helped make this major new release possible. We encourage everyone to try this new version out. If you notice anything unexpected, please &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/new/choose"&gt;file an issue on GitHub&lt;/a&gt; or ask us about it on &lt;a href="https://discourse.jupyter.org/"&gt;Discourse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Author’s note: This article is published on behalf of Project Jupyter. I appreciate the contributions of the JupyterLab developers who contributed to it.&lt;/em&gt;&lt;/p&gt;
</content><category term="JupyterLab"/><category term="releases"/></entry><entry><title>Announcing a New Jupyter Governance Model and Our First Executive Council</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-a-new-jupyter-governance-model-and-our-first/" rel="alternate"/><published>2023-01-13T21:08:00+00:00</published><updated>2023-01-13T21:08:00+00:00</updated><author><name>Jason Weill</name></author><id>tag:jasongrout.github.io,2023-01-13:/medium-archive/pelican/posts/2023/announcing-a-new-jupyter-governance-model-and-our-first/</id><summary type="html">&lt;p&gt;Project Jupyter is proud to announce its new governance model, including an Executive Council and Software Steering Council.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;After a lengthy planning and preparation process, Project Jupyter is proud to announce its new &lt;a href="https://jupyter.org/governance/overview.html"&gt;governance model&lt;/a&gt;, including an Executive Council (EC), Software Steering Council (SSC), Distinguished Contributors, Standing Committees, Working Groups, and Subprojects. We have also elected our first Executive Council, a group of contributors who are now leading Jupyter in 2023.&lt;/p&gt;
&lt;p&gt;This governance transition was motivated by lessons we’ve learned as the project grew dramatically in the last decade. Our previous model, used since the project’s early days as IPython and influenced by the BDFL (Benevolent Dictator for Life) model of Python itself, had proven insufficient to meet our current needs. Our former Steering Council consisted of members who had made significant contributions to Jupyter and IPython. We decided that it would be better for the project if we separated the roles of “major contributor” and “decision maker.”&lt;/p&gt;
&lt;p&gt;First, we developed the &lt;a href="https://jupyter.org/about#distinguished-contributors"&gt;Jupyter Distinguished Contributors&lt;/a&gt; program to recognize the contributions of our community members. Distinguished Contributors do not have active responsibilities or decision-making authority. Next, we designed a model that would allow a project as broad as Jupyter, both in terms of technical architecture and use cases, to grow in a healthy way. We aimed to create structures to help us make technical decisions effectively, to grow the human and social aspects of the project and community in a sustainable manner, and to manage the diverse, multi-stakeholder nature of Jupyter with fairness to all. Jupyter’s stakeholders range from individual volunteers to some of the largest tech firms in the world, from academics to government and industrial users. Our intention is that with our new governance model, all of our stakeholders can create ideas, tools, spaces and communities around interactive computing.&lt;/p&gt;
&lt;h2 id="jupyters-new-governance-model"&gt;Jupyter’s new governance model&lt;/h2&gt;
&lt;p&gt;The project website provides &lt;a href="https://jupyter.org/governance/overview.html"&gt;an overview&lt;/a&gt; of the new governance model as well as details on its individual components. Please refer to those pages for specific information. In summary, the BDFL+Steering Council structure has been replaced by a small, elected Executive Council (EC) that works together with a Software Steering Council (SSC) made up of representatives from our subprojects, working groups, and standing committees. Every year, we will continue to recognize new Distinguished Contributors. This new governance model has replaced the previous model as of January 2023.&lt;/p&gt;
&lt;p&gt;The BDFL, Steering Council, and institutional partners have served us well in the past, and Jupyter is grateful for all of their support. We are optimistic about the work to be done by our new Executive Council, by our Software Steering Council, by our large community of contributors, and by all of our users who constantly provide thoughtful and informed feedback.&lt;/p&gt;
&lt;h2 id="executive-council-ec"&gt;Executive Council (EC)&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="Photos, names, and affiliations of our first executive council, which includes Afshin Darian, Brian Granger, Jason Grout, Fernando Pérez, Ana Ruvalcaba, and Steven Silvester." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-a-new-jupyter-governance-model-and-our-first/images/001-1_bILOKGalg_DgzOpUbVa-ow.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Our first executive council includes Afshin Darian, Brian Granger, Jason Grout, Fernando Pérez, Ana Ruvalcaba, and Steven Silvester.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://jupyter.org/about#executive-council-members"&gt;The EC&lt;/a&gt; is ultimately responsible for many aspects of Jupyter’s governance, including legal, financial, and operations matters. The members of the EC actively work to carry out Jupyter’s mission in accordance with its values. The EC delegates some work to the Software Steering Council, Software Subprojects, Standing Committees, and Working Groups. These other bodies report to the EC, and the EC is expected to support, oversee, manage, and ensure the success of operations across Jupyter. For more detail, see the &lt;a href="https://jupyter.org/governance/executive_council.html"&gt;Executive Council document&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first EC includes the following individuals, serving either full 2-year terms or partial 1-year terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Afshin Darian, QuantStack, 2 year term&lt;/li&gt;
&lt;li&gt;Brian Granger, AWS and Cal Poly San Luis Obispo, 2 year term&lt;/li&gt;
&lt;li&gt;Fernando Pérez, UC Berkeley, 2 year term&lt;/li&gt;
&lt;li&gt;Jason Grout, Databricks, 1 year term&lt;/li&gt;
&lt;li&gt;Ana Ruvalcaba, Cal Poly San Luis Obispo, 1 year term&lt;/li&gt;
&lt;li&gt;Steven Silvester, MongoDB, 1 year term&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our first three EC members, who will serve a two-year term, are Darian, Brian, and Fernando. These three people elected one new member for the EC; voters elected two others from a slate of nine candidates. These newly elected members are Jason Grout, Ana Ruvalcaba, and Steven Silvester. All three of these new members will serve a shortened one-year term on the council. In the future, we will &lt;a href="https://jupyter.org/governance/executive_council.html#council-membership-and-elections"&gt;have elections every year&lt;/a&gt;, selecting new members for two-year terms. Members can serve up to two consecutive full terms.&lt;/p&gt;
&lt;p&gt;We held an election in November and December 2022 in which all members of the Union of Councils (UoC) could participate, both as candidates and as voters. The UoC includes all members of all Standing Committees, Working Groups, and Subproject Councils. A person who nominated a candidate (either themself or someone else) wrote a statement of their interest, qualifications, and experience. In total, we received nine nominations for this election. We collected the candidates’ statements into a voter’s guide, and also included instructions about how to vote. We used ranked-choice voting with a single transferable vote, as &lt;a href="https://steve.apache.org/vote_types.html#stv"&gt;implemented by Apache STeVe&lt;/a&gt;. We collected votes from UoC members via Google Forms. Each voter could select one or more candidates, in descending order of preference, without ties. A tabulator then ran the results through a &lt;a href="https://github.com/jupyter/governance/pull/148"&gt;data prep script&lt;/a&gt;, then into &lt;a href="https://github.com/apache/steve/blob/trunk/monitoring/stv_tool.py"&gt;Apache STeVe’s tabulation script&lt;/a&gt;, to determine the winners through a series of rounds. (In our first election, because I was neither an EC member nor a candidate, I volunteered as tabulator.)&lt;/p&gt;
&lt;p&gt;In each round, the tabulation script looked for two candidates with more than a &lt;em&gt;quota,&lt;/em&gt; a winning threshold, of votes. If it found two, then it was done. If not, then any winner with more votes than the quota had its &lt;em&gt;surplus votes&lt;/em&gt; reallocated to lower-priority candidates, and a candidate with too few votes was &lt;em&gt;eliminated&lt;/em&gt;, then in the next round, the script repeated the process from the beginning. In total, it took 8 rounds to select 2 winners from our slate of 9 candidates.&lt;/p&gt;
&lt;h2 id="software-steering-council-ssc"&gt;Software Steering Council (SSC)&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://jupyter.org/about#software-steering-council-members"&gt;The SSC&lt;/a&gt; has jurisdiction over software-related decisions across Project Jupyter, with a primary focus on coordination across projects and decisions that have impact across many Jupyter Subprojects. It is also a mechanism for representatives of each project to share information and expertise. Technical decisions and processes where the SSC isn’t explicitly involved are automatically delegated to the individual projects to manage their day-to-day activities, create new repositories in their orgs, etc., with independence and autonomy. For more detail, see the &lt;a href="https://jupyter.org/governance/software_steering_council.html"&gt;Software Steering Council document&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first SSC includes the following individuals who each represent one subproject or working group:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jupyter Accessibility: Isabela Presedo-Floyd&lt;/li&gt;
&lt;li&gt;Jupyter Foundations: Paul Ivanov&lt;/li&gt;
&lt;li&gt;Jupyter Kernels: Johan Mabille, QuantStack&lt;/li&gt;
&lt;li&gt;Jupyter Notebook: Eric Charles, Datalayer / Anaconda&lt;/li&gt;
&lt;li&gt;Jupyter Security: Rick Wagner&lt;/li&gt;
&lt;li&gt;Jupyter Server: Zach Sailer, Apple&lt;/li&gt;
&lt;li&gt;Jupyter Standards: Carol Willing, Noteable&lt;/li&gt;
&lt;li&gt;Jupyter Widgets: Itay Dafna, Netflix&lt;/li&gt;
&lt;li&gt;JupyterHub and Binder: Min Ragan-Kelley, Simula Research Lab&lt;/li&gt;
&lt;li&gt;JupyterLab: Frédéric Collonval, QuantStack&lt;/li&gt;
&lt;li&gt;Voilà: Sylvain Corlay, QuantStack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of the above individuals was elected by the Council of their respective subproject or working group.&lt;/p&gt;
&lt;h2 id="how-to-get-involved"&gt;How to get involved&lt;/h2&gt;
&lt;p&gt;The Jupyter EC holds office hours every Tuesday at &lt;a href="https://time.is/compare/1000AM_in_PT"&gt;10:00 AM, U.S. Pacific time&lt;/a&gt;. You can find information about joining these office hours on the &lt;a href="https://discourse.jupyter.org/t/jupyter-community-calendar/2485"&gt;Jupyter Community Calendar&lt;/a&gt;. You can also contact the EC at &lt;a href="mailto:jupyter-executive-council@googlegroups.com"&gt;jupyter-executive-council@googlegroups.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Jason Weill is a Senior Front-End Engineer at Amazon Web Services; a contributor to JupyterLab, Jupyter Governance, and Jupyter Scheduler; and a member of the JupyterLab Council, the Jupyter Security Working Group, and the Jupyter Diversity, Equity, and Inclusion Standing Committee. This article does not represent the official position of amazon.com or any of its subsidiaries.&lt;/em&gt;&lt;/p&gt;
</content><category term="community"/></entry><entry><title>Introducing Jupyter Scheduler</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/" rel="alternate"/><published>2022-12-14T15:26:00+00:00</published><updated>2023-02-01T18:20:00+00:00</updated><author><name>Jason Weill</name></author><id>tag:jasongrout.github.io,2022-12-14:/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/</id><summary type="html">&lt;p&gt;The Open Source Jupyter team at AWS is proud to announce the release of Jupyter Scheduler, a JupyterLab extension that can run your Jupyter…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;The Open Source Jupyter team at AWS is proud to announce the release of &lt;a href="https://github.com/jupyter-server/jupyter-scheduler/"&gt;Jupyter Scheduler&lt;/a&gt;, a JupyterLab extension that can run your Jupyter notebooks in the background. Jupyter Scheduler was developed from the start as an open-source project under the umbrella of the Jupyter project and governance. You can set up your notebooks to run once or on a schedule. By default, Jupyter Scheduler runs notebooks on your local system where Jupyter Server is installed; you can also extend the scheduler to run your notebooks in the cloud, on an on-premise cluster, on JupyterHub, or even on supercomputers.&lt;/p&gt;
&lt;p&gt;We hope you’ll find Jupyter Scheduler useful for running notebooks periodically, such as daily or weekly reports. You can install it in JupyterLab by running &lt;code&gt;pip install jupyter_scheduler&lt;/code&gt;, then restarting JupyterLab. You can create &lt;strong&gt;jobs&lt;/strong&gt; (single runs of an individual notebook) and &lt;strong&gt;job definitions&lt;/strong&gt; (scheduled recurring notebook jobs) in two ways. You can right-click on a notebook in the file browser and choose “Create Notebook Job” from the context menu, or you can use the new toolbar button in an open notebook file.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the file browser showing the context menu for a notebook" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/001-1_nUcvmd-_anAtX4rT5MGPfA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;When you right-click on a notebook file in the file browser, a “Create Notebook Job” option appears in the context menu.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of a notebook showing a “Create Notebook Job” button in the toolbar" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/002-1_OOLLSTNnsaCLnX_g46Rq9A.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;In a notebook, the “Create Notebook Job” option appears on the right of the toolbar.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You can give your notebook job or job definition a name, choose an environment to run it in, select different output formats, and provide parameters that are set as local variables when your notebook gets executed. This parameterized execution is similar to &lt;a href="https://papermill.readthedocs.io/en/latest/"&gt;Papermill&lt;/a&gt;; Jupyter Scheduler provides a UI for managing and accessing the outputs of your notebook jobs inside JupyterLab.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the Create Job form with sample input values provided" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/003-1_YGJD3HWvIenbouO7R8bJYg.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;You can use the Create Job form to run a notebook once or to create a job definition that runs on a schedule.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In addition, if you select “Run on a schedule,” you can run your job on a recurring schedule. The scheduler provides a few useful shortcuts to, for example, run your notebook at a specified interval by the minute, hour, day or week. You can also specify a custom schedule in &lt;a href="https://www.man7.org/linux/man-pages/man5/crontab.5.html"&gt;crontab format&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the “run on a schedule” user interface in the Create Job form, with the “weekday” interval selected" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/004-1_TxAfPAOcW65yMfvmMiCi9A.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;You can schedule a job definition using preset intervals, such as every weekday.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the “run on a schedule” user interface in the Create Job form, with the custom schedule” interval selected" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/005-1_pBEzuVXkDtPiopR_5DxQsA.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;You can also select “custom schedule” and specify a cron expression for the notebook job definition’s schedule.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Once you’ve created a job or job schedule, you can use the “Notebook Jobs” icon on the launcher to view lists of jobs and job definitions. Each item’s name links to a detail view.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of JupyterLab launcher showing “Notebook Jobs” button in the “Other” section" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/006-1_Bwbm_RIsRiZz-zfCsv43Hg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;With the Jupyter Scheduler extension installed, JupyterLab’s launcher screen shows a “Notebook Jobs” button in the “Other” section. Click on it to view a list of jobs or job definitions.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the List Notebook Jobs view, showing many jobs, with links and information for each" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/007-1_RqogrC-XJlQLQhDJ-wml6A.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The list view shows a list of notebook jobs and a list of notebook job definitions. Each one includes links to view details, to download files, and buttons to take quick actions on them.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Screen shot of the Job Detail view, showing additional information and controls for a single job" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/008-1_BpShpinXD9ifmkfzeT30Cg.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The Job Detail view shows all available details for one job or one job definition.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;When one of your jobs has completed, you can download its files from the list or detail view. When your notebook runs, the scheduler saves a copy of the input file, so that even if you later change the file, it captures the state of the notebook at the time your job ran. Jupyter Scheduler uses unique names for the input and output files so that rerunning the same notebook produces new files every time.&lt;/p&gt;
&lt;p&gt;Jupyter Scheduler uses a REST API to create, update, delete and manage jobs and job definitions. You can also customize Jupyter Scheduler by plugging in your own scheduler class, for example, to replace the existing SQLite database or to run jobs in the cloud. AWS SageMaker Studio actually uses Jupyter Scheduler, with custom classes, as part of its automated notebooks feature, &lt;a href="https://aws.amazon.com/blogs/aws/next-generation-sagemaker-notebooks-now-with-built-in-data-preparation-real-time-collaboration-and-notebook-automation/"&gt;announced&lt;/a&gt; earlier this year. See the &lt;a href="https://jupyter-scheduler.readthedocs.io/en/latest/operators/index.html"&gt;Jupyter Scheduler operator documentation&lt;/a&gt; for more information about how to write and use your own scheduler.&lt;/p&gt;
&lt;p&gt;We’d love to hear what you think about Jupyter Scheduler! You can check out &lt;a href="https://jupyter-scheduler.readthedocs.io/"&gt;Jupyter Scheduler’s documentation on ReadTheDocs&lt;/a&gt;. Please &lt;a href="https://github.com/jupyter-server/jupyter-scheduler/issues"&gt;open issues&lt;/a&gt; with ideas for enhancements and about any bugs you find. If you’d like to contribute code, see the &lt;a href="https://jupyter-scheduler.readthedocs.io/en/latest/contributors/index.html"&gt;Jupyter Scheduler contributors guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article does not represent the official position of amazon.com or any of its subsidiaries.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About the authors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/009-1_7kFoTl09bhq0WbJbO2kFtw.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/andrii-i/"&gt;Andrii Ieroshenko&lt;/a&gt; is a Software Development Engineer at AWS. Previously, Andrii worked on the &lt;a href="https://github.com/jupytercalpoly/jupyterlab-notifications"&gt;Notifications&lt;/a&gt; project as a part of the Jupyter Cal Poly student internship program.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/010-1_3REz_2GLxridP9Uv6ZJjmQ.jpeg" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/3coins"&gt;Piyush Jain&lt;/a&gt; is a Software Development Engineer at AWS working on open source contributions to Project Jupyter. He is also a member of the Jupyter Server team, actively participating in maintenance and development of Jupyter server project.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/011-1_HrkANk8wyWRqXocQdnQ5mA.jpeg" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dlqqq/"&gt;David Qiu&lt;/a&gt; is a Software Development Engineer at AWS working on Project Jupyter. Previously, David was researching physical chemistry at the University of Illinois at Urbana-Champaign.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyter-scheduler/images/012-1_E40JRdqbPa7diRn6TXoCMQ.jpeg" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/JasonWeill"&gt;Jason Weill&lt;/a&gt; is a Senior Front-End Engineer at Amazon Web Services; a contributor to JupyterLab, Jupyter Governance, and Jupyter Scheduler; and a member of the JupyterLab Council, the Jupyter Security Working Group, and the Jupyter Diversity, Equity, and Inclusion Standing Committee.&lt;/p&gt;
</content><category term="DevOps"/><category term="Jupyter Server"/><category term="JupyterLab"/></entry></feed>