diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 17794a696d85..b880a546ef78 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -5,6 +5,7 @@ buildPythonPackage, fetchFromGitHub, fetchpatch, + fetchpatch2, pytestCheckHook, replaceVars, setuptools, @@ -167,7 +168,7 @@ let llm = buildPythonPackage rec { pname = "llm"; - version = "0.30"; + version = "0.31.1"; pyproject = true; build-system = [ setuptools ]; @@ -176,11 +177,17 @@ let owner = "simonw"; repo = "llm"; tag = version; - hash = "sha256-+8fwx7sS1vFSTqb+p2uDLqWW/UIx8WoW3kYJihznRRg="; + hash = "sha256-XxQ6IQyuO1rxQtiyb4VGrM7uGoffuNN5BhyI4YDxnZg="; }; patches = [ ./001-disable-install-uninstall-commands.patch + # Remove when https://github.com/simonw/llm/pull/1525 gets merged. + ./do-not-commit-inside-content_hash-embeddings.patch + (fetchpatch2 { + url = "https://github.com/simonw/llm/commit/67adad2c10be5c1898e3e1a664adb573f5d032cf.patch"; + hash = "sha256-7+sBQvef94ZTUrqNKVzHzjFADNj1KNzA2tbGs5btwNA="; + }) ] # See https://github.com/NixOS/nixpkgs/issues/476258 and https://github.com/simonw/llm/pull/1334 # TODO: Remove when sqlite 3.52.x is released. diff --git a/pkgs/development/python-modules/llm/do-not-commit-inside-content_hash-embeddings.patch b/pkgs/development/python-modules/llm/do-not-commit-inside-content_hash-embeddings.patch new file mode 100644 index 000000000000..003786de207a --- /dev/null +++ b/pkgs/development/python-modules/llm/do-not-commit-inside-content_hash-embeddings.patch @@ -0,0 +1,66 @@ +From db03b44068e71f5266b720eb68ecae50e3e14303 Mon Sep 17 00:00:00 2001 +From: Ewerton Silva +Date: Sat, 11 Jul 2026 23:50:58 -0300 +Subject: [PATCH] fix: do not commit inside the content_hash embeddings + migration + +--- + llm/embeddings_migrations.py | 21 ++++++++++----------- + tests/test_migrate.py | 12 ++++++++++++ + 2 files changed, 22 insertions(+), 11 deletions(-) + +diff --git a/llm/embeddings_migrations.py b/llm/embeddings_migrations.py +index 96444bd65..595a692d9 100644 +--- a/llm/embeddings_migrations.py ++++ b/llm/embeddings_migrations.py +@@ -62,17 +62,16 @@ def random_md5(): + db.conn.create_function("temp_md5", 1, md5) + db.conn.create_function("temp_random_md5", 0, random_md5) + +- with db.conn: +- db.execute(""" +- update embeddings +- set content_hash = temp_md5(content) +- where content is not null +- """) +- db.execute(""" +- update embeddings +- set content_hash = temp_random_md5() +- where content is null +- """) ++ db.execute(""" ++ update embeddings ++ set content_hash = temp_md5(content) ++ where content is not null ++ """) ++ db.execute(""" ++ update embeddings ++ set content_hash = temp_random_md5() ++ where content is null ++ """) + + db["embeddings"].create_index(["content_hash"]) + +diff --git a/tests/test_migrate.py b/tests/test_migrate.py +index 705021100..e74b1554b 100644 +--- a/tests/test_migrate.py ++++ b/tests/test_migrate.py +@@ -117,6 +117,18 @@ def test_migrations_for_embeddings(): + assert db["embeddings"].foreign_keys[0].other_table == "collections" + + ++@pytest.mark.skipif( ++ not hasattr(sqlite_utils.Database, "atomic"), ++ reason="sqlite-utils 4 and higher run each migration inside a transaction", ++) ++def test_embeddings_migrations_do_not_commit(): ++ # https://github.com/simonw/llm/issues/1523 ++ db = sqlite_utils.Database(memory=True) ++ for migration in embeddings_migrations.pending(db): ++ with db.atomic(): ++ migration.fn(db) ++ ++ + def test_backfill_content_hash(): + db = sqlite_utils.Database(memory=True) + # Run migrations up to but not including m004_store_content_hash