solvekit.core

Core utilities for extending the solveit UI

SVG Icon Support: The icon parameter supports the 'ii:{prefix}:{name}' format, which automatically fetches SVG icons from the Iconify API. For example, 'ii:lucide:copy-plus' will request https://api.iconify.design/lucide/copy-plus.svg?height=16&width=16, with a default size of 16×16.


source

add_btn


def add_btn(
    id:str, # Unique DOM id for the button element
    icon:str, # HTML/SVG icon string, or `'ii:prefix:name'` for Iconify lookup
    onclick:str, # Code to execute on click (Python or JS depending on `lang`)
    tooltip:str=None, # Optional tooltip text shown on hover
    lang:Literal='py', # Whether `onclick` is Python or JavaScript
):

Add a custom button to the solveit toolbar inside the shared button group.

Examples

Dice Button

Adds a toolbar button that rolls a random die. Click the button — it prints the result in a self-deleting code cell.

add_btn('dice', 'ii:lucide:dice-5', 'import random; dice_num = random.randint(1,6); print(f"🎲 You rolled a {dice_num}!"); time.sleep(dice_num)', 'Roll a dice!', lang='py')

Fastcore Docs Format Button

Adds a toolbar button that reformats selected code cells into fastcore docs format. Select one or more code messages, then click the button — it creates a prompt asking SolveitAI to add docstrings and per-parameter comments to each function.

fc_format = """
() => {
    const ids = selectedMsgIds();
    _post('upsert_msg', {
        id_: '',
        msg_type: 'prompt',
        content: `Please create a new version of functions in msgs ${ids} which adds a docstring and also adds a comment after each parameter. This is known as fastcore docs format. So each parameter will need to be on a separate line. Try to make the overall structure look the same as the previous function with these characteristics.`,
        is_input: '1',
        cmd: 'upsert-shift-run'
    });
}""".strip()
add_btn('fc_format', 'ii:lucide:file-code', fc_format, 'Fastcore docs format', lang='js')