<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: overture</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/overture.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-10-04T22:48:59+00:00</updated><author><name>Simon Willison</name></author><entry><title>Let the LLM Write the Prompts: An Intro to DSPy in Compound Al Pipelines</title><link href="https://simonwillison.net/2025/Oct/4/drew-on-dspy/#atom-tag" rel="alternate"/><published>2025-10-04T22:48:59+00:00</published><updated>2025-10-04T22:48:59+00:00</updated><id>https://simonwillison.net/2025/Oct/4/drew-on-dspy/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=I9ZtkgYZnOw"&gt;Let the LLM Write the Prompts: An Intro to DSPy in Compound Al Pipelines&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I've had trouble getting my head around &lt;a href="https://dspy.ai"&gt;DSPy&lt;/a&gt; in the past. This half hour talk by Drew Breunig at the recent Databricks Data + AI Summit is the clearest explanation I've seen yet of the kinds of problems it can help solve.&lt;/p&gt;
&lt;p&gt;Here's Drew's &lt;a href="https://www.dbreunig.com/2025/06/10/let-the-model-write-the-prompt.html"&gt;written version of the talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drew works on Overture Maps, which combines Point Of Interest data from numerous providers to create a single unified POI database. This is an example of &lt;strong&gt;conflation&lt;/strong&gt;, a notoriously difficult task in GIS where multiple datasets are deduped and merged together.&lt;/p&gt;
&lt;p&gt;Drew uses an inexpensive local model, &lt;a href="https://huggingface.co/Qwen/Qwen3-0.6B"&gt;Qwen3-0.6B&lt;/a&gt;, to compare 70 million addresses and identity matches, for example between &lt;code&gt;Place(address="3359 FOOTHILL BLVD", name="RESTAURANT LOS ARCOS")&lt;/code&gt; and &lt;code&gt;Place(address="3359 FOOTHILL BLVD", name="Los Arcos Taqueria"')&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;DSPy's role is to optimize the prompt used for that smaller model. Drew used GPT-4.1 and the &lt;a href="https://dspy.ai/api/optimizers/MIPROv2/"&gt;dspy.MIPROv2&lt;/a&gt; optimizer, producing a 700 token prompt that increased the score from 60.7% to 82%.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Determine if two points of interest refer to the same place. Arrow to optimized prompt: Given two records representing places or businesses-each with at least a name and address-analyze the information and determine if they refer to the same real-world entity. Consider minor differences such as case, diacritics, transliteration, abbreviations, or formatting as potential matches if both the name and address are otherwise strongly similar. Only output &amp;quot;True&amp;quot; if both fields are a close match; if there are significant differences in either the name or address, even if one field matches exactly, output &amp;quot;False&amp;quot;. Your decision should be robust to common variations and errors and should work across multiple languages and scripts." src="https://static.simonwillison.net/static/2025/optimized-prompt.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;Why bother? Drew points out that having a prompt optimization pipeline makes it trivial to evaluate and switch to other models if they can score higher with a custom optimized prompt - without needing to execute that trial-and-error optimization by hand.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-engineering"&gt;prompt-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/drew-breunig"&gt;drew-breunig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dspy"&gt;dspy&lt;/a&gt;&lt;/p&gt;



</summary><category term="geospatial"/><category term="ai"/><category term="prompt-engineering"/><category term="generative-ai"/><category term="llms"/><category term="drew-breunig"/><category term="overture"/><category term="dspy"/></entry><entry><title>Conflating Overture Places Using DuckDB, Ollama, Embeddings, and More</title><link href="https://simonwillison.net/2024/Sep/30/conflating-overture-places/#atom-tag" rel="alternate"/><published>2024-09-30T17:24:03+00:00</published><updated>2024-09-30T17:24:03+00:00</updated><id>https://simonwillison.net/2024/Sep/30/conflating-overture-places/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.dbreunig.com/2024/09/27/conflating-overture-points-of-interests-with-duckdb-ollama-and-more.html"&gt;Conflating Overture Places Using DuckDB, Ollama, Embeddings, and More&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Drew Breunig's detailed tutorial on "conflation" - combining different geospatial data sources by de-duplicating address strings such as &lt;code&gt;RESTAURANT LOS ARCOS,3359 FOOTHILL BLVD,OAKLAND,94601&lt;/code&gt; and &lt;code&gt;LOS ARCOS TAQUERIA,3359 FOOTHILL BLVD,OAKLAND,94601&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Drew uses an entirely offline stack based around Python, DuckDB and Ollama and finds that a combination of H3 geospatial tiles and &lt;code&gt;mxbai-embed-large&lt;/code&gt; embeddings (though other embedding models should work equally well) gets really good results.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/duckdb"&gt;duckdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/embeddings"&gt;embeddings&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/drew-breunig"&gt;drew-breunig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ollama"&gt;ollama&lt;/a&gt;&lt;/p&gt;



</summary><category term="geospatial"/><category term="python"/><category term="ai"/><category term="duckdb"/><category term="embeddings"/><category term="drew-breunig"/><category term="overture"/><category term="ollama"/></entry><entry><title>Towards Standardizing Place</title><link href="https://simonwillison.net/2024/Aug/1/towards-standardizing-place/#atom-tag" rel="alternate"/><published>2024-08-01T23:14:49+00:00</published><updated>2024-08-01T23:14:49+00:00</updated><id>https://simonwillison.net/2024/Aug/1/towards-standardizing-place/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.dbreunig.com/2024/07/31/towards-standardizing-place.html"&gt;Towards Standardizing Place&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Overture Maps &lt;a href="https://overturemaps.org/overture-maps-foundation-releases-general-availability-of-its-open-maps-datasets/"&gt;announced General Availability of its global maps datasets&lt;/a&gt; last week, covering places, buildings, divisions, and base layers.&lt;/p&gt;
&lt;p&gt;Drew Breunig demonstrates how this can be accessed using both the &lt;a href="https://explore.overturemaps.org/#13.1/37.46975/-122.44309"&gt;Overture Explorer tool&lt;/a&gt; and DuckDB, and talks about Overture's GERS IDs - reminiscent of &lt;a href="https://whosonfirst.org/"&gt;Who's On First&lt;/a&gt; IDs - which provide stable IDs for all kinds of geographic places.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/whosonfirst"&gt;whosonfirst&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/drew-breunig"&gt;drew-breunig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;&lt;/p&gt;



</summary><category term="geospatial"/><category term="whosonfirst"/><category term="drew-breunig"/><category term="overture"/></entry><entry><title>A POI Database in One Line</title><link href="https://simonwillison.net/2024/Apr/19/a-poi-database-in-one-line/#atom-tag" rel="alternate"/><published>2024-04-19T02:44:58+00:00</published><updated>2024-04-19T02:44:58+00:00</updated><id>https://simonwillison.net/2024/Apr/19/a-poi-database-in-one-line/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.dbreunig.com/2024/04/18/a-poi-database-in-one-line.html"&gt;A POI Database in One Line&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Overture maps offer an extraordinarily useful freely licensed databases of POI (point of interest) listings, principally derived from partners such as Facebook and including restaurants, shops, museums and other locations from all around the world.&lt;/p&gt;
&lt;p&gt;Their new "overturemaps" Python CLI utility makes it easy to quickly pull subsets of their data... but requires you to provide a bounding box to do so.&lt;/p&gt;
&lt;p&gt;Drew Breunig came up with this delightful recipe for fetching data using LLM and gpt-3.5-turbo to fill in those bounding boxes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;overturemaps download --bbox=$(llm 'Give me a bounding box for Alameda, California expressed as only four numbers delineated by commas, with no spaces, longitude preceding latitude.') -f geojsonseq --type=place | geojson-to-sqlite alameda.db places - --nl --pk=id&lt;/code&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/dbreunig/status/1781133877320523792"&gt;@dbreunig&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geojson"&gt;geojson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/drew-breunig"&gt;drew-breunig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="geospatial"/><category term="geojson"/><category term="llm"/><category term="drew-breunig"/><category term="overture"/></entry><entry><title>How to make self-hosted maps that work everywhere and cost next to nothing</title><link href="https://simonwillison.net/2024/Feb/24/self-hosted-maps/#atom-tag" rel="alternate"/><published>2024-02-24T04:19:05+00:00</published><updated>2024-02-24T04:19:05+00:00</updated><id>https://simonwillison.net/2024/Feb/24/self-hosted-maps/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.muckrock.com/news/archives/2024/feb/13/release-notes-how-to-make-self-hosted-maps-that-work-everywhere-cost-next-to-nothing-and-might-even-work-in-airplane-mode/"&gt;How to make self-hosted maps that work everywhere and cost next to nothing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Chris Amico provides a detailed roundup of the state of web mapping in 2024. It’s never been easier to entirely host your own mapping infrastructure, thanks to OpenStreetMap, Overture, MBTiles, PMTiles, Maplibre and a whole ecosystem of other fine open source projects.&lt;/p&gt;

&lt;p&gt;I like Protomaps creator Brandon Liu’s description of this: “post-scarcity web mapping”.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/maps"&gt;maps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openstreetmap"&gt;openstreetmap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chris-amico"&gt;chris-amico&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;&lt;/p&gt;



</summary><category term="geospatial"/><category term="maps"/><category term="openstreetmap"/><category term="chris-amico"/><category term="overture"/></entry><entry><title>DALL-E 3, GPT4All, PMTiles, sqlite-migrate, datasette-edit-schema</title><link href="https://simonwillison.net/2023/Oct/30/weeknotes/#atom-tag" rel="alternate"/><published>2023-10-30T23:59:12+00:00</published><updated>2023-10-30T23:59:12+00:00</updated><id>https://simonwillison.net/2023/Oct/30/weeknotes/#atom-tag</id><summary type="html">
    &lt;p&gt;I wrote a lot this week. I also did some fun research into new options for self-hosting vector maps and pushed out several new releases of plugins.&lt;/p&gt;
&lt;h4 id="user-content-on-the-blog"&gt;On the blog&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://simonwillison.net/2023/Oct/26/add-a-walrus/"&gt;Now add a walrus: Prompt engineering in DALL-E 3&lt;/a&gt; talked about my explorations of the new DALL-E 3 image generation model, including some reverse engineering showing how OpenAI prompt engineered ChatGPT to pass generate its own prompts for DALL-E 3. And a lot of pictures of pelicans. I also wrote a TIL about &lt;a href="https://til.simonwillison.net/css/simple-two-column-grid"&gt;the CSS grids I used in that post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://simonwillison.net/2023/Oct/26/llm-embed-jina/"&gt;Execute Jina embeddings with a CLI using llm-embed-jina&lt;/a&gt; I released &lt;a href="https://github.com/simonw/llm-embed-jina"&gt;a new plugin&lt;/a&gt; to run the new Jina AI 8K text embedding model using my &lt;a href="https://llm.datasette.io/"&gt;LLM&lt;/a&gt; command-line tool.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://simonwillison.net/2023/Oct/23/embeddings/"&gt;Embeddings: What they are and why they matter&lt;/a&gt; is the big write-up of my talk about embeddings from PyBay this year. This has received a lot of traffic, presumably because it provides one of the more accessible answers to the question "what are embeddings?".&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="user-content-pmtiles-and-maplibre-gl"&gt;PMTiles and MapLibre GL&lt;/h4&gt;
&lt;p&gt;I saw a post about &lt;a href="https://protomaps.com/"&gt;Protomaps&lt;/a&gt; on &lt;a href="https://news.ycombinator.com/item?id=37982621"&gt;Hacker News&lt;/a&gt;. It's absolutely fantastic technology.&lt;/p&gt;
&lt;p&gt;The Protomaps &lt;a href="https://docs.protomaps.com/pmtiles/"&gt;PMTiles&lt;/a&gt; file format lets you bundle together vector tiles in a single file which is designed to be queried using HTTP range header requests.&lt;/p&gt;
&lt;p&gt;This means you can drop &lt;a href="https://maps.protomaps.com/builds/"&gt;a single 107GB file&lt;/a&gt; on cloud hosting and use it to efficiently serve vector maps to clients, fetching just the data they need for the current map area.&lt;/p&gt;
&lt;p&gt;Even better than that, you can create &lt;a href="https://docs.protomaps.com/guide/getting-started#_3-extract-any-area"&gt;your own subset&lt;/a&gt; of the larger map covering just the area you care about.&lt;/p&gt;
&lt;p&gt;I tried this out against my hometown of Half Moon Bay ond get a building-outline-level vector map for the whole town in just a 2MB file!&lt;/p&gt;
&lt;p&gt;You can see the result (which also includes business listing markers &lt;a href="https://til.simonwillison.net/overture-maps/overture-maps-parquet#user-content-exporting-the-places-to-sqlite"&gt;from Overture maps&lt;/a&gt;) at &lt;strong&gt;&lt;a href="https://simonw.github.io/hmb-map/"&gt;simonw.github.io/hmb-map&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2023/protomaps.jpg" alt="A vector map of El Granada showing the area around the harbor, with lots of little markers for different businesses. Protomaps (c) OpenStreetMap in the corner." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;Lots more details of how I built this, including using Vite as a build tool and the &lt;a href="https://maplibre.org/"&gt;MapLibre GL&lt;/a&gt; JavaScript library to serve the map, in my TIL &lt;a href="https://til.simonwillison.net/gis/pmtiles"&gt;Serving a custom vector web map using PMTiles and maplibre-gl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm so excited about this: we now have the ability to entirely self-host vector maps of any location in the world, using openly licensed data, without depending on anything other than our own static file hosting web server.&lt;/p&gt;
&lt;h4 id="user-content-llm-gpt4all"&gt;llm-gpt4all&lt;/h4&gt;
&lt;p&gt;This was a tiny release - literally a &lt;a href="https://github.com/simonw/llm-gpt4all/commit/377ebf5c911e1a6bb8039a23c3ca37bcf83a1b79#diff-945dfb6aca00ffce39b7f0152bb540fce2d1ed1bb569a7a2688f2f9fb0aeb0d2"&gt;one line code change&lt;/a&gt; - with a huge potential impact.&lt;/p&gt;
&lt;p&gt;Nomic AI's &lt;a href="https://gpt4all.io/"&gt;GPT4All&lt;/a&gt; is a really cool project. They describe their focus as "a free-to-use, locally running, privacy-aware chatbot. No GPU or internet required." - they've taken &lt;a href="https://github.com/ggerganov/llama.cpp"&gt;llama.cpp&lt;/a&gt; (and other libraries) and wrapped them in a much nicer experience, complete with Windows, macOS and Ubuntu installers.&lt;/p&gt;
&lt;p&gt;Under the hood it's mostly Python, and Nomic have done a fantastic job releasing that Python core as an &lt;a href="https://docs.gpt4all.io/gpt4all_python.html"&gt;installable Python package&lt;/a&gt; - meaning you can literally &lt;code&gt;pip install gpt4all&lt;/code&gt; to get almost everything you need to run a local language model!&lt;/p&gt;
&lt;p&gt;Unlike alternative Python libraries &lt;a href="https://llm.mlc.ai/docs/install/mlc_llm.html"&gt;MLC&lt;/a&gt; and &lt;a href="https://pypi.org/project/llama-cpp-python/"&gt;llama-cpp-python&lt;/a&gt;, Nomic have done the work to publish compiled binary wheels to PyPI... which means &lt;code&gt;pip install gpt4all&lt;/code&gt; works without needing a compiler toolchain or any extra steps!&lt;/p&gt;
&lt;p&gt;My &lt;a href="https://llm.datasette.io/"&gt;LLM&lt;/a&gt; tool has had a &lt;a href="https://github.com/simonw/llm-gpt4all"&gt;llm-gpt4all&lt;/a&gt; plugin since I first added alternative model backends via plugins &lt;a href="https://simonwillison.net/2023/Jul/12/llm/"&gt;in July&lt;/a&gt;. Unfortunately, it spat out weird debugging information that I had been unable to hide (a problem that &lt;a href="https://github.com/simonw/llm-llama-cpp/issues/22"&gt;still affects llm-llama-cpp&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Nomic have &lt;a href="https://github.com/nomic-ai/gpt4all/issues/1159"&gt;fixed this&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;As a result, &lt;code&gt;llm-gpt4all&lt;/code&gt; is now my recommended plugin for getting started running local LLMs:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;pipx install llm
llm install llm-gpt4all
llm -m mistral-7b-instruct-v0 &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;ten facts about pelicans&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The latest plugin can also now use the GPU on macOS, a key feature of Nomic's &lt;a href="https://blog.nomic.ai/posts/gpt4all-gpu-inference-with-vulkan"&gt;big release in September&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="user-content-sqlite-migrate"&gt;sqlite-migrate&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/simonw/sqlite-migrate"&gt;sqlite-migrate&lt;/a&gt; is my plugin that adds a simple migration system to &lt;a href="https://sqlite-utils.datasette.io/"&gt;sqlite-utils&lt;/a&gt;, for applying changes to a database schema in a controlled, repeatable way.&lt;/p&gt;
&lt;p&gt;Alex Garcia spotted &lt;a href="https://github.com/simonw/sqlite-migrate/issues/11"&gt;a bug&lt;/a&gt; in the way it handled multiple migration sets with overlapping migration names, which is now fixed in &lt;a href="https://github.com/simonw/sqlite-migrate/releases/tag/0.1b0"&gt;sqlite-migrate 0.1b0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ironically the fix involved changing the schema of the &lt;code&gt;_sqlite_migrations&lt;/code&gt; table used to track which migrations have been applied... which is the one part of the system that isn't itself managed by its own migration system! I had to implement &lt;a href="https://github.com/simonw/sqlite-migrate/blob/613ecd5c4aa8493525879d2db7363fa5bfbe4ffb/sqlite_migrate/__init__.py#L103-L105"&gt;a conditional check&lt;/a&gt; instead that checks if the table needs to be updated.&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://news.ycombinator.com/item?id=38036921"&gt;recent thread about SQLite&lt;/a&gt; on Hacker News included a surprising number of complaints about the difficulty of running migrations, due to the lack of features of the core &lt;code&gt;ALTER TABLE&lt;/code&gt; implementation.&lt;/p&gt;
&lt;p&gt;The combination &lt;code&gt;sqlite-migrate&lt;/code&gt; and the &lt;a href="https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-transform"&gt;table.transform() method&lt;/a&gt; in &lt;code&gt;sqlite-utils&lt;/code&gt; offers a pretty robust solution to this problem. Clearly I need to put more work into promoting it!&lt;/p&gt;
&lt;h4 id="user-content-homebrew-trouble-for-llm"&gt;Homebrew trouble for LLM&lt;/h4&gt;
&lt;p&gt;I started getting confusing bug reports for my various LLM projects, all of which boiled down to a failure to install plugins that depended on PyTorch.&lt;/p&gt;
&lt;p&gt;It turns out the LLM package for Homebrew &lt;a href="https://github.com/Homebrew/homebrew-core/pull/151467"&gt;upgraded to Python 3.12&lt;/a&gt; last week... but PyTorch &lt;a href="https://github.com/pytorch/pytorch/issues/110436"&gt;isn't yet available for Python 3.12&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This means that while base LLM installed from Homebrew works fine, attempts to install things like my new &lt;a href="https://github.com/simonw/llm-embed-jina"&gt;llm-embed-jina&lt;/a&gt; plugin fail with &lt;a href="https://github.com/simonw/llm-embed-jina/issues/5"&gt;weird errors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm not sure the best way to address this. For the moment I've removed the recommendation to install using Homebrew and replaced it with &lt;a href="https://pypa.github.io/pipx/"&gt;pipx&lt;/a&gt; in a few places. I have &lt;a href="https://github.com/simonw/llm/issues/315"&gt;an open issue&lt;/a&gt; to find a better solution for this.&lt;/p&gt;
&lt;p&gt;The difficulty of debugging this issue prompted me to ship a new plugin that I've been contemplating for a while: &lt;a href="https://github.com/simonw/llm-python"&gt;llm-python&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installing this plugin adds a new &lt;code&gt;llm python&lt;/code&gt; command, which runs a Python interpreter in same virtual environment as LLM - useful for if you installed LLM via &lt;code&gt;pipx&lt;/code&gt; or Homebrew and don't know where that virtual environment is located.&lt;/p&gt;
&lt;p&gt;It's great for debugging: I can ask people to run &lt;code&gt;llm python -c 'import sys; print(sys.path)'&lt;/code&gt; for example to figure out what their Python path looks like.&lt;/p&gt;
&lt;p&gt;It's also promising as a tool for future tutorials about the &lt;a href="https://llm.datasette.io/en/stable/python-api.html"&gt;LLM Python library&lt;/a&gt;. I can tell people to &lt;code&gt;pipx install llm&lt;/code&gt; and then run &lt;code&gt;llm python&lt;/code&gt; to get a Python interpreter with the library already installed, without them having to mess around with virtual environments directly.&lt;/p&gt;
&lt;h4 id="user-content-add-and-remove-indexes-in-datasette-edit-schema"&gt;Add and remove indexes in datasette-edit-schema&lt;/h4&gt;
&lt;p&gt;We're iterating on Datasette Cloud based on feedback from people using the preview. One request was the ability to add and remove indexes from larger tables, to help speed up faceting.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/simonw/datasette-edit-schema/releases/tag/0.7"&gt;datasette-edit-schema 0.7&lt;/a&gt; adds that feature.&lt;/p&gt;
&lt;p&gt;That plugin &lt;a href="https://github.com/simonw/datasette-edit-schema/blob/main/update-screenshot.sh"&gt;includes this script&lt;/a&gt; for automatically updating the screenshot in the README using &lt;a href="https://shot-scraper.datasette.io/"&gt;shot-scraper&lt;/a&gt;. Here's the latest result:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2023/datasette-edit-schema.png" alt="Screenshot of the edit schema UI - you can rename a table, change existing columns, add a column, update foreign key relationships, change the primary key, delete the table and now edit the table indexes." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;h4 id="user-content-releases-this-week"&gt;Releases this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/sqlite-migrate/releases/tag/0.1b0"&gt;sqlite-migrate 0.1b0&lt;/a&gt;&lt;/strong&gt; - 2023-10-27&lt;br /&gt;A simple database migration system for SQLite, based on sqlite-utils&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/llm-python/releases/tag/0.1"&gt;llm-python 0.1&lt;/a&gt;&lt;/strong&gt; - 2023-10-27&lt;br /&gt;"llm python" is a command to run a Python interpreter in the LLM virtual environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/llm-embed-jina/releases/tag/0.1.2"&gt;llm-embed-jina 0.1.2&lt;/a&gt;&lt;/strong&gt; - 2023-10-26&lt;br /&gt;Embedding models from Jina AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-edit-schema/releases/tag/0.7"&gt;datasette-edit-schema 0.7&lt;/a&gt;&lt;/strong&gt; - 2023-10-26&lt;br /&gt;Datasette plugin for modifying table schemas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-ripgrep/releases/tag/0.8.2"&gt;datasette-ripgrep 0.8.2&lt;/a&gt;&lt;/strong&gt; - 2023-10-25&lt;br /&gt;Web interface for searching your code using ripgrep, built as a Datasette plugin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/llm-gpt4all/releases/tag/0.2"&gt;llm-gpt4all 0.2&lt;/a&gt;&lt;/strong&gt; - 2023-10-24&lt;br /&gt;Plugin for LLM adding support for the GPT4All collection of models&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="user-content-til-this-week"&gt;TIL this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/css/simple-two-column-grid"&gt;A simple two column CSS grid&lt;/a&gt; - 2023-10-27&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/gis/pmtiles"&gt;Serving a custom vector web map using PMTiles and maplibre-gl&lt;/a&gt; - 2023-10-24&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://til.simonwillison.net/github-actions/vite-github-pages"&gt;Serving a JavaScript project built using Vite from GitHub Pages&lt;/a&gt; - 2023-10-24&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mapping"&gt;mapping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/weeknotes"&gt;weeknotes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite-utils"&gt;sqlite-utils&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mapping"/><category term="projects"/><category term="weeknotes"/><category term="sqlite-utils"/><category term="llm"/><category term="overture"/></entry><entry><title>Overture Maps Foundation Releases Its First World-Wide Open Map Dataset</title><link href="https://simonwillison.net/2023/Jul/27/overture-maps/#atom-tag" rel="alternate"/><published>2023-07-27T16:45:09+00:00</published><updated>2023-07-27T16:45:09+00:00</updated><id>https://simonwillison.net/2023/Jul/27/overture-maps/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://overturemaps.org/overture-maps-foundation-releases-first-world-wide-open-map-dataset/"&gt;Overture Maps Foundation Releases Its First World-Wide Open Map Dataset&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Overture Maps Foundation is a collaboration lead by Amazon, Meta, Microsoft and TomTom dedicated to producing “reliable, easy-to-use, and interoperable open map data”.&lt;/p&gt;

&lt;p&gt;Yesterday they put out their first release and it’s pretty astonishing: four different layers of geodata, covering Places of Interest (shops, restaurants, attractions etc), administrative boundaries, building outlines and transportation networks.&lt;/p&gt;

&lt;p&gt;The data is available as Parquet. I just downloaded the 8GB places dataset and can confirm that it contains 59 million listings from around the world—I filtered to just places in my local town and a spot check showed that recently opened businesses (last 12 months) were present and the details all looked accurate.&lt;/p&gt;

&lt;p&gt;The places data is licensed under “Community Data License Agreement – Permissive” which looks like the only restriction is that you have to include that license when you further share the data.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-data"&gt;open-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parquet"&gt;parquet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/meta"&gt;meta&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/overture"&gt;overture&lt;/a&gt;&lt;/p&gt;



</summary><category term="geospatial"/><category term="open-data"/><category term="parquet"/><category term="meta"/><category term="overture"/></entry></feed>