Prompt

Notebooks as prompts.
import fastcore.all as FC
from fastcore.xml import to_xml
from fastcore.test import *
from rich.console import Console
from pote.widget import cleanupwidgets

cprint = (console := Console(width=120)).print

Configuration

Prompt


source

Prompt

 Prompt ()

Initialize self. See help(type(self)) for accurate signature.

:: exclude :: ## Example

print('hello')
Help me write a **function** that takes a list of numbers and returns the sum of the squares of the numbers.

Be sure to include docstring and type hints. Be as concise as possible.
def sum_of_squares(numbers: list[int]) -> int:
    return sum(x**2 for x in numbers)
# Help me write a function that takes a list of numbers and returns the maximum of the numbers.

def max_of_numbers(numbers: list[int]) -> int:
    return max(numbers)

Claude, I’m working on the Bridget project, specifically on one aspect: notebook state management. We’ve created @18_nb_state.ipynb to develop a widget that will:

  1. Access notebook state from a DOM script element of type application/json with id notebook-state-json
  2. Allow Python code to read that state object
  3. Eventually be integrated into the main Bridget class

Key context: - Using AnyWidget for cross-environment compatibility (see examples here 16_htmx.ipynb, 22_bridget.ipynb) - Following @nbdev development patterns - State element is created as normal notebook output (IPython display) - No direct interaction with VSCode extension

I’ll help you develop the notebook state management component in smaller, focused chunks. Let’s start with a high-level implementation plan and then break it down into actionable steps.

Initial Implementation Plan

  1. State Access Layer
    • JavaScript module to access DOM state element
    • Message passing between JS and Python via AnyWidget
    • Basic state structure types in Python
  2. State Management
    • State parsing and validation
    • Change detection and events
    • Output tracking
  3. API Design
    • Python interface for state access
    • Methods for output manipulation
    • Event callbacks

Let’s start with the first concrete step: implementing the JavaScript state access layer. Here’s what I propose for the initial implementation:

function getNotebookState() {
    const stateElement = document.querySelector('script[type="application/x-notebook-state+json"]');
    return stateElement ? JSON.parse(stateElement.textContent) : null;
}

function on_msg(msg) {
    console.log(`new nbstate message: ${JSON.stringify(msg)}`);
    // Handle commands from Python
    if (msg.cmd === 'get_state') {
        const state = getNotebookState();
        this.model.send({ cmd: 'state_update', state });
    }
}

export default { 
    async initialize({ model }) {
        console.log('NBState initialized');
        model.on("msg:custom", on_msg);
        
        // Send initial state
        const state = getNotebookState();
        if (state) model.send({ cmd: 'state_update', state });
    }
};

Would you like me to explain this initial JavaScript implementation before we move on to the Python side?

Export

Prompt.export('gist')

# or
Prompt.export('nb')

# or