Skip to content

Instantly share code, notes, and snippets.

@simonw

simonw/better.md Secret

Last active May 18, 2025 14:48
Show Gist options
  • Save simonw/2b46e932a16c92e673ea09dfc0186ec2 to your computer and use it in GitHub Desktop.
Save simonw/2b46e932a16c92e673ea09dfc0186ec2 to your computer and use it in GitHub Desktop.

2025-05-18T13:14:32 conversation: 01jvhrmrfnmt0gghqy6v67h4nm id: 01jvhrg8qde976v12mwpqy67p0

Model: qwen2.5vl:latest

Prompt

convert to markdown

Attachments

  1. image/jpeg: /private/tmp/p/poster.jpg

image

Response

# Datasette: An Ecosystem of Tools for Finding Stories in Data

## Datasette
Datasette is a tool for exploring and publishing data. It helps data journalists and everyone else take data of any shape, analyze, and explore it, and publish it as an interactive website and accompanying API.

Datasette has over 180 plugins adding features for visualizing, editing, and transforming data.

- datasette-cluster-map
- datasette-graphql
- datasette-publish-cloudrun
- datasette-query-query-assistant
- datasette-extract-extract

## sqlite-utils
sqlite-utils is a Python library and CLI tool for manipulating SQLite databases. It aims to make the gap from "I have data" to "that data is in SQLite" as small as possible.

```python
from sqlite_utils import Database
db = Database("chickens.db")
db.table("chickens").insert_all([
    {"name": "Lila", "color": "white"},
    {"name": "Suna", "color": "gold"},
    {"name": "Snowy", "color": "blue"},
])
```

## LLM
LLM is a Python library and CLI tool for interacting with Large Language Models. It provides a plugin-based abstraction over hundreds of different models, both local and hosted.

```python
from sqlite_utils import Database
db = Database("chickens.db")
db.table("chickens").enable_fts([
    {"name": "Lila", "color": "white"},
    {"name": "Suna", "color": "gold"},
    {"name": "Snowy", "color": "blue"},
])
```

LLMs are proficient at SQL and extremely good at extracting structured data from unstructured text, images, and documents.

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

And in the terminal:

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions pk_id \
    --default_name name Untitled \
    --drop address
```

```bash
llm -m claude-3.5-haiku --functions 'import re
def extract_re_numbers(s):
    return re.findall(r'(\d+\.?\d+)?', s)
' -f https://datasette.io \
```

```python
sqlite-utils transform places.db \ 
    --rename_attractions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment