From 7137985c3993817bc82838174ec0b4d92155557c Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 16:31:18 -0700 Subject: [PATCH 01/55] llm: move to by-name --- pkgs/by-name/ll/llm/package.nix | 3 +++ pkgs/top-level/all-packages.nix | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 pkgs/by-name/ll/llm/package.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix new file mode 100644 index 000000000000..0898381b470b --- /dev/null +++ b/pkgs/by-name/ll/llm/package.nix @@ -0,0 +1,3 @@ +{ python3Packages }: + +python3Packages.toPythonApplication python3Packages.llm diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4ebdcccdb165..8aa00063f483 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3519,8 +3519,6 @@ with pkgs; ocamlPackages = ocaml-ng.ocamlPackages_4_14; }; - llm = with python3Packages; toPythonApplication llm; - loganalyzer = libsForQt5.callPackage ../development/tools/loganalyzer { }; logstash7 = callPackage ../tools/misc/logstash/7.x.nix { From 98756a6482a81e624f9815a547cbc9309170adae Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 16:46:11 -0700 Subject: [PATCH 02/55] llm: add enable-llm-anthropic override --- pkgs/by-name/ll/llm/package.nix | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 0898381b470b..e6f75b05e21d 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -1,3 +1,17 @@ -{ python3Packages }: +{ + lib, + python3Packages, + enable-llm-anthropic ? false, +}: -python3Packages.toPythonApplication python3Packages.llm +let + inherit (python3Packages) toPythonApplication llm llm-anthropic; +in + +toPythonApplication ( + llm.overrideAttrs (finalAttrs: { + propagatedBuildInputs = + (finalAttrs.propagatedBuildInputs or []) + ++ lib.optionals enable-llm-anthropic [ llm-anthropic ]; + }) +) From b8a7b821f7b011381126ebc84a1abc834041263d Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 17:00:40 -0700 Subject: [PATCH 03/55] llm: add enable-llm-cmd override --- pkgs/by-name/ll/llm/package.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index e6f75b05e21d..6b2e8d0ab4b4 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -2,16 +2,23 @@ lib, python3Packages, enable-llm-anthropic ? false, + enable-llm-cmd ? false, }: let - inherit (python3Packages) toPythonApplication llm llm-anthropic; + inherit (python3Packages) + toPythonApplication + llm + llm-anthropic + llm-cmd + ; in toPythonApplication ( llm.overrideAttrs (finalAttrs: { propagatedBuildInputs = - (finalAttrs.propagatedBuildInputs or []) - ++ lib.optionals enable-llm-anthropic [ llm-anthropic ]; + (finalAttrs.propagatedBuildInputs or [ ]) + ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] + ++ lib.optionals enable-llm-cmd [ llm-cmd ]; }) ) From ab5c974d2ed8f556b9aca522a7a3105dcc8eef4a Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 17:07:36 -0700 Subject: [PATCH 04/55] llm: add enable-llm-gemini override --- pkgs/by-name/ll/llm/package.nix | 5 ++++- pkgs/development/python-modules/llm-gemini/default.nix | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 6b2e8d0ab4b4..449547b3c152 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -3,6 +3,7 @@ python3Packages, enable-llm-anthropic ? false, enable-llm-cmd ? false, + enable-llm-gemini ? false, }: let @@ -11,6 +12,7 @@ let llm llm-anthropic llm-cmd + llm-gemini ; in @@ -19,6 +21,7 @@ toPythonApplication ( propagatedBuildInputs = (finalAttrs.propagatedBuildInputs or [ ]) ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] - ++ lib.optionals enable-llm-cmd [ llm-cmd ]; + ++ lib.optionals enable-llm-cmd [ llm-cmd ] + ++ lib.optionals enable-llm-gemini [ llm-gemini ]; }) ) diff --git a/pkgs/development/python-modules/llm-gemini/default.nix b/pkgs/development/python-modules/llm-gemini/default.nix index 0d0c33a4c446..7fa90627c6b7 100644 --- a/pkgs/development/python-modules/llm-gemini/default.nix +++ b/pkgs/development/python-modules/llm-gemini/default.nix @@ -27,10 +27,10 @@ buildPythonPackage rec { build-system = [ setuptools + llm ]; dependencies = [ - llm httpx ijson ]; From 85868f71a08ae0a2e29f7c121179dbdbef754cce Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 17:13:00 -0700 Subject: [PATCH 05/55] llm: add enable-llm-gguf override --- pkgs/by-name/ll/llm/package.nix | 5 ++++- pkgs/development/python-modules/llm-gguf/default.nix | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 449547b3c152..b9d2b60e6370 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -4,6 +4,7 @@ enable-llm-anthropic ? false, enable-llm-cmd ? false, enable-llm-gemini ? false, + enable-llm-gguf ? false, }: let @@ -13,6 +14,7 @@ let llm-anthropic llm-cmd llm-gemini + llm-gguf ; in @@ -22,6 +24,7 @@ toPythonApplication ( (finalAttrs.propagatedBuildInputs or [ ]) ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] ++ lib.optionals enable-llm-cmd [ llm-cmd ] - ++ lib.optionals enable-llm-gemini [ llm-gemini ]; + ++ lib.optionals enable-llm-gemini [ llm-gemini ] + ++ lib.optionals enable-llm-gguf [ llm-gguf ]; }) ) diff --git a/pkgs/development/python-modules/llm-gguf/default.nix b/pkgs/development/python-modules/llm-gguf/default.nix index 76a01159b2b8..386c0c11b392 100644 --- a/pkgs/development/python-modules/llm-gguf/default.nix +++ b/pkgs/development/python-modules/llm-gguf/default.nix @@ -27,12 +27,12 @@ buildPythonPackage rec { build-system = [ setuptools + llm ]; dependencies = [ httpx llama-cpp-python - llm ]; pythonImportsCheck = [ "llm_gguf" ]; From cf62949f31624f22dfa8ed76a8fc370358d3e0fb Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 7 May 2025 17:19:55 -0700 Subject: [PATCH 06/55] llm: add enable-llm-jq override --- pkgs/by-name/ll/llm/package.nix | 5 ++++- pkgs/development/python-modules/llm-jq/default.nix | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index b9d2b60e6370..0118f0764182 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -5,6 +5,7 @@ enable-llm-cmd ? false, enable-llm-gemini ? false, enable-llm-gguf ? false, + enable-llm-jq ? false, }: let @@ -15,6 +16,7 @@ let llm-cmd llm-gemini llm-gguf + llm-jq ; in @@ -25,6 +27,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] ++ lib.optionals enable-llm-cmd [ llm-cmd ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] - ++ lib.optionals enable-llm-gguf [ llm-gguf ]; + ++ lib.optionals enable-llm-gguf [ llm-gguf ] + ++ lib.optionals enable-llm-jq [ llm-jq ]; }) ) diff --git a/pkgs/development/python-modules/llm-jq/default.nix b/pkgs/development/python-modules/llm-jq/default.nix index 14ab4046712e..dab2b6727c9e 100644 --- a/pkgs/development/python-modules/llm-jq/default.nix +++ b/pkgs/development/python-modules/llm-jq/default.nix @@ -21,12 +21,11 @@ buildPythonPackage rec { build-system = [ setuptools - ]; - - dependencies = [ llm ]; + dependencies = [ ]; + pythonImportsCheck = [ "llm_jq" ]; passthru.tests = { From 96bde7a7d37aa6809ad20c7a1378ea02901b95ff Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 08:54:02 -0700 Subject: [PATCH 07/55] llm: add enable-llm-ollama override --- pkgs/by-name/ll/llm/package.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 0118f0764182..1da85212037c 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -6,6 +6,7 @@ enable-llm-gemini ? false, enable-llm-gguf ? false, enable-llm-jq ? false, + enable-llm-ollama ? false, }: let @@ -17,6 +18,7 @@ let llm-gemini llm-gguf llm-jq + llm-ollama ; in @@ -28,6 +30,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-cmd [ llm-cmd ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] - ++ lib.optionals enable-llm-jq [ llm-jq ]; + ++ lib.optionals enable-llm-jq [ llm-jq ] + ++ lib.optionals enable-llm-ollama [ llm-ollama ]; }) ) From c48e583dd99b50446138ff72f8cbed7e8903a966 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 08:58:19 -0700 Subject: [PATCH 08/55] llm: add enable-llm-openai-plugin override --- pkgs/by-name/ll/llm/package.nix | 5 ++++- .../development/python-modules/llm-openai-plugin/default.nix | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 1da85212037c..f3d5fce75228 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -7,6 +7,7 @@ enable-llm-gguf ? false, enable-llm-jq ? false, enable-llm-ollama ? false, + enable-llm-openai-plugin ? false, }: let @@ -19,6 +20,7 @@ let llm-gguf llm-jq llm-ollama + llm-openai-plugin ; in @@ -31,6 +33,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-jq [ llm-jq ] - ++ lib.optionals enable-llm-ollama [ llm-ollama ]; + ++ lib.optionals enable-llm-ollama [ llm-ollama ] + ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ]; }) ) diff --git a/pkgs/development/python-modules/llm-openai-plugin/default.nix b/pkgs/development/python-modules/llm-openai-plugin/default.nix index 76f13696a877..d978142bd1c7 100644 --- a/pkgs/development/python-modules/llm-openai-plugin/default.nix +++ b/pkgs/development/python-modules/llm-openai-plugin/default.nix @@ -27,10 +27,10 @@ buildPythonPackage rec { build-system = [ setuptools + llm ]; dependencies = [ - llm openai ]; From 31c73863a7187894251f4ba2a724bf5d4a114565 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 09:47:08 -0700 Subject: [PATCH 09/55] python3Packages.llm-mistral: init at 0.12 --- pkgs/by-name/ll/llm/package.nix | 3 + .../python-modules/llm-mistral/default.nix | 58 +++++++++++++++++++ .../llm-mistral/tests/llm-plugin.nix | 22 +++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 85 insertions(+) create mode 100644 pkgs/development/python-modules/llm-mistral/default.nix create mode 100644 pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index f3d5fce75228..ec00b824c335 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -6,6 +6,7 @@ enable-llm-gemini ? false, enable-llm-gguf ? false, enable-llm-jq ? false, + enable-llm-mistral ? false, enable-llm-ollama ? false, enable-llm-openai-plugin ? false, }: @@ -19,6 +20,7 @@ let llm-gemini llm-gguf llm-jq + llm-mistral llm-ollama llm-openai-plugin ; @@ -33,6 +35,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-jq [ llm-jq ] + ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ]; }) diff --git a/pkgs/development/python-modules/llm-mistral/default.nix b/pkgs/development/python-modules/llm-mistral/default.nix new file mode 100644 index 000000000000..25af109cc023 --- /dev/null +++ b/pkgs/development/python-modules/llm-mistral/default.nix @@ -0,0 +1,58 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + httpx, + httpx-sse, + llm, + pytestCheckHook, + pytest-asyncio, + pytest-httpx, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-mistral"; + version = "0.12"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-mistral"; + tag = version; + hash = "sha256-oNA5NFI4BZMG/V+eSHfuF/JKBX2Xr/L8EK+mf7KjPD0="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ + httpx + httpx-sse + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-asyncio + pytest-httpx + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_mistral" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin providing access to Mistral models using the Mistral API"; + homepage = "https://github.com/simonw/llm-mistral"; + changelog = "https://github.com/simonw/llm-mistral/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix new file mode 100644 index 000000000000..23077de3b85e --- /dev/null +++ b/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-mistral + ]); +in +runCommand "llm-mistral-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-mistral")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c4c9004ae04d..16103e129f42 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8304,6 +8304,8 @@ self: super: with self; { llm-jq = callPackage ../development/python-modules/llm-jq { }; + llm-mistral = callPackage ../development/python-modules/llm-mistral { }; + llm-ollama = callPackage ../development/python-modules/llm-ollama { }; llm-openai-plugin = callPackage ../development/python-modules/llm-openai-plugin { }; From 12bcd7aa10ed3475f8bde0ffb72e05969e2c7937 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 10:02:32 -0700 Subject: [PATCH 10/55] python3Packages.llm-command-r: init at 0.3.1 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../python-modules/llm-command-r/default.nix | 52 +++++++++++++++++++ .../llm-command-r/tests/llm-plugin.nix | 22 ++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 79 insertions(+) create mode 100644 pkgs/development/python-modules/llm-command-r/default.nix create mode 100644 pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index ec00b824c335..42c2b14ede81 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -3,6 +3,7 @@ python3Packages, enable-llm-anthropic ? false, enable-llm-cmd ? false, + enable-llm-command-r ? false, enable-llm-gemini ? false, enable-llm-gguf ? false, enable-llm-jq ? false, @@ -17,6 +18,7 @@ let llm llm-anthropic llm-cmd + llm-command-r llm-gemini llm-gguf llm-jq @@ -32,6 +34,7 @@ toPythonApplication ( (finalAttrs.propagatedBuildInputs or [ ]) ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] ++ lib.optionals enable-llm-cmd [ llm-cmd ] + ++ lib.optionals enable-llm-cmd [ llm-command-r ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-jq [ llm-jq ] diff --git a/pkgs/development/python-modules/llm-command-r/default.nix b/pkgs/development/python-modules/llm-command-r/default.nix new file mode 100644 index 000000000000..c6d894cfc39b --- /dev/null +++ b/pkgs/development/python-modules/llm-command-r/default.nix @@ -0,0 +1,52 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + cohere, + pytestCheckHook, + pytest-recording, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-command-r"; + version = "0.3.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-command-r"; + tag = version; + hash = "sha256-PxICRds9NJQP64HwoL7Oxd39yaIrMdAyQEbhaumJCgo="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ cohere ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-recording + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_command_r" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "Access the Cohere Command R family of models"; + homepage = "https://github.com/simonw/llm-command-r"; + changelog = "https://github.com/simonw/llm-command-r/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix new file mode 100644 index 000000000000..a57802a8ad08 --- /dev/null +++ b/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-anthropic + ]); +in +runCommand "llm-anthropic-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-anthropic")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 16103e129f42..6249fa645fd5 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8298,6 +8298,8 @@ self: super: with self; { llm-cmd = callPackage ../development/python-modules/llm-cmd { }; + llm-command-r = callPackage ../development/python-modules/llm-command-r { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From 41ca780911b4422bd2b41518fc8815d09a4ee58c Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 12:08:19 -0700 Subject: [PATCH 11/55] python3Packages.llm-grok: init at 1.0.1 --- pkgs/by-name/ll/llm/package.nix | 3 + .../python-modules/llm-grok/default.nix | 58 +++++++++++++++++++ .../llm-grok/tests/llm-plugin.nix | 22 +++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 85 insertions(+) create mode 100644 pkgs/development/python-modules/llm-grok/default.nix create mode 100644 pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 42c2b14ede81..dd44a626b350 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -5,6 +5,7 @@ enable-llm-cmd ? false, enable-llm-command-r ? false, enable-llm-gemini ? false, + enable-llm-grok ? false, enable-llm-gguf ? false, enable-llm-jq ? false, enable-llm-mistral ? false, @@ -21,6 +22,7 @@ let llm-command-r llm-gemini llm-gguf + llm-grok llm-jq llm-mistral llm-ollama @@ -37,6 +39,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-cmd [ llm-command-r ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] + ++ lib.optionals enable-llm-grok [ llm-grok ] ++ lib.optionals enable-llm-jq [ llm-jq ] ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] diff --git a/pkgs/development/python-modules/llm-grok/default.nix b/pkgs/development/python-modules/llm-grok/default.nix new file mode 100644 index 000000000000..f326866798a0 --- /dev/null +++ b/pkgs/development/python-modules/llm-grok/default.nix @@ -0,0 +1,58 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + httpx, + httpx-sse, + rich, + pytestCheckHook, + pytest-httpx, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-grok"; + version = "1.0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "Hiepler"; + repo = "llm-grok"; + tag = "v${version}"; + hash = "sha256-OeeU/53XKucLCtGvnl5RWc/QqF0TprB/SO8pnnK5fdw="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ + httpx + httpx-sse + rich + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-httpx + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_grok" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin providing access to Grok models using the xAI API"; + homepage = "https://github.com/Hiepler/llm-grok"; + changelog = "https://github.com/Hiepler/llm-grok/releases/tag/${src.tag}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix new file mode 100644 index 000000000000..5ea012b0de7f --- /dev/null +++ b/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-grok + ]); +in +runCommand "llm-grok-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-grok")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6249fa645fd5..c60ff6aa2173 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8304,6 +8304,8 @@ self: super: with self; { llm-gguf = callPackage ../development/python-modules/llm-gguf { }; + llm-grok = callPackage ../development/python-modules/llm-grok { }; + llm-jq = callPackage ../development/python-modules/llm-jq { }; llm-mistral = callPackage ../development/python-modules/llm-mistral { }; From 97b709d4da41e48ce5772e2ef741fb2682c58135 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 12:17:08 -0700 Subject: [PATCH 12/55] python3Packages.llm-groq: init at 0.8 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../python-modules/llm-groq/default.nix | 43 +++++++++++++++++++ .../llm-groq/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 70 insertions(+) create mode 100644 pkgs/development/python-modules/llm-groq/default.nix create mode 100644 pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index dd44a626b350..6eb16f997dfc 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -6,6 +6,7 @@ enable-llm-command-r ? false, enable-llm-gemini ? false, enable-llm-grok ? false, + enable-llm-groq ? false, enable-llm-gguf ? false, enable-llm-jq ? false, enable-llm-mistral ? false, @@ -23,6 +24,7 @@ let llm-gemini llm-gguf llm-grok + llm-groq llm-jq llm-mistral llm-ollama @@ -40,6 +42,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-grok [ llm-grok ] + ++ lib.optionals enable-llm-groq [ llm-groq ] ++ lib.optionals enable-llm-jq [ llm-jq ] ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] diff --git a/pkgs/development/python-modules/llm-groq/default.nix b/pkgs/development/python-modules/llm-groq/default.nix new file mode 100644 index 000000000000..a3f02f2e0b8a --- /dev/null +++ b/pkgs/development/python-modules/llm-groq/default.nix @@ -0,0 +1,43 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + groq, +}: + +buildPythonPackage rec { + pname = "llm-groq"; + version = "0.8"; + pyproject = true; + + src = fetchFromGitHub { + owner = "angerman"; + repo = "llm-groq"; + tag = "v${version}"; + hash = "sha256-sZ5d9w43NvypaPrebwZ5BLgRaCHAhd7gBU6uHEdUaF4="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ groq ]; + + pythonImportsCheck = [ "llm_groq" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin providing access to Groqcloud models."; + homepage = "https://github.com/angerman/llm-groq"; + changelog = "https://github.com/angerman/llm-groq/releases/tag/${src.tag}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix new file mode 100644 index 000000000000..5d0ce63e91db --- /dev/null +++ b/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-groq + ]); +in +runCommand "llm-groq-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-groq")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c60ff6aa2173..d55248fa3536 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8306,6 +8306,8 @@ self: super: with self; { llm-grok = callPackage ../development/python-modules/llm-grok { }; + llm-groq = callPackage ../development/python-modules/llm-groq { }; + llm-jq = callPackage ../development/python-modules/llm-jq { }; llm-mistral = callPackage ../development/python-modules/llm-mistral { }; From 31d4b6f6cd1f5d8434b7b70fc6054ac146e04687 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 13:29:24 -0700 Subject: [PATCH 13/55] python3Packages.llm-openrouter: init at 0.4.1 --- pkgs/by-name/ll/llm/package.nix | 5 +- .../python-modules/llm-openrouter/default.nix | 58 +++++++++++++++++++ .../llm-openrouter/tests/llm-plugin.nix | 22 +++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/python-modules/llm-openrouter/default.nix create mode 100644 pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 6eb16f997dfc..19fb8dbf934c 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -12,6 +12,7 @@ enable-llm-mistral ? false, enable-llm-ollama ? false, enable-llm-openai-plugin ? false, + enable-llm-openrouter ? false, }: let @@ -29,6 +30,7 @@ let llm-mistral llm-ollama llm-openai-plugin + llm-openrouter ; in @@ -46,6 +48,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-jq [ llm-jq ] ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] - ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ]; + ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] + ++ lib.optionals enable-llm-openrouter [ llm-openrouter ]; }) ) diff --git a/pkgs/development/python-modules/llm-openrouter/default.nix b/pkgs/development/python-modules/llm-openrouter/default.nix new file mode 100644 index 000000000000..bb6913547872 --- /dev/null +++ b/pkgs/development/python-modules/llm-openrouter/default.nix @@ -0,0 +1,58 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + httpx, + openai, + pytestCheckHook, + inline-snapshot, + pytest-recording, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "openrouter"; + version = "0.4.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-openrouter"; + tag = version; + hash = "sha256-ojBkyXqEaqTcOv7mzTWL5Ihhb50zeVzeQZNA6DySuVg="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ + httpx + openai + ]; + + nativeCheckInputs = [ + pytestCheckHook + inline-snapshot + pytest-recording + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_openrouter" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin for models hosted by OpenRouter"; + homepage = "https://github.com/simonw/llm-openrouter"; + changelog = "https://github.com/simonw/llm-openrouter/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix new file mode 100644 index 000000000000..30e9fc6d5511 --- /dev/null +++ b/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-openrouter + ]); +in +runCommand "llm-openrouter-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-openrouter")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d55248fa3536..de9cd0b6d90e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8316,6 +8316,8 @@ self: super: with self; { llm-openai-plugin = callPackage ../development/python-modules/llm-openai-plugin { }; + llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llmx = callPackage ../development/python-modules/llmx { }; llvmlite = callPackage ../development/python-modules/llvmlite { From d8b57ca3c280de1098e2165ea6beb48213675a5d Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 13:44:23 -0700 Subject: [PATCH 14/55] python3Packages.llm-deepseek: init at 0.1.6 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../python-modules/llm-deepseek/default.nix | 43 +++++++++++++++++++ .../llm-deepseek/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 70 insertions(+) create mode 100644 pkgs/development/python-modules/llm-deepseek/default.nix create mode 100644 pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 19fb8dbf934c..5010ccf21837 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -4,6 +4,7 @@ enable-llm-anthropic ? false, enable-llm-cmd ? false, enable-llm-command-r ? false, + enable-llm-deepseek ? false, enable-llm-gemini ? false, enable-llm-grok ? false, enable-llm-groq ? false, @@ -22,6 +23,7 @@ let llm-anthropic llm-cmd llm-command-r + llm-deepseek llm-gemini llm-gguf llm-grok @@ -41,6 +43,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] ++ lib.optionals enable-llm-cmd [ llm-cmd ] ++ lib.optionals enable-llm-cmd [ llm-command-r ] + ++ lib.optionals enable-llm-deepseek [ llm-deepseek ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-grok [ llm-grok ] diff --git a/pkgs/development/python-modules/llm-deepseek/default.nix b/pkgs/development/python-modules/llm-deepseek/default.nix new file mode 100644 index 000000000000..a7a5333c682a --- /dev/null +++ b/pkgs/development/python-modules/llm-deepseek/default.nix @@ -0,0 +1,43 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + groq, +}: + +buildPythonPackage rec { + pname = "llm-deepseek"; + version = "0.1.6"; + pyproject = true; + + src = fetchFromGitHub { + owner = "abrasumente233"; + repo = "llm-deepseek"; + tag = version; + hash = "sha256-yrNvIGnU9Q/0H786DsM0wGEwfxZYIk8IXhqC4mWaQAA="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ ]; + + pythonImportsCheck = [ "llm_deepseek" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin providing access to Deepseek models."; + homepage = "https://github.com/abrasumente233/llm-deepseek"; + changelog = "https://github.com/abrasumente233/llm-deepseek/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix new file mode 100644 index 000000000000..f7a9ac60837c --- /dev/null +++ b/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-deepseek + ]); +in +runCommand "llm-deepseek-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-deepseek")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index de9cd0b6d90e..19405f0d393f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8300,6 +8300,8 @@ self: super: with self; { llm-command-r = callPackage ../development/python-modules/llm-command-r { }; + llm-deepseek = callPackage ../development/python-modules/llm-deepseek { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From b271e2cad2323d7b777a17eb8efdf77401f5122f Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 13:52:49 -0700 Subject: [PATCH 15/55] python3Packages.llm-venice: init at 0.6.0 --- pkgs/by-name/ll/llm/package.nix | 5 ++- .../python-modules/llm-venice/default.nix | 45 +++++++++++++++++++ .../llm-venice/tests/llm-plugin.nix | 22 +++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/python-modules/llm-venice/default.nix create mode 100644 pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 5010ccf21837..1e918f81356d 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -14,6 +14,7 @@ enable-llm-ollama ? false, enable-llm-openai-plugin ? false, enable-llm-openrouter ? false, + enable-llm-venice ? false, }: let @@ -33,6 +34,7 @@ let llm-ollama llm-openai-plugin llm-openrouter + llm-venice ; in @@ -52,6 +54,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] - ++ lib.optionals enable-llm-openrouter [ llm-openrouter ]; + ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] + ++ lib.optionals enable-llm-venice [ llm-venice ]; }) ) diff --git a/pkgs/development/python-modules/llm-venice/default.nix b/pkgs/development/python-modules/llm-venice/default.nix new file mode 100644 index 000000000000..a7e4ad7264ac --- /dev/null +++ b/pkgs/development/python-modules/llm-venice/default.nix @@ -0,0 +1,45 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-venice"; + version = "0.6.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "ar-jan"; + repo = "llm-venice"; + tag = version; + hash = "sha256-fHCAERIFhuovo1f+jTG6L4C/Rql8tdHZG/7p5fBLkH0="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ ]; + + # Reaches out to the real API + doCheck = false; + + pythonImportsCheck = [ "llm_venice" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin to access models available via the Venice API"; + homepage = "https://github.com/ar-jan/llm-venice"; + changelog = "https://github.com/ar-jan/llm-venice/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix new file mode 100644 index 000000000000..5648d9a45703 --- /dev/null +++ b/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-venice + ]); +in +runCommand "llm-venice-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-venice")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 19405f0d393f..06d1b4c68179 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8320,6 +8320,8 @@ self: super: with self; { llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llm-venice = callPackage ../development/python-modules/llm-venice { }; + llmx = callPackage ../development/python-modules/llmx { }; llvmlite = callPackage ../development/python-modules/llvmlite { From 9c246b23edbfe8eafcab3d05fcd08584e5d5b3f4 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:11:12 -0700 Subject: [PATCH 16/55] python3Packages.llm-video-frames: init at 0.1 --- pkgs/by-name/ll/llm/package.nix | 5 ++- .../llm-video-frames/default.nix | 41 +++++++++++++++++++ .../llm-video-frames/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/python-modules/llm-video-frames/default.nix create mode 100644 pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 1e918f81356d..03e745890117 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -15,6 +15,7 @@ enable-llm-openai-plugin ? false, enable-llm-openrouter ? false, enable-llm-venice ? false, + enable-llm-video-frames ? false, }: let @@ -35,6 +36,7 @@ let llm-openai-plugin llm-openrouter llm-venice + llm-video-frames ; in @@ -55,6 +57,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] - ++ lib.optionals enable-llm-venice [ llm-venice ]; + ++ lib.optionals enable-llm-venice [ llm-venice ] + ++ lib.optionals enable-llm-video-frames [ llm-video-frames ]; }) ) diff --git a/pkgs/development/python-modules/llm-video-frames/default.nix b/pkgs/development/python-modules/llm-video-frames/default.nix new file mode 100644 index 000000000000..5572eaad4ab6 --- /dev/null +++ b/pkgs/development/python-modules/llm-video-frames/default.nix @@ -0,0 +1,41 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-video-frames"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-video-frames"; + tag = version; + hash = "sha256-brTyBymoFuvSQzsD/4aWzFGCrh3yEmWbpsUNGKT9dcU="; + }; + + build-system = [ + setuptools + llm + ]; + dependencies = [ ]; + + pythonImportsCheck = [ "llm_video_frames" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin to turn a video into individual frames"; + homepage = "https://github.com/simonw/llm-video-frames"; + changelog = "https://github.com/simonw/llm-video-frames/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix new file mode 100644 index 000000000000..0d72352fe75d --- /dev/null +++ b/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-video-frames + ]); +in +runCommand "llm-video-frames-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-video-frames")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 06d1b4c68179..3934fc840e47 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8322,6 +8322,8 @@ self: super: with self; { llm-venice = callPackage ../development/python-modules/llm-venice { }; + llm-video-frames = callPackage ../development/python-modules/llm-video-frames { }; + llmx = callPackage ../development/python-modules/llmx { }; llvmlite = callPackage ../development/python-modules/llvmlite { From d5a30a5a482e8ffcfb7ed58045c293ca8d6fb37b Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:23:48 -0700 Subject: [PATCH 17/55] python3Packages.llm-templates-github: init at 0.1 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../llm-templates-github/default.nix | 41 +++++++++++++++++++ .../llm-templates-github/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 68 insertions(+) create mode 100644 pkgs/development/python-modules/llm-templates-github/default.nix create mode 100644 pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 03e745890117..1038d798f2b3 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -14,6 +14,7 @@ enable-llm-ollama ? false, enable-llm-openai-plugin ? false, enable-llm-openrouter ? false, + enable-llm-templates-github ? false, enable-llm-venice ? false, enable-llm-video-frames ? false, }: @@ -35,6 +36,7 @@ let llm-ollama llm-openai-plugin llm-openrouter + llm-templates-github llm-venice llm-video-frames ; @@ -57,6 +59,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] + ++ lib.optionals enable-llm-templates-github [ llm-templates-github ] ++ lib.optionals enable-llm-venice [ llm-venice ] ++ lib.optionals enable-llm-video-frames [ llm-video-frames ]; }) diff --git a/pkgs/development/python-modules/llm-templates-github/default.nix b/pkgs/development/python-modules/llm-templates-github/default.nix new file mode 100644 index 000000000000..f5e7d66b0f01 --- /dev/null +++ b/pkgs/development/python-modules/llm-templates-github/default.nix @@ -0,0 +1,41 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-templates-github"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-templates-github"; + tag = version; + hash = "sha256-SFXrvpKrvfIP0JmXQt6OZ52kne4AEtiggbshyac9XQc="; + }; + + build-system = [ + setuptools + llm + ]; + dependencies = [ ]; + + pythonImportsCheck = [ "llm_templates_github" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "Load LLM templates from GitHub repositories"; + homepage = "https://github.com/simonw/llm-templates-github"; + changelog = "https://github.com/simonw/llm-templates-github/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix new file mode 100644 index 000000000000..a9569f069638 --- /dev/null +++ b/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-templates-github + ]); +in +runCommand "llm-templates-github-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-templates-github")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3934fc840e47..b4b89e9cb297 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8320,6 +8320,8 @@ self: super: with self; { llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llm-templates-github = callPackage ../development/python-modules/llm-templates-github { }; + llm-venice = callPackage ../development/python-modules/llm-venice { }; llm-video-frames = callPackage ../development/python-modules/llm-video-frames { }; From 56df419440c70d8af8ec2a1349d8bf509b0690ff Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:27:46 -0700 Subject: [PATCH 18/55] python3Packages.llm-templates-fabric: init at 0.2 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../llm-templates-fabric/default.nix | 41 +++++++++++++++++++ .../llm-templates-fabric/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 68 insertions(+) create mode 100644 pkgs/development/python-modules/llm-templates-fabric/default.nix create mode 100644 pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 1038d798f2b3..dadb591f64c5 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -14,6 +14,7 @@ enable-llm-ollama ? false, enable-llm-openai-plugin ? false, enable-llm-openrouter ? false, + enable-llm-templates-fabric ? false, enable-llm-templates-github ? false, enable-llm-venice ? false, enable-llm-video-frames ? false, @@ -36,6 +37,7 @@ let llm-ollama llm-openai-plugin llm-openrouter + llm-templates-fabric llm-templates-github llm-venice llm-video-frames @@ -59,6 +61,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] + ++ lib.optionals enable-llm-templates-fabric [ llm-templates-fabric ] ++ lib.optionals enable-llm-templates-github [ llm-templates-github ] ++ lib.optionals enable-llm-venice [ llm-venice ] ++ lib.optionals enable-llm-video-frames [ llm-video-frames ]; diff --git a/pkgs/development/python-modules/llm-templates-fabric/default.nix b/pkgs/development/python-modules/llm-templates-fabric/default.nix new file mode 100644 index 000000000000..0bbc11af790a --- /dev/null +++ b/pkgs/development/python-modules/llm-templates-fabric/default.nix @@ -0,0 +1,41 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-templates-fabric"; + version = "0.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-templates-fabric"; + tag = version; + hash = "sha256-tfkSjeT9WstUsNCtVr3fMzqELFCtfYphqf3xFGvHaV0="; + }; + + build-system = [ + setuptools + llm + ]; + dependencies = [ ]; + + pythonImportsCheck = [ "llm_templates_fabric" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "Load LLM templates from Fabric"; + homepage = "https://github.com/simonw/llm-templates-fabric"; + changelog = "https://github.com/simonw/llm-templates-fabric/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix new file mode 100644 index 000000000000..b00bdfbcaa9e --- /dev/null +++ b/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-templates-fabric + ]); +in +runCommand "llm-templates-fabric-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-templates-fabric")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index b4b89e9cb297..defa383199f3 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8320,6 +8320,8 @@ self: super: with self; { llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llm-templates-fabric = callPackage ../development/python-modules/llm-templates-fabric { }; + llm-templates-github = callPackage ../development/python-modules/llm-templates-github { }; llm-venice = callPackage ../development/python-modules/llm-venice { }; From b0f2c846c9a7790b722901459abd8acb537b6185 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:33:03 -0700 Subject: [PATCH 19/55] python3Packages.llm-hacker-news: init at 0.1.1 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../llm-hacker-news/default.nix | 41 +++++++++++++++++++ .../llm-hacker-news/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 68 insertions(+) create mode 100644 pkgs/development/python-modules/llm-hacker-news/default.nix create mode 100644 pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index dadb591f64c5..82af6c90a114 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -9,6 +9,7 @@ enable-llm-grok ? false, enable-llm-groq ? false, enable-llm-gguf ? false, + enable-llm-hacker-news ? false, enable-llm-jq ? false, enable-llm-mistral ? false, enable-llm-ollama ? false, @@ -32,6 +33,7 @@ let llm-gguf llm-grok llm-groq + llm-hacker-news llm-jq llm-mistral llm-ollama @@ -56,6 +58,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-grok [ llm-grok ] ++ lib.optionals enable-llm-groq [ llm-groq ] + ++ lib.optionals enable-llm-hacker-news [ llm-hacker-news ] ++ lib.optionals enable-llm-jq [ llm-jq ] ++ lib.optionals enable-llm-mistral [ llm-mistral ] ++ lib.optionals enable-llm-ollama [ llm-ollama ] diff --git a/pkgs/development/python-modules/llm-hacker-news/default.nix b/pkgs/development/python-modules/llm-hacker-news/default.nix new file mode 100644 index 000000000000..86e390b73303 --- /dev/null +++ b/pkgs/development/python-modules/llm-hacker-news/default.nix @@ -0,0 +1,41 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-hacker-news"; + version = "0.1.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-hacker-news"; + tag = version; + hash = "sha256-pywx9TAN/mnGR6Vv6YsPhLO4R5Geagw/bcydQjvTH5s="; + }; + + build-system = [ + setuptools + llm + ]; + dependencies = [ ]; + + pythonImportsCheck = [ "llm_hacker_news" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin for pulling content from Hacker News"; + homepage = "https://github.com/simonw/llm-hacker-news"; + changelog = "https://github.com/simonw/llm-hacker-news/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix new file mode 100644 index 000000000000..85311225866a --- /dev/null +++ b/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-hacker-news + ]); +in +runCommand "llm-hacker-news-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-hacker-news")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index defa383199f3..cef6c0f043c6 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8310,6 +8310,8 @@ self: super: with self; { llm-groq = callPackage ../development/python-modules/llm-groq { }; + llm-hacker-news = callPackage ../development/python-modules/llm-hacker-news { }; + llm-jq = callPackage ../development/python-modules/llm-jq { }; llm-mistral = callPackage ../development/python-modules/llm-mistral { }; From 68ec32a1bb776d0fbc08556c769785c57326ba53 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:41:14 -0700 Subject: [PATCH 20/55] python3Packages.llm-fragments-github: init at 0.3 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../llm-fragments-github/default.nix | 41 +++++++++++++++++++ .../llm-fragments-github/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 68 insertions(+) create mode 100644 pkgs/development/python-modules/llm-fragments-github/default.nix create mode 100644 pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 82af6c90a114..4e67480d7d64 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -5,6 +5,7 @@ enable-llm-cmd ? false, enable-llm-command-r ? false, enable-llm-deepseek ? false, + enable-llm-fragments-github ? false, enable-llm-gemini ? false, enable-llm-grok ? false, enable-llm-groq ? false, @@ -29,6 +30,7 @@ let llm-cmd llm-command-r llm-deepseek + llm-fragments-github llm-gemini llm-gguf llm-grok @@ -54,6 +56,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-cmd [ llm-cmd ] ++ lib.optionals enable-llm-cmd [ llm-command-r ] ++ lib.optionals enable-llm-deepseek [ llm-deepseek ] + ++ lib.optionals enable-llm-fragments-github [ llm-fragments-github ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-grok [ llm-grok ] diff --git a/pkgs/development/python-modules/llm-fragments-github/default.nix b/pkgs/development/python-modules/llm-fragments-github/default.nix new file mode 100644 index 000000000000..67af612c7a55 --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-github/default.nix @@ -0,0 +1,41 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, +}: + +buildPythonPackage rec { + pname = "llm-fragments-github"; + version = "0.3"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-fragments-github"; + tag = version; + hash = "sha256-+MNFj7auB/dUSIBDXOBaKjIYIW18GLDB55l66S37U1A="; + }; + + build-system = [ + setuptools + llm + ]; + dependencies = [ ]; + + pythonImportsCheck = [ "llm_fragments_github" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "Load GitHub repository contents as LLM fragments"; + homepage = "https://github.com/simonw/llm-fragments-github"; + changelog = "https://github.com/simonw/llm-fragments-github/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix new file mode 100644 index 000000000000..293494665727 --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-fragments-github + ]); +in +runCommand "llm-fragments-github-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-fragments-github")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index cef6c0f043c6..84c80e42193d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8302,6 +8302,8 @@ self: super: with self; { llm-deepseek = callPackage ../development/python-modules/llm-deepseek { }; + llm-fragments-github = callPackage ../development/python-modules/llm-fragments-github { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From c83f08dd2b33af7d09fb5492c842815e07a2e07e Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 14:50:54 -0700 Subject: [PATCH 21/55] python3Packages.llm-fragments-pypi: init at 0.1.1 --- pkgs/by-name/ll/llm/package.nix | 3 ++ .../llm-fragments-pypi/default.nix | 42 +++++++++++++++++++ .../llm-fragments-pypi/tests/llm-plugin.nix | 22 ++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 69 insertions(+) create mode 100644 pkgs/development/python-modules/llm-fragments-pypi/default.nix create mode 100644 pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 4e67480d7d64..6f57ce6bbda3 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -6,6 +6,7 @@ enable-llm-command-r ? false, enable-llm-deepseek ? false, enable-llm-fragments-github ? false, + enable-llm-fragments-pypi ? false, enable-llm-gemini ? false, enable-llm-grok ? false, enable-llm-groq ? false, @@ -31,6 +32,7 @@ let llm-command-r llm-deepseek llm-fragments-github + llm-fragments-pypi llm-gemini llm-gguf llm-grok @@ -57,6 +59,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-cmd [ llm-command-r ] ++ lib.optionals enable-llm-deepseek [ llm-deepseek ] ++ lib.optionals enable-llm-fragments-github [ llm-fragments-github ] + ++ lib.optionals enable-llm-fragments-pypi [ llm-fragments-pypi ] ++ lib.optionals enable-llm-gemini [ llm-gemini ] ++ lib.optionals enable-llm-gguf [ llm-gguf ] ++ lib.optionals enable-llm-grok [ llm-grok ] diff --git a/pkgs/development/python-modules/llm-fragments-pypi/default.nix b/pkgs/development/python-modules/llm-fragments-pypi/default.nix new file mode 100644 index 000000000000..8c7dc9f9168a --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-pypi/default.nix @@ -0,0 +1,42 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + hatchling, + llm, + httpx, +}: + +buildPythonPackage rec { + pname = "llm-fragments-pypi"; + version = "0.1.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "samueldg"; + repo = "llm-fragments-pypi"; + tag = version; + hash = "sha256-1XqAmuZ1WMHD6JbLbLsK9K4Uf3FvvKJD4mn1G2J/3C8="; + }; + + build-system = [ + hatchling + llm + ]; + dependencies = [ httpx ]; + + pythonImportsCheck = [ "llm_fragments_pypi" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM fragments plugin for PyPI packages metadata"; + homepage = "https://github.com/samueldg/llm-fragments-pypi"; + changelog = "https://github.com/samueldg/llm-fragments-pypi/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix new file mode 100644 index 000000000000..96329d01bf6b --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-fragments-pypi + ]); +in +runCommand "llm-fragments-pypi-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-fragments-pypi")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 84c80e42193d..f50ae4b7cd99 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8304,6 +8304,8 @@ self: super: with self; { llm-fragments-github = callPackage ../development/python-modules/llm-fragments-github { }; + llm-fragments-pypi = callPackage ../development/python-modules/llm-fragments-pypi { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From 5471027b2c9a4fd9c654fe76ff6beeeb1e168388 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 15:13:56 -0700 Subject: [PATCH 22/55] python3Packages.llm-sentence-transformers: init at 0.3.2 --- pkgs/by-name/ll/llm/package.nix | 3 + .../llm-sentence-transformers/default.nix | 60 +++++++++++++++++++ .../tests/llm-plugin.nix | 22 +++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 87 insertions(+) create mode 100644 pkgs/development/python-modules/llm-sentence-transformers/default.nix create mode 100644 pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index 6f57ce6bbda3..d98edfd4c9cb 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -17,6 +17,7 @@ enable-llm-ollama ? false, enable-llm-openai-plugin ? false, enable-llm-openrouter ? false, + enable-llm-sentence-transformers ? false, enable-llm-templates-fabric ? false, enable-llm-templates-github ? false, enable-llm-venice ? false, @@ -43,6 +44,7 @@ let llm-ollama llm-openai-plugin llm-openrouter + llm-sentence-transformers llm-templates-fabric llm-templates-github llm-venice @@ -70,6 +72,7 @@ toPythonApplication ( ++ lib.optionals enable-llm-ollama [ llm-ollama ] ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] + ++ lib.optionals enable-llm-sentence-transformers [ llm-sentence-transformers ] ++ lib.optionals enable-llm-templates-fabric [ llm-templates-fabric ] ++ lib.optionals enable-llm-templates-github [ llm-templates-github ] ++ lib.optionals enable-llm-venice [ llm-venice ] diff --git a/pkgs/development/python-modules/llm-sentence-transformers/default.nix b/pkgs/development/python-modules/llm-sentence-transformers/default.nix new file mode 100644 index 000000000000..6eec7d0d5b7b --- /dev/null +++ b/pkgs/development/python-modules/llm-sentence-transformers/default.nix @@ -0,0 +1,60 @@ +{ + lib, + callPackage, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + einops, + sentence-transformers, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-sentence-transformers"; + version = "0.3.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-sentence-transformers"; + tag = version; + hash = "sha256-FDDMItKFEYEptiL3EHKgKVxClqRU9RaM3uD3xP0F4OM="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ + einops + sentence-transformers + ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + # Disabled because they access the network + disabledTests = [ + "test_run_embedding" + "test_embed_multi_with_generator" + ]; + + pythonImportsCheck = [ "llm_sentence_transformers" ]; + + passthru.tests = { + llm-plugin = callPackage ./tests/llm-plugin.nix { }; + }; + + meta = { + description = "LLM plugin for embeddings using sentence-transformers"; + homepage = "https://github.com/simonw/llm-sentence-transformers"; + changelog = "https://github.com/simonw/llm-sentence-transformers/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix new file mode 100644 index 000000000000..5ccaea86b403 --- /dev/null +++ b/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix @@ -0,0 +1,22 @@ +{ + runCommand, + python, + yq, +}: +let + venv = python.withPackages (ps: [ + ps.llm + ps.llm-sentence-transformers + ]); +in +runCommand "llm-sentence-transformers-test-llm-plugin" + { + nativeBuildInputs = [ + venv + yq + ]; + } + '' + llm plugins | yq --exit-status 'any(.name == "llm-sentence-transformers")' + touch "$out" + '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f50ae4b7cd99..8bded0dc781f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8326,6 +8326,8 @@ self: super: with self; { llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llm-sentence-transformers = callPackage ../development/python-modules/llm-sentence-transformers { }; + llm-templates-fabric = callPackage ../development/python-modules/llm-templates-fabric { }; llm-templates-github = callPackage ../development/python-modules/llm-templates-github { }; From 794f8c04b063b49a49118800112e63d9e4d35327 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 8 May 2025 16:27:03 -0700 Subject: [PATCH 23/55] python3Packages.llm: introduce mkPluginTest and use it Since there's no fixpoint function support for `buildPythonPackage` yet, each of the llm modules imports itself for its tests. Works! --- .../python-modules/llm-anthropic/default.nix | 7 +++-- .../llm-anthropic/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-cmd/default.nix | 6 ++--- .../llm-cmd/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-command-r/default.nix | 6 ++--- .../llm-command-r/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-deepseek/default.nix | 7 ++--- .../llm-deepseek/tests/llm-plugin.nix | 22 --------------- .../llm-fragments-github/default.nix | 6 ++--- .../llm-fragments-github/tests/llm-plugin.nix | 22 --------------- .../llm-fragments-pypi/default.nix | 6 ++--- .../llm-fragments-pypi/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-gemini/default.nix | 6 ++--- .../llm-gemini/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-gguf/default.nix | 6 ++--- .../llm-gguf/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-grok/default.nix | 6 ++--- .../llm-grok/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-groq/default.nix | 6 ++--- .../llm-groq/tests/llm-plugin.nix | 22 --------------- .../llm-hacker-news/default.nix | 6 ++--- .../llm-hacker-news/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-jq/default.nix | 7 ++--- .../llm-jq/tests/llm-plugin.nix | 23 ---------------- .../python-modules/llm-mistral/default.nix | 6 ++--- .../llm-mistral/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-ollama/default.nix | 6 ++--- .../llm-ollama/tests/llm-plugin.nix | 24 ----------------- .../llm-openai-plugin/default.nix | 6 ++--- .../llm-openai-plugin/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-openrouter/default.nix | 8 +++--- .../llm-openrouter/tests/llm-plugin.nix | 22 --------------- .../llm-sentence-transformers/default.nix | 6 ++--- .../tests/llm-plugin.nix | 22 --------------- .../llm-templates-fabric/default.nix | 7 +++-- .../llm-templates-fabric/tests/llm-plugin.nix | 22 --------------- .../llm-templates-github/default.nix | 7 +++-- .../llm-templates-github/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm-venice/default.nix | 6 ++--- .../llm-venice/tests/llm-plugin.nix | 22 --------------- .../llm-video-frames/default.nix | 7 +++-- .../llm-video-frames/tests/llm-plugin.nix | 22 --------------- .../python-modules/llm/default.nix | 4 +++ .../python-modules/llm/mk-plugin-test.nix | 27 +++++++++++++++++++ 44 files changed, 78 insertions(+), 552 deletions(-) delete mode 100644 pkgs/development/python-modules/llm-anthropic/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-cmd/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-gemini/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-gguf/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-jq/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-ollama/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-openai-plugin/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix delete mode 100644 pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix create mode 100644 pkgs/development/python-modules/llm/mk-plugin-test.nix diff --git a/pkgs/development/python-modules/llm-anthropic/default.nix b/pkgs/development/python-modules/llm-anthropic/default.nix index a7377833ff54..6418ddc8c2cf 100644 --- a/pkgs/development/python-modules/llm-anthropic/default.nix +++ b/pkgs/development/python-modules/llm-anthropic/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-anthropic, anthropic, pytestCheckHook, pytest-asyncio, @@ -28,6 +28,7 @@ buildPythonPackage rec { setuptools llm ]; + dependencies = [ anthropic ]; nativeCheckInputs = [ @@ -39,9 +40,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_anthropic" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-anthropic; meta = { description = "LLM access to models by Anthropic, including the Claude series"; diff --git a/pkgs/development/python-modules/llm-anthropic/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-anthropic/tests/llm-plugin.nix deleted file mode 100644 index a57802a8ad08..000000000000 --- a/pkgs/development/python-modules/llm-anthropic/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-anthropic - ]); -in -runCommand "llm-anthropic-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-anthropic")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-cmd/default.nix b/pkgs/development/python-modules/llm-cmd/default.nix index 9fca11cad544..e883cb87ecbc 100644 --- a/pkgs/development/python-modules/llm-cmd/default.nix +++ b/pkgs/development/python-modules/llm-cmd/default.nix @@ -1,6 +1,5 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, # build-system @@ -11,6 +10,7 @@ pygments, # tests pytestCheckHook, + llm-cmd, }: buildPythonPackage rec { @@ -46,9 +46,7 @@ buildPythonPackage rec { "llm_cmd" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-cmd; meta = { description = "Use LLM to generate and execute commands in your shell"; diff --git a/pkgs/development/python-modules/llm-cmd/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-cmd/tests/llm-plugin.nix deleted file mode 100644 index 1707195abbc7..000000000000 --- a/pkgs/development/python-modules/llm-cmd/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-cmd - ]); -in -runCommand "llm-cmd-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-cmd")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-command-r/default.nix b/pkgs/development/python-modules/llm-command-r/default.nix index c6d894cfc39b..af96a7e8d057 100644 --- a/pkgs/development/python-modules/llm-command-r/default.nix +++ b/pkgs/development/python-modules/llm-command-r/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-command-r, cohere, pytestCheckHook, pytest-recording, @@ -38,9 +38,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_command_r" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-command-r; meta = { description = "Access the Cohere Command R family of models"; diff --git a/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix deleted file mode 100644 index a57802a8ad08..000000000000 --- a/pkgs/development/python-modules/llm-command-r/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-anthropic - ]); -in -runCommand "llm-anthropic-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-anthropic")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-deepseek/default.nix b/pkgs/development/python-modules/llm-deepseek/default.nix index a7a5333c682a..8ff63bd96064 100644 --- a/pkgs/development/python-modules/llm-deepseek/default.nix +++ b/pkgs/development/python-modules/llm-deepseek/default.nix @@ -1,11 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, - groq, + llm-deepseek, }: buildPythonPackage rec { @@ -29,9 +28,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_deepseek" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-deepseek; meta = { description = "LLM plugin providing access to Deepseek models."; diff --git a/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix deleted file mode 100644 index f7a9ac60837c..000000000000 --- a/pkgs/development/python-modules/llm-deepseek/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-deepseek - ]); -in -runCommand "llm-deepseek-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-deepseek")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-fragments-github/default.nix b/pkgs/development/python-modules/llm-fragments-github/default.nix index 67af612c7a55..dbadab8094de 100644 --- a/pkgs/development/python-modules/llm-fragments-github/default.nix +++ b/pkgs/development/python-modules/llm-fragments-github/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-fragments-github, }: buildPythonPackage rec { @@ -27,9 +27,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_fragments_github" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-fragments-github; meta = { description = "Load GitHub repository contents as LLM fragments"; diff --git a/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix deleted file mode 100644 index 293494665727..000000000000 --- a/pkgs/development/python-modules/llm-fragments-github/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-fragments-github - ]); -in -runCommand "llm-fragments-github-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-fragments-github")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-fragments-pypi/default.nix b/pkgs/development/python-modules/llm-fragments-pypi/default.nix index 8c7dc9f9168a..d30135b5378d 100644 --- a/pkgs/development/python-modules/llm-fragments-pypi/default.nix +++ b/pkgs/development/python-modules/llm-fragments-pypi/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, hatchling, llm, + llm-fragments-pypi, httpx, }: @@ -28,9 +28,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_fragments_pypi" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-fragments-pypi; meta = { description = "LLM fragments plugin for PyPI packages metadata"; diff --git a/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix deleted file mode 100644 index 96329d01bf6b..000000000000 --- a/pkgs/development/python-modules/llm-fragments-pypi/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-fragments-pypi - ]); -in -runCommand "llm-fragments-pypi-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-fragments-pypi")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-gemini/default.nix b/pkgs/development/python-modules/llm-gemini/default.nix index 7fa90627c6b7..e14f77bc63fe 100644 --- a/pkgs/development/python-modules/llm-gemini/default.nix +++ b/pkgs/development/python-modules/llm-gemini/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-gemini, httpx, ijson, pytestCheckHook, @@ -45,9 +45,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_gemini" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-gemini; meta = { description = "LLM plugin to access Google's Gemini family of models"; diff --git a/pkgs/development/python-modules/llm-gemini/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-gemini/tests/llm-plugin.nix deleted file mode 100644 index d1f2f6ffbe67..000000000000 --- a/pkgs/development/python-modules/llm-gemini/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-gemini - ]); -in -runCommand "llm-gemini-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-gemini")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-gguf/default.nix b/pkgs/development/python-modules/llm-gguf/default.nix index 386c0c11b392..6d72228e943a 100644 --- a/pkgs/development/python-modules/llm-gguf/default.nix +++ b/pkgs/development/python-modules/llm-gguf/default.nix @@ -1,6 +1,5 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, @@ -11,6 +10,7 @@ httpx, llama-cpp-python, llm, + llm-gguf, }: buildPythonPackage rec { @@ -40,9 +40,7 @@ buildPythonPackage rec { # Tests require internet access (downloading models) doCheck = false; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-gguf; meta = { description = "Run models distributed as GGUF files using LLM"; diff --git a/pkgs/development/python-modules/llm-gguf/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-gguf/tests/llm-plugin.nix deleted file mode 100644 index 97e1f51d6c26..000000000000 --- a/pkgs/development/python-modules/llm-gguf/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-gguf - ]); -in -runCommand "llm-gguf-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-gguf")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-grok/default.nix b/pkgs/development/python-modules/llm-grok/default.nix index f326866798a0..6c8baca68f7f 100644 --- a/pkgs/development/python-modules/llm-grok/default.nix +++ b/pkgs/development/python-modules/llm-grok/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-grok, httpx, httpx-sse, rich, @@ -44,9 +44,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_grok" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-grok; meta = { description = "LLM plugin providing access to Grok models using the xAI API"; diff --git a/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix deleted file mode 100644 index 5ea012b0de7f..000000000000 --- a/pkgs/development/python-modules/llm-grok/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-grok - ]); -in -runCommand "llm-grok-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-grok")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-groq/default.nix b/pkgs/development/python-modules/llm-groq/default.nix index a3f02f2e0b8a..8f2a04aa4f72 100644 --- a/pkgs/development/python-modules/llm-groq/default.nix +++ b/pkgs/development/python-modules/llm-groq/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-groq, groq, }: @@ -29,9 +29,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_groq" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-groq; meta = { description = "LLM plugin providing access to Groqcloud models."; diff --git a/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix deleted file mode 100644 index 5d0ce63e91db..000000000000 --- a/pkgs/development/python-modules/llm-groq/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-groq - ]); -in -runCommand "llm-groq-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-groq")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-hacker-news/default.nix b/pkgs/development/python-modules/llm-hacker-news/default.nix index 86e390b73303..3029de613c74 100644 --- a/pkgs/development/python-modules/llm-hacker-news/default.nix +++ b/pkgs/development/python-modules/llm-hacker-news/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-hacker-news, }: buildPythonPackage rec { @@ -27,9 +27,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_hacker_news" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-hacker-news; meta = { description = "LLM plugin for pulling content from Hacker News"; diff --git a/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix deleted file mode 100644 index 85311225866a..000000000000 --- a/pkgs/development/python-modules/llm-hacker-news/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-hacker-news - ]); -in -runCommand "llm-hacker-news-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-hacker-news")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-jq/default.nix b/pkgs/development/python-modules/llm-jq/default.nix index dab2b6727c9e..64c3149e8b96 100644 --- a/pkgs/development/python-modules/llm-jq/default.nix +++ b/pkgs/development/python-modules/llm-jq/default.nix @@ -1,11 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, - nix-update-script, + llm-jq, }: buildPythonPackage rec { pname = "llm-jq"; @@ -28,9 +27,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_jq" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-jq; meta = { description = "Write and execute jq programs with the help of LLM"; diff --git a/pkgs/development/python-modules/llm-jq/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-jq/tests/llm-plugin.nix deleted file mode 100644 index d659a2d52198..000000000000 --- a/pkgs/development/python-modules/llm-jq/tests/llm-plugin.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-jq - ]); -in -runCommand "llm-jq-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-jq")' - llm jq --help - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-mistral/default.nix b/pkgs/development/python-modules/llm-mistral/default.nix index 25af109cc023..016ca52b1c19 100644 --- a/pkgs/development/python-modules/llm-mistral/default.nix +++ b/pkgs/development/python-modules/llm-mistral/default.nix @@ -1,12 +1,12 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, httpx, httpx-sse, llm, + llm-mistral, pytestCheckHook, pytest-asyncio, pytest-httpx, @@ -44,9 +44,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_mistral" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-mistral; meta = { description = "LLM plugin providing access to Mistral models using the Mistral API"; diff --git a/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix deleted file mode 100644 index 23077de3b85e..000000000000 --- a/pkgs/development/python-modules/llm-mistral/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-mistral - ]); -in -runCommand "llm-mistral-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-mistral")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-ollama/default.nix b/pkgs/development/python-modules/llm-ollama/default.nix index e8d13d4926c6..f0938ccf36b3 100644 --- a/pkgs/development/python-modules/llm-ollama/default.nix +++ b/pkgs/development/python-modules/llm-ollama/default.nix @@ -1,6 +1,5 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, @@ -18,6 +17,7 @@ pytest-asyncio, pytest-mock, writableTmpDirAsHomeHook, + llm-ollama, }: buildPythonPackage rec { @@ -55,9 +55,7 @@ buildPythonPackage rec { "llm_ollama" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-ollama; meta = { description = "LLM plugin providing access to Ollama models using HTTP API"; diff --git a/pkgs/development/python-modules/llm-ollama/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-ollama/tests/llm-plugin.nix deleted file mode 100644 index c601b393ac62..000000000000 --- a/pkgs/development/python-modules/llm-ollama/tests/llm-plugin.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - runCommand, - python, - yq, - cacert, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-ollama - ]); -in -runCommand "llm-ollama-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - env.SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-ollama")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-openai-plugin/default.nix b/pkgs/development/python-modules/llm-openai-plugin/default.nix index d978142bd1c7..7543a341f3c1 100644 --- a/pkgs/development/python-modules/llm-openai-plugin/default.nix +++ b/pkgs/development/python-modules/llm-openai-plugin/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-openai-plugin, openai, pytestCheckHook, pytest-asyncio, @@ -45,9 +45,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_openai" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-openai-plugin; meta = { description = "OpenAI plugin for LLM"; diff --git a/pkgs/development/python-modules/llm-openai-plugin/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-openai-plugin/tests/llm-plugin.nix deleted file mode 100644 index 8092b15a5c90..000000000000 --- a/pkgs/development/python-modules/llm-openai-plugin/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-openai-plugin - ]); -in -runCommand "llm-openai-plugin-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-openai-plugin")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-openrouter/default.nix b/pkgs/development/python-modules/llm-openrouter/default.nix index bb6913547872..9c576d88e536 100644 --- a/pkgs/development/python-modules/llm-openrouter/default.nix +++ b/pkgs/development/python-modules/llm-openrouter/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-openrouter, httpx, openai, pytestCheckHook, @@ -14,7 +14,7 @@ }: buildPythonPackage rec { - pname = "openrouter"; + pname = "llm-openrouter"; version = "0.4.1"; pyproject = true; @@ -44,9 +44,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_openrouter" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-openrouter; meta = { description = "LLM plugin for models hosted by OpenRouter"; diff --git a/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix deleted file mode 100644 index 30e9fc6d5511..000000000000 --- a/pkgs/development/python-modules/llm-openrouter/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-openrouter - ]); -in -runCommand "llm-openrouter-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-openrouter")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-sentence-transformers/default.nix b/pkgs/development/python-modules/llm-sentence-transformers/default.nix index 6eec7d0d5b7b..a9a702d0fa07 100644 --- a/pkgs/development/python-modules/llm-sentence-transformers/default.nix +++ b/pkgs/development/python-modules/llm-sentence-transformers/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-sentence-transformers, einops, sentence-transformers, pytestCheckHook, @@ -46,9 +46,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_sentence_transformers" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-sentence-transformers; meta = { description = "LLM plugin for embeddings using sentence-transformers"; diff --git a/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix deleted file mode 100644 index 5ccaea86b403..000000000000 --- a/pkgs/development/python-modules/llm-sentence-transformers/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-sentence-transformers - ]); -in -runCommand "llm-sentence-transformers-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-sentence-transformers")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-templates-fabric/default.nix b/pkgs/development/python-modules/llm-templates-fabric/default.nix index 0bbc11af790a..979f9f8bae0f 100644 --- a/pkgs/development/python-modules/llm-templates-fabric/default.nix +++ b/pkgs/development/python-modules/llm-templates-fabric/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-templates-fabric, }: buildPythonPackage rec { @@ -23,13 +23,12 @@ buildPythonPackage rec { setuptools llm ]; + dependencies = [ ]; pythonImportsCheck = [ "llm_templates_fabric" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-templates-fabric; meta = { description = "Load LLM templates from Fabric"; diff --git a/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix deleted file mode 100644 index b00bdfbcaa9e..000000000000 --- a/pkgs/development/python-modules/llm-templates-fabric/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-templates-fabric - ]); -in -runCommand "llm-templates-fabric-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-templates-fabric")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-templates-github/default.nix b/pkgs/development/python-modules/llm-templates-github/default.nix index f5e7d66b0f01..58a78512959d 100644 --- a/pkgs/development/python-modules/llm-templates-github/default.nix +++ b/pkgs/development/python-modules/llm-templates-github/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-templates-github, }: buildPythonPackage rec { @@ -23,13 +23,12 @@ buildPythonPackage rec { setuptools llm ]; + dependencies = [ ]; pythonImportsCheck = [ "llm_templates_github" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-templates-github; meta = { description = "Load LLM templates from GitHub repositories"; diff --git a/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix deleted file mode 100644 index a9569f069638..000000000000 --- a/pkgs/development/python-modules/llm-templates-github/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-templates-github - ]); -in -runCommand "llm-templates-github-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-templates-github")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-venice/default.nix b/pkgs/development/python-modules/llm-venice/default.nix index a7e4ad7264ac..460d814f1514 100644 --- a/pkgs/development/python-modules/llm-venice/default.nix +++ b/pkgs/development/python-modules/llm-venice/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-venice, }: buildPythonPackage rec { @@ -31,9 +31,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "llm_venice" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-venice; meta = { description = "LLM plugin to access models available via the Venice API"; diff --git a/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix deleted file mode 100644 index 5648d9a45703..000000000000 --- a/pkgs/development/python-modules/llm-venice/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-venice - ]); -in -runCommand "llm-venice-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-venice")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm-video-frames/default.nix b/pkgs/development/python-modules/llm-video-frames/default.nix index 5572eaad4ab6..b519b37bcb24 100644 --- a/pkgs/development/python-modules/llm-video-frames/default.nix +++ b/pkgs/development/python-modules/llm-video-frames/default.nix @@ -1,10 +1,10 @@ { lib, - callPackage, buildPythonPackage, fetchFromGitHub, setuptools, llm, + llm-video-frames, }: buildPythonPackage rec { @@ -23,13 +23,12 @@ buildPythonPackage rec { setuptools llm ]; + dependencies = [ ]; pythonImportsCheck = [ "llm_video_frames" ]; - passthru.tests = { - llm-plugin = callPackage ./tests/llm-plugin.nix { }; - }; + passthru.tests = llm.mkPluginTest llm-video-frames; meta = { description = "LLM plugin to turn a video into individual frames"; diff --git a/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix b/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix deleted file mode 100644 index 0d72352fe75d..000000000000 --- a/pkgs/development/python-modules/llm-video-frames/tests/llm-plugin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - runCommand, - python, - yq, -}: -let - venv = python.withPackages (ps: [ - ps.llm - ps.llm-video-frames - ]); -in -runCommand "llm-video-frames-test-llm-plugin" - { - nativeBuildInputs = [ - venv - yq - ]; - } - '' - llm plugins | yq --exit-status 'any(.name == "llm-video-frames")' - touch "$out" - '' diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index aa2515f19c73..477dd2dc48c4 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -1,5 +1,6 @@ { lib, + callPackage, buildPythonPackage, fetchFromGitHub, pytestCheckHook, @@ -75,6 +76,9 @@ let passthru = { inherit withPlugins; + mkPluginTest = plugin: { + ${plugin.pname} = callPackage ./mk-plugin-test.nix { inherit llm plugin; }; + }; }; meta = with lib; { diff --git a/pkgs/development/python-modules/llm/mk-plugin-test.nix b/pkgs/development/python-modules/llm/mk-plugin-test.nix new file mode 100644 index 000000000000..01a53ab28348 --- /dev/null +++ b/pkgs/development/python-modules/llm/mk-plugin-test.nix @@ -0,0 +1,27 @@ +{ + cacert, + runCommand, + writableTmpDirAsHomeHook, + yq, + llm, + plugin, +}: +let + venv = llm.pythonModule.withPackages (_: [ + llm + plugin + ]); +in +runCommand "${plugin.pname}-test" + { + nativeBuildInputs = [ + venv + writableTmpDirAsHomeHook + yq + ]; + env.SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; + } + '' + llm plugins | yq --exit-status 'any(.name == "${plugin.pname}")' + touch "$out" + '' From 0d50348b5199eacca771098fe221b16a35e5893e Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Fri, 9 May 2025 14:04:33 -0700 Subject: [PATCH 24/55] llm: reintroduce withPlugins This was removed in #340510, as the previous implementation didn't work well. However, it's still the method that's recommended in the patch for the `llm install` command (`001-disable-install-uninstall-commands.patch`) and with the additions to `enable` overrides on the top-level `llm` derivation, there's a need for a place where the LLM plugin "directory" is specified. So, I've reintroduced the method with a completely new implementation. I've also given it some protections against the list of names getting out of date. This might be a little too clever, but I think the user-facing interface for this function is now quite nice. --- pkgs/by-name/ll/llm/package.nix | 119 +++++++----------- .../python-modules/llm/default.nix | 109 ++++++++++++++-- 2 files changed, 143 insertions(+), 85 deletions(-) diff --git a/pkgs/by-name/ll/llm/package.nix b/pkgs/by-name/ll/llm/package.nix index d98edfd4c9cb..f2bb127d32aa 100644 --- a/pkgs/by-name/ll/llm/package.nix +++ b/pkgs/by-name/ll/llm/package.nix @@ -1,81 +1,46 @@ -{ - lib, - python3Packages, - enable-llm-anthropic ? false, - enable-llm-cmd ? false, - enable-llm-command-r ? false, - enable-llm-deepseek ? false, - enable-llm-fragments-github ? false, - enable-llm-fragments-pypi ? false, - enable-llm-gemini ? false, - enable-llm-grok ? false, - enable-llm-groq ? false, - enable-llm-gguf ? false, - enable-llm-hacker-news ? false, - enable-llm-jq ? false, - enable-llm-mistral ? false, - enable-llm-ollama ? false, - enable-llm-openai-plugin ? false, - enable-llm-openrouter ? false, - enable-llm-sentence-transformers ? false, - enable-llm-templates-fabric ? false, - enable-llm-templates-github ? false, - enable-llm-venice ? false, - enable-llm-video-frames ? false, -}: +# The `...` allows this derivation to be overridden with `enable-`. +# +# Example: +# +# ```nix +# llm.override { +# enable-llm-anthropic = true; +# enable-llm-gemini = true; +# enable-llm-cmd = true; +# enable-llm-templates-github = true; +# } +# ``` +# +# Whatever names are accepted by `llm.withPlugins` are accepted with an added `enable-` prefix as +# an override of this derivation. The user can also do `llm.withPlugins { llm-anthropic = true; }`. +{ lib, python3Packages, ... }@args: let - inherit (python3Packages) - toPythonApplication - llm - llm-anthropic - llm-cmd - llm-command-r - llm-deepseek - llm-fragments-github - llm-fragments-pypi - llm-gemini - llm-gguf - llm-grok - llm-groq - llm-hacker-news - llm-jq - llm-mistral - llm-ollama - llm-openai-plugin - llm-openrouter - llm-sentence-transformers - llm-templates-fabric - llm-templates-github - llm-venice - llm-video-frames - ; + inherit (python3Packages) llm; + + hasEnablePrefix = lib.hasPrefix "enable-"; + addEnablePrefix = name: "enable-${name}"; + removeEnablePrefix = lib.removePrefix "enable-"; + + # Filter to just the attributes which are named "enable-" + enableArgs = lib.filterAttrs (name: value: hasEnablePrefix name) args; + pluginArgs = lib.mapAttrs' ( + name: value: lib.nameValuePair (removeEnablePrefix name) value + ) enableArgs; + + # Provide some diagnostics for the plugin names + pluginNames = lib.attrNames (lib.functionArgs llm.withPlugins); + enableNames = lib.map addEnablePrefix pluginNames; + unknownPluginNames = lib.removeAttrs pluginArgs pluginNames; + unknownNames = lib.map addEnablePrefix (lib.attrNames unknownPluginNames); + unknownNamesDiagnostic = '' + Unknown plugins specified in override: ${lib.concatStringsSep ", " unknownNames} + + Valid overrides: + - ${lib.concatStringsSep "\n - " enableNames} + ''; in -toPythonApplication ( - llm.overrideAttrs (finalAttrs: { - propagatedBuildInputs = - (finalAttrs.propagatedBuildInputs or [ ]) - ++ lib.optionals enable-llm-anthropic [ llm-anthropic ] - ++ lib.optionals enable-llm-cmd [ llm-cmd ] - ++ lib.optionals enable-llm-cmd [ llm-command-r ] - ++ lib.optionals enable-llm-deepseek [ llm-deepseek ] - ++ lib.optionals enable-llm-fragments-github [ llm-fragments-github ] - ++ lib.optionals enable-llm-fragments-pypi [ llm-fragments-pypi ] - ++ lib.optionals enable-llm-gemini [ llm-gemini ] - ++ lib.optionals enable-llm-gguf [ llm-gguf ] - ++ lib.optionals enable-llm-grok [ llm-grok ] - ++ lib.optionals enable-llm-groq [ llm-groq ] - ++ lib.optionals enable-llm-hacker-news [ llm-hacker-news ] - ++ lib.optionals enable-llm-jq [ llm-jq ] - ++ lib.optionals enable-llm-mistral [ llm-mistral ] - ++ lib.optionals enable-llm-ollama [ llm-ollama ] - ++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ] - ++ lib.optionals enable-llm-openrouter [ llm-openrouter ] - ++ lib.optionals enable-llm-sentence-transformers [ llm-sentence-transformers ] - ++ lib.optionals enable-llm-templates-fabric [ llm-templates-fabric ] - ++ lib.optionals enable-llm-templates-github [ llm-templates-github ] - ++ lib.optionals enable-llm-venice [ llm-venice ] - ++ lib.optionals enable-llm-video-frames [ llm-video-frames ]; - }) -) +assert lib.assertMsg (lib.length unknownNames == 0) unknownNamesDiagnostic; + +llm.withPlugins pluginArgs diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 477dd2dc48c4..8f13f25783b8 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -1,5 +1,6 @@ { lib, + runCommand, callPackage, buildPythonPackage, fetchFromGitHub, @@ -14,6 +15,7 @@ pluggy, puremagic, pydantic, + python, python-ulid, pyyaml, sqlite-migrate, @@ -23,6 +25,103 @@ sqlite-utils, }: let + # The function signature of `withPlugins` is the list of all the plugins `llm` knows about. + # The plugin directory is at + withPluginsArgNames = lib.functionArgs withPlugins; + + /** + Make a derivation for `llm` that contains `llm` plus the relevant plugins. + + # Type + + ``` + withPlugins :: + { + llm-anthropic :: bool, + llm-gemini :: bool, + ... + } + -> derivation + ``` + + See `lib.attrNames (lib.functionArgs llm.withPlugins)` for the total list of plugins supported. + + # Examples + :::{.example} + ## `llm.withPlugins` usage example + + ```nix + llm.withPlugins { llm-gemini = true; llm-groq = true; } + => «derivation /nix/store/-python3-3.12.10-llm-with-llm-gemini-llm-groq.drv» + ``` + + ::: + */ + withPlugins = + # Keep this list up to date with the plugins in python3Packages! + { + llm-anthropic ? false, + llm-cmd ? false, + llm-command-r ? false, + llm-deepseek ? false, + llm-fragments-github ? false, + llm-fragments-pypi ? false, + llm-gemini ? false, + llm-gguf ? false, + llm-grok ? false, + llm-groq ? false, + llm-hacker-news ? false, + llm-jq ? false, + llm-mistral ? false, + llm-ollama ? false, + llm-openai-plugin ? false, + llm-openrouter ? false, + llm-sentence-transformers ? false, + llm-templates-fabric ? false, + llm-templates-github ? false, + llm-venice ? false, + llm-video-frames ? false, + }@args: + let + # Filter to just the attributes which are set to a true value. + setArgs = lib.filterAttrs (name: lib.id) args; + + # Make a string with those names separated with a dash. + setArgsStr = lib.concatStringsSep "-" (lib.attrNames setArgs); + + # Make the derivation name reflect what's inside it. + drvName = if lib.stringLength setArgsStr == 0 then "llm" else "llm-with-${setArgsStr}"; + + # Make a python environment with just those plugins. + python-environment = python.withPackages ( + ps: + let + # Throw a diagnostic if this list gets out of sync with the names in python3Packages + allPluginsPresent = pluginNames == (lib.attrNames withPluginsArgNames); + pluginNames = lib.attrNames (lib.intersectAttrs ps withPluginsArgNames); + missingNamesList = lib.attrNames (lib.removeAttrs withPluginsArgNames pluginNames); + missingNames = lib.concatStringsSep ", " missingNamesList; + + # The relevant plugins are the ones the user asked for. + plugins = lib.intersectAttrs setArgs ps; + in + assert lib.assertMsg allPluginsPresent "Missing these plugins: ${missingNames}"; + ([ ps.llm ] ++ lib.attrValues plugins) + ); + + in + # That Python environment produced above contains too many irrelevant binaries, due to how + # Python needs to use propagatedBuildInputs. Let's make one with just what's needed: `llm`. + # Since we include the `passthru` and `meta` information, it's as good as the original + # derivation. + runCommand "${python.name}-${drvName}" { inherit (llm) passthru meta; } '' + mkdir -p $out/bin + ln -s ${python-environment}/bin/llm $out/bin/llm + ''; + + # Uses the `withPlugins` names to make a Python environment with everything. + withAllPlugins = withPlugins (lib.genAttrs (lib.attrNames withPluginsArgNames) (name: true)); + llm = buildPythonPackage rec { pname = "llm"; version = "0.25"; @@ -75,7 +174,8 @@ let pythonImportsCheck = [ "llm" ]; passthru = { - inherit withPlugins; + inherit withPlugins withAllPlugins; + mkPluginTest = plugin: { ${plugin.pname} = callPackage ./mk-plugin-test.nix { inherit llm plugin; }; }; @@ -93,12 +193,5 @@ let ]; }; }; - - withPlugins = throw '' - llm.withPlugins was confusing to use and has been removed. - Please migrate to using python3.withPackages(ps: [ ps.llm ]) instead. - - See https://nixos.org/manual/nixpkgs/stable/#python.withpackages-function for more usage examples. - ''; in llm From b06e408d0dd51270606513d48b936774799f1c0f Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Sat, 10 May 2025 14:55:55 -0700 Subject: [PATCH 25/55] llm: customize the message on `llm install` and `llm uninstall` with the list of plugins possible This way, users know what they can specify as far as plugins go. It serves as a plugin directory. --- ...1-disable-install-uninstall-commands.patch | 38 +++++++++++++++---- .../python-modules/llm/default.nix | 37 ++++++++++++++---- 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch b/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch index cef7fba13343..4d6280349358 100644 --- a/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch +++ b/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch @@ -1,8 +1,8 @@ -diff --git a/llm/cli.py b/llm/cli.py -index af37feb..18b078a 100644 ---- a/llm/cli.py -+++ b/llm/cli.py -@@ -1014,18 +1014,7 @@ def templates_path(): +diff --git i/llm/cli.py w/llm/cli.py +index 09e4e2d..8424a5e 100644 +--- i/llm/cli.py ++++ w/llm/cli.py +@@ -2383,18 +2383,18 @@ def display_truncated(text): ) def install(packages, upgrade, editable, force_reinstall, no_cache_dir): """Install packages from PyPI into the same environment as LLM""" @@ -18,17 +18,39 @@ index af37feb..18b078a 100644 - args += list(packages) - sys.argv = args - run_module("pip", run_name="__main__") -+ click.echo("Install command has been disabled for Nix. If you want to install extra llm plugins, use llm.withPlugins([]) expression.") ++ click.echo( ++"""Install command has been disabled for Nix. To install extra `llm` plugins, use the `llm.withPlugins` function. ++ ++Example: ++ ++```nix ++llm.withPlugins { ++ @listOfPackagedPlugins@ ++} ++``` ++""" ++ ) @cli.command() -@@ -1033,8 +1022,7 @@ def install(packages, upgrade, editable, force_reinstall, no_cache_dir): +@@ -2402,8 +2402,18 @@ def install(packages, upgrade, editable, force_reinstall, no_cache_dir): @click.option("-y", "--yes", is_flag=True, help="Don't ask for confirmation") def uninstall(packages, yes): """Uninstall Python packages from the LLM environment""" - sys.argv = ["pip", "uninstall"] + list(packages) + (["-y"] if yes else []) - run_module("pip", run_name="__main__") -+ click.echo("Uninstall command has been disabled for Nix. If you want to uninstall extra llm plugins, just remove them from llm.withPlugins([]) list expression.") ++ click.echo( ++"""Uninstall command has been disabled for Nix. To remove `llm` plugins, use the `llm.withPlugins` function with the desired set of plugins specified. ++ ++Example: ++ ++```nix ++llm.withPlugins { ++ @listOfPackagedPlugins@ ++} ++``` ++""" ++ ) @cli.command() diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 8f13f25783b8..743e7c902801 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -6,6 +6,7 @@ fetchFromGitHub, pytestCheckHook, pythonOlder, + replaceVars, setuptools, click-default-group, condense-json, @@ -25,12 +26,10 @@ sqlite-utils, }: let - # The function signature of `withPlugins` is the list of all the plugins `llm` knows about. - # The plugin directory is at - withPluginsArgNames = lib.functionArgs withPlugins; - /** Make a derivation for `llm` that contains `llm` plus the relevant plugins. + The function signature of `withPlugins` is the list of all the plugins `llm` knows about. + Adding a parameter here requires that it be in `python3Packages` attrset. # Type @@ -81,6 +80,7 @@ let llm-templates-github ? false, llm-venice ? false, llm-video-frames ? false, + ... }@args: let # Filter to just the attributes which are set to a true value. @@ -97,9 +97,9 @@ let ps: let # Throw a diagnostic if this list gets out of sync with the names in python3Packages - allPluginsPresent = pluginNames == (lib.attrNames withPluginsArgNames); - pluginNames = lib.attrNames (lib.intersectAttrs ps withPluginsArgNames); - missingNamesList = lib.attrNames (lib.removeAttrs withPluginsArgNames pluginNames); + allPluginsPresent = pluginNames == withPluginsArgNames; + pluginNames = lib.attrNames (lib.intersectAttrs ps withPluginsArgs); + missingNamesList = lib.attrNames (lib.removeAttrs withPluginsArgs pluginNames); missingNames = lib.concatStringsSep ", " missingNamesList; # The relevant plugins are the ones the user asked for. @@ -120,7 +120,24 @@ let ''; # Uses the `withPlugins` names to make a Python environment with everything. - withAllPlugins = withPlugins (lib.genAttrs (lib.attrNames withPluginsArgNames) (name: true)); + withAllPlugins = withPlugins (lib.genAttrs withPluginsArgNames (name: true)); + + # The function signature of `withPlugins` is the list of all the plugins `llm` knows about. + # The plugin directory is at + withPluginsArgs = lib.functionArgs withPlugins; + withPluginsArgNames = lib.attrNames withPluginsArgs; + + # In order to help with usability, we patch `llm install` and `llm uninstall` to tell users how to + # customize `llm` with plugins in Nix, including the name of the plugin, its description, and + # where it's coming from. + listOfPackagedPlugins = builtins.toFile "plugins.txt" ( + lib.concatStringsSep "\n " ( + map (name: '' + # ${python.pkgs.${name}.meta.description} <${python.pkgs.${name}.meta.homepage}> + ${name} = true; + '') withPluginsArgNames + ) + ); llm = buildPythonPackage rec { pname = "llm"; @@ -140,6 +157,10 @@ let patches = [ ./001-disable-install-uninstall-commands.patch ]; + postPatch = '' + substituteInPlace llm/cli.py --replace-fail "@listOfPackagedPlugins@" "$(< ${listOfPackagedPlugins})" + ''; + dependencies = [ click-default-group condense-json From 81b35cd59bc06990d7f610291f22666ac347a97a Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:13:36 -0700 Subject: [PATCH 26/55] llm: add philiptaron to maintainers --- pkgs/development/python-modules/llm/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 743e7c902801..c1f71fa10e16 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -202,15 +202,16 @@ let }; }; - meta = with lib; { + meta = { homepage = "https://github.com/simonw/llm"; description = "Access large language models from the command-line"; changelog = "https://github.com/simonw/llm/releases/tag/${src.tag}"; - license = licenses.asl20; + license = lib.licenses.asl20; mainProgram = "llm"; - maintainers = with maintainers; [ + maintainers = with lib.maintainers; [ aldoborrero mccartykim + philiptaron ]; }; }; From a8e9182cd86827dcd5bb23c97a1b550cd04b86cd Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:17:19 -0700 Subject: [PATCH 27/55] python3Packages.llm-anthropic: 0.15.1 -> 0.16a2 Diff: https://github.com/simonw/llm-anthropic/compare/refs/tags/0.15.1...refs/tags/0.16a2 Changelog: https://github.com/simonw/llm-anthropic/releases/tag/0.16a2/CHANGELOG.md --- pkgs/development/python-modules/llm-anthropic/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-anthropic/default.nix b/pkgs/development/python-modules/llm-anthropic/default.nix index 6418ddc8c2cf..c0ba9772382f 100644 --- a/pkgs/development/python-modules/llm-anthropic/default.nix +++ b/pkgs/development/python-modules/llm-anthropic/default.nix @@ -14,14 +14,14 @@ buildPythonPackage rec { pname = "llm-anthropic"; - version = "0.15.1"; + version = "0.16a2"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-anthropic"; tag = version; - hash = "sha256-8bVs3MJteOTCiw7n/4pMf+oXMhsQbCSzUFVQqm2ezcE="; + hash = "sha256-jb1QetMxvDu45wX/AieBUKEk1KSKUt0heCNEYyOGj6w="; }; build-system = [ From 1927529a05eefe6e62db1b99e81e8ccebfd6954b Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:17:23 -0700 Subject: [PATCH 28/55] python3Packages.llm-fragments-github: 0.3 -> 0.4 Diff: https://github.com/simonw/llm-fragments-github/compare/refs/tags/0.3...refs/tags/0.4 Changelog: https://github.com/simonw/llm-fragments-github/releases/tag/0.4/CHANGELOG.md --- .../python-modules/llm-fragments-github/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-fragments-github/default.nix b/pkgs/development/python-modules/llm-fragments-github/default.nix index dbadab8094de..9b8c3d3c5a72 100644 --- a/pkgs/development/python-modules/llm-fragments-github/default.nix +++ b/pkgs/development/python-modules/llm-fragments-github/default.nix @@ -9,14 +9,14 @@ buildPythonPackage rec { pname = "llm-fragments-github"; - version = "0.3"; + version = "0.4"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-fragments-github"; tag = version; - hash = "sha256-+MNFj7auB/dUSIBDXOBaKjIYIW18GLDB55l66S37U1A="; + hash = "sha256-7i1WRix5AAEG5EXJqtaU+QY56aL0SePdqz84z+C+iYM="; }; build-system = [ From 264bef7edb35e4c70f510a99e6a8b50c2a20ed3a Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:17:29 -0700 Subject: [PATCH 29/55] python3Packages.llm-mistral: 0.12 -> 0.13 Diff: https://github.com/simonw/llm-mistral/compare/refs/tags/0.12...refs/tags/0.13 Changelog: https://github.com/simonw/llm-mistral/releases/tag/0.13/CHANGELOG.md --- pkgs/development/python-modules/llm-mistral/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-mistral/default.nix b/pkgs/development/python-modules/llm-mistral/default.nix index 016ca52b1c19..f65ed893d367 100644 --- a/pkgs/development/python-modules/llm-mistral/default.nix +++ b/pkgs/development/python-modules/llm-mistral/default.nix @@ -15,14 +15,14 @@ buildPythonPackage rec { pname = "llm-mistral"; - version = "0.12"; + version = "0.13"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-mistral"; tag = version; - hash = "sha256-oNA5NFI4BZMG/V+eSHfuF/JKBX2Xr/L8EK+mf7KjPD0="; + hash = "sha256-u7Q+WJEtetapNo8WtdbnPKLZK3Q8YBjQcpZgGrK29Ic="; }; build-system = [ From 9e07fc75645d6af362a71c746325a5976e14dbfc Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:17:30 -0700 Subject: [PATCH 30/55] python3Packages.llm-ollama: 0.10.0 -> 0.11a0 Diff: https://github.com/taketwo/llm-ollama/compare/refs/tags/0.10.0...refs/tags/0.11a0 Changelog: https://github.com/taketwo/llm-ollama/releases/tag/0.11a0 --- pkgs/development/python-modules/llm-ollama/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-ollama/default.nix b/pkgs/development/python-modules/llm-ollama/default.nix index f0938ccf36b3..1a2b9de133b3 100644 --- a/pkgs/development/python-modules/llm-ollama/default.nix +++ b/pkgs/development/python-modules/llm-ollama/default.nix @@ -22,14 +22,14 @@ buildPythonPackage rec { pname = "llm-ollama"; - version = "0.10.0"; + version = "0.11a0"; pyproject = true; src = fetchFromGitHub { owner = "taketwo"; repo = "llm-ollama"; tag = version; - hash = "sha256-IA9Tb82XB+Gr6YwMVqzsw1dPtT3GWK2W/ZtuDVznF1A"; + hash = "sha256-Bmv7+mkX5kMnIv3jenXw/OFB63xEPZD19ZRPlyJEbkY="; }; build-system = [ From cc134a91d32c5464f0340eddd5639e788cc5a450 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 27 May 2025 06:17:35 -0700 Subject: [PATCH 31/55] python3Packages.llm-venice: 0.6.0 -> 0.7.0 Diff: https://github.com/ar-jan/llm-venice/compare/refs/tags/0.6.0...refs/tags/0.7.0 Changelog: https://github.com/ar-jan/llm-venice/releases/tag/0.7.0/CHANGELOG.md --- pkgs/development/python-modules/llm-venice/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-venice/default.nix b/pkgs/development/python-modules/llm-venice/default.nix index 460d814f1514..8885b55595ee 100644 --- a/pkgs/development/python-modules/llm-venice/default.nix +++ b/pkgs/development/python-modules/llm-venice/default.nix @@ -9,14 +9,14 @@ buildPythonPackage rec { pname = "llm-venice"; - version = "0.6.0"; + version = "0.7.0"; pyproject = true; src = fetchFromGitHub { owner = "ar-jan"; repo = "llm-venice"; tag = version; - hash = "sha256-fHCAERIFhuovo1f+jTG6L4C/Rql8tdHZG/7p5fBLkH0="; + hash = "sha256-vsb3oXGr+2FDJnTwYomICfald1ptben28hAJ8ypKiBI="; }; build-system = [ From e8237dfe32991a25134f45c0399f8e7f29a09d89 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:35:43 -0700 Subject: [PATCH 32/55] python3Packages.llm-echo: init at 0.2 --- .../python-modules/llm-echo/default.nix | 45 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/llm-echo/default.nix diff --git a/pkgs/development/python-modules/llm-echo/default.nix b/pkgs/development/python-modules/llm-echo/default.nix new file mode 100644 index 000000000000..3347f5280145 --- /dev/null +++ b/pkgs/development/python-modules/llm-echo/default.nix @@ -0,0 +1,45 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-echo, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-echo"; + version = "0.3"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-echo"; + tag = version; + hash = "sha256-KtdsvXJQRJ3EEJ25i6ccbVxMsWlDsxa+HJ7bFzyYGNI="; + }; + + build-system = [ + setuptools + llm + ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_echo" ]; + + passthru.tests = llm.mkPluginTest llm-echo; + + meta = { + description = "Debug plugin for LLM"; + homepage = "https://github.com/simonw/llm-echo"; + changelog = "https://github.com/simonw/llm-echo/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index c1f71fa10e16..80bed4ff6c2e 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -63,6 +63,7 @@ let llm-cmd ? false, llm-command-r ? false, llm-deepseek ? false, + llm-echo ? false, llm-fragments-github ? false, llm-fragments-pypi ? false, llm-gemini ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8bded0dc781f..ea594d439326 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8302,6 +8302,8 @@ self: super: with self; { llm-deepseek = callPackage ../development/python-modules/llm-deepseek { }; + llm-echo = callPackage ../development/python-modules/llm-echo { }; + llm-fragments-github = callPackage ../development/python-modules/llm-fragments-github { }; llm-fragments-pypi = callPackage ../development/python-modules/llm-fragments-pypi { }; From 36e9a7ddb91e5649e089d66d1caf6c1a50f19263 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:36:25 -0700 Subject: [PATCH 33/55] python3Packages.llm: 0.25 -> 0.26 Diff: https://github.com/simonw/llm/compare/refs/tags/0.25...refs/tags/0.26 Changelog: https://github.com/simonw/llm/releases/tag/0.26 We also need to update llm-echo to a pre-release build to make the tests pass. --- .../python-modules/llm-echo/default.nix | 4 +- ...1-disable-install-uninstall-commands.patch | 38 +++++++++++-------- .../python-modules/llm/default.nix | 15 +++++++- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/pkgs/development/python-modules/llm-echo/default.nix b/pkgs/development/python-modules/llm-echo/default.nix index 3347f5280145..756c4a743b46 100644 --- a/pkgs/development/python-modules/llm-echo/default.nix +++ b/pkgs/development/python-modules/llm-echo/default.nix @@ -11,14 +11,14 @@ buildPythonPackage rec { pname = "llm-echo"; - version = "0.3"; + version = "0.3a3"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-echo"; tag = version; - hash = "sha256-KtdsvXJQRJ3EEJ25i6ccbVxMsWlDsxa+HJ7bFzyYGNI="; + hash = "sha256-4345UIyaQx+mYYBAFD5AaX5YbjbnJQt8bKMD5Vl8VJc="; }; build-system = [ diff --git a/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch b/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch index 4d6280349358..a9012c98f3b5 100644 --- a/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch +++ b/pkgs/development/python-modules/llm/001-disable-install-uninstall-commands.patch @@ -1,11 +1,12 @@ -diff --git i/llm/cli.py w/llm/cli.py -index 09e4e2d..8424a5e 100644 ---- i/llm/cli.py -+++ w/llm/cli.py -@@ -2383,18 +2383,18 @@ def display_truncated(text): +diff --git a/llm/cli.py b/llm/cli.py +index 5d53e74..c2b4707 100644 +--- a/llm/cli.py ++++ b/llm/cli.py +@@ -2895,30 +2895,38 @@ def display_truncated(text): + help="Include pre-release and development versions", ) - def install(packages, upgrade, editable, force_reinstall, no_cache_dir): - """Install packages from PyPI into the same environment as LLM""" + def install(packages, upgrade, editable, force_reinstall, no_cache_dir, pre): +- """Install packages from PyPI into the same environment as LLM""" - args = ["pip", "install"] - if upgrade: - args += ["--upgrade"] @@ -15,10 +16,13 @@ index 09e4e2d..8424a5e 100644 - args += ["--force-reinstall"] - if no_cache_dir: - args += ["--no-cache-dir"] +- if pre: +- args += ["--pre"] - args += list(packages) - sys.argv = args - run_module("pip", run_name="__main__") -+ click.echo( ++ """Install packages from PyPI into the same environment as LLM. Disabled for nixpkgs.""" ++ raise click.ClickException( +"""Install command has been disabled for Nix. To install extra `llm` plugins, use the `llm.withPlugins` function. + +Example: @@ -30,16 +34,17 @@ index 09e4e2d..8424a5e 100644 +``` +""" + ) - - + + @cli.command() -@@ -2402,8 +2402,18 @@ def install(packages, upgrade, editable, force_reinstall, no_cache_dir): + @click.argument("packages", nargs=-1, required=True) @click.option("-y", "--yes", is_flag=True, help="Don't ask for confirmation") def uninstall(packages, yes): - """Uninstall Python packages from the LLM environment""" +- """Uninstall Python packages from the LLM environment""" - sys.argv = ["pip", "uninstall"] + list(packages) + (["-y"] if yes else []) - run_module("pip", run_name="__main__") -+ click.echo( ++ """Uninstall Python packages from the LLM environment. Disabled for nixpkgs.""" ++ raise click.ClickException( +"""Uninstall command has been disabled for Nix. To remove `llm` plugins, use the `llm.withPlugins` function with the desired set of plugins specified. + +Example: @@ -51,6 +56,9 @@ index 09e4e2d..8424a5e 100644 +``` +""" + ) - - + + @cli.command() +-- +2.49.0 + diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 80bed4ff6c2e..e6d693165763 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -23,7 +23,10 @@ cogapp, pytest-asyncio, pytest-httpx, + pytest-recording, sqlite-utils, + syrupy, + llm-echo, }: let /** @@ -142,7 +145,7 @@ let llm = buildPythonPackage rec { pname = "llm"; - version = "0.25"; + version = "0.26"; pyproject = true; build-system = [ setuptools ]; @@ -153,7 +156,7 @@ let owner = "simonw"; repo = "llm"; tag = version; - hash = "sha256-iH1P0VdpwIItY1In7vlM0Sn44Db23TqFp8GZ79/GMJs="; + hash = "sha256-KTlNajuZrR0kBX3LatepsNM3PfRVsQn+evEfXTu6juE="; }; patches = [ ./001-disable-install-uninstall-commands.patch ]; @@ -183,11 +186,19 @@ let numpy pytest-asyncio pytest-httpx + pytest-recording + syrupy pytestCheckHook ]; doCheck = true; + # The tests make use of `llm_echo` but that would be a circular dependency. + # So we make a local copy in this derivation, as it's a super-simple package of one file. + preCheck = '' + cp ${llm-echo.src}/llm_echo.py llm_echo.py + ''; + pytestFlagsArray = [ "-svv" "tests/" From 518d9a98567f9fe13fda9213e719ae02fa4c7e49 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:36:27 -0700 Subject: [PATCH 34/55] python3Packages.llm-anthropic: 0.16a2 -> 0.17 Diff: https://github.com/simonw/llm-anthropic/compare/refs/tags/0.16a2...refs/tags/0.17 Changelog: https://github.com/simonw/llm-anthropic/releases/tag/0.17/CHANGELOG.md --- pkgs/development/python-modules/llm-anthropic/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-anthropic/default.nix b/pkgs/development/python-modules/llm-anthropic/default.nix index c0ba9772382f..f78daf8b73ed 100644 --- a/pkgs/development/python-modules/llm-anthropic/default.nix +++ b/pkgs/development/python-modules/llm-anthropic/default.nix @@ -14,14 +14,14 @@ buildPythonPackage rec { pname = "llm-anthropic"; - version = "0.16a2"; + version = "0.17"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-anthropic"; tag = version; - hash = "sha256-jb1QetMxvDu45wX/AieBUKEk1KSKUt0heCNEYyOGj6w="; + hash = "sha256-2fatBKZMttC5flzfC7MWCpduc3m6IOVWZiW1K2dYqis="; }; build-system = [ From c80dc765ca26c26510d679ed5968e590166f0f5f Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:36:33 -0700 Subject: [PATCH 35/55] python3Packages.llm-gemini: 0.20 -> 0.21 Diff: https://github.com/simonw/llm-gemini/compare/refs/tags/0.20...refs/tags/0.21 Changelog: https://github.com/simonw/llm-gemini/releases/tag/0.21 --- pkgs/development/python-modules/llm-gemini/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-gemini/default.nix b/pkgs/development/python-modules/llm-gemini/default.nix index e14f77bc63fe..4b746366fbdb 100644 --- a/pkgs/development/python-modules/llm-gemini/default.nix +++ b/pkgs/development/python-modules/llm-gemini/default.nix @@ -15,14 +15,14 @@ }: buildPythonPackage rec { pname = "llm-gemini"; - version = "0.20"; + version = "0.21"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-gemini"; tag = version; - hash = "sha256-haaJtJ9RqV5/n/j8PNXPS7zc332W+gU20x0wGPRdzOQ="; + hash = "sha256-aCP0YjcghzpgceuZRKGTN15wm7OIPCwcJAJJBxh78f4="; }; build-system = [ From 414b770ca537b8e1d66c1f3b10300c694e1379c5 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:36:38 -0700 Subject: [PATCH 36/55] python3Packages.llm-mistral: 0.13 -> 0.14 Diff: https://github.com/simonw/llm-mistral/compare/refs/tags/0.13...refs/tags/0.14 Changelog: https://github.com/simonw/llm-mistral/releases/tag/0.14/CHANGELOG.md --- pkgs/development/python-modules/llm-mistral/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-mistral/default.nix b/pkgs/development/python-modules/llm-mistral/default.nix index f65ed893d367..1aa42abacc6e 100644 --- a/pkgs/development/python-modules/llm-mistral/default.nix +++ b/pkgs/development/python-modules/llm-mistral/default.nix @@ -15,14 +15,14 @@ buildPythonPackage rec { pname = "llm-mistral"; - version = "0.13"; + version = "0.14"; pyproject = true; src = fetchFromGitHub { owner = "simonw"; repo = "llm-mistral"; tag = version; - hash = "sha256-u7Q+WJEtetapNo8WtdbnPKLZK3Q8YBjQcpZgGrK29Ic="; + hash = "sha256-NuiqRA/SCjGq0hJsnHJ/vgdncIKu3oE9WqWGht7QRMc="; }; build-system = [ From 89950d8ecb3e5a973b2cd9ac760ceaca4c4941b0 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 11:36:40 -0700 Subject: [PATCH 37/55] python3Packages.llm-ollama: 0.11a0 -> 0.11.0 Diff: https://github.com/taketwo/llm-ollama/compare/refs/tags/0.11a0...refs/tags/0.11.0 Changelog: https://github.com/taketwo/llm-ollama/releases/tag/0.11.0 --- pkgs/development/python-modules/llm-ollama/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llm-ollama/default.nix b/pkgs/development/python-modules/llm-ollama/default.nix index 1a2b9de133b3..fa7de12f294c 100644 --- a/pkgs/development/python-modules/llm-ollama/default.nix +++ b/pkgs/development/python-modules/llm-ollama/default.nix @@ -22,14 +22,14 @@ buildPythonPackage rec { pname = "llm-ollama"; - version = "0.11a0"; + version = "0.11.0"; pyproject = true; src = fetchFromGitHub { owner = "taketwo"; repo = "llm-ollama"; tag = version; - hash = "sha256-Bmv7+mkX5kMnIv3jenXw/OFB63xEPZD19ZRPlyJEbkY="; + hash = "sha256-iwrDqrPt/zwXypBwD7zDAcen4fQq6PXl7Xj5VUL2KWA="; }; build-system = [ From 2074fa159b50bb41ac326d85e256d6fec30bfe5e Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 13:30:26 -0700 Subject: [PATCH 38/55] python3Packages.quickjs: init at 1.19.4 Due to the new quickjs release on 2025-04-26, there's a minor patch needed to fix things up. --- ...pdate-for-QuickJS-2025-04-26-release.patch | 66 +++++++++++++++++++ .../python-modules/quickjs/default.nix | 58 ++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 126 insertions(+) create mode 100644 pkgs/development/python-modules/quickjs/0001-Update-for-QuickJS-2025-04-26-release.patch create mode 100644 pkgs/development/python-modules/quickjs/default.nix diff --git a/pkgs/development/python-modules/quickjs/0001-Update-for-QuickJS-2025-04-26-release.patch b/pkgs/development/python-modules/quickjs/0001-Update-for-QuickJS-2025-04-26-release.patch new file mode 100644 index 000000000000..05501f6a220c --- /dev/null +++ b/pkgs/development/python-modules/quickjs/0001-Update-for-QuickJS-2025-04-26-release.patch @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Philip Taron +Date: Thu, 29 May 2025 17:16:43 -0700 +Subject: [PATCH] Update for QuickJS 2025-04-26 release + +Signed-off-by: Philip Taron +--- + setup.py | 6 +++--- + test_quickjs.py | 6 +++--- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/setup.py b/setup.py +index 9d17af357dcadc40478789ef9c82ac82632967d3..d0b4ff2bd7f3450f6f055ee9e2eda6b591d70689 100644 +--- a/setup.py ++++ b/setup.py +@@ -16,7 +16,7 @@ if sys.platform == "win32": + # system PATH when compiling. + # 3. The code below will moneky-patch distutils to work. + import distutils.cygwinccompiler +- distutils.cygwinccompiler.get_msvcr = lambda: [] ++ distutils.cygwinccompiler.get_msvcr = lambda: [] + # Make sure that pthreads is linked statically, otherwise we run into problems + # on computers where it is not installed. + extra_link_args = ["-static"] +@@ -26,7 +26,7 @@ def get_c_sources(include_headers=False): + sources = [ + "module.c", + "upstream-quickjs/cutils.c", +- "upstream-quickjs/libbf.c", ++ "upstream-quickjs/dtoa.c", + "upstream-quickjs/libregexp.c", + "upstream-quickjs/libunicode.c", + "upstream-quickjs/quickjs.c", +@@ -34,7 +34,7 @@ def get_c_sources(include_headers=False): + if include_headers: + sources += [ + "upstream-quickjs/cutils.h", +- "upstream-quickjs/libbf.h", ++ "upstream-quickjs/dtoa.h", + "upstream-quickjs/libregexp-opcode.h", + "upstream-quickjs/libregexp.h", + "upstream-quickjs/libunicode-table.h", +diff --git a/test_quickjs.py b/test_quickjs.py +index 1f6dec7ccd15092e98e80a9139ae2acff359b010..9444234655fba9d932ce92c82b9d8da8fe83ad5b 100644 +--- a/test_quickjs.py ++++ b/test_quickjs.py +@@ -105,8 +105,8 @@ class Context(unittest.TestCase): + else: + self.fail("Expected exception.") + +- self.assertIn("at funcA (:3)\n", msg) +- self.assertIn("at funcB (:6)\n", msg) ++ self.assertIn("at funcA (:3:24)\n", msg) ++ self.assertIn("at funcB (:6:26)\n", msg) + + def test_memory_limit(self): + code = """ +@@ -508,7 +508,7 @@ class FunctionTest(unittest.TestCase): + """) + + self.assertEqual(f(100), 100) +- limit = 500 ++ limit = 1500 + with self.assertRaises(quickjs.StackOverflow): + f(limit) + f.set_max_stack_size(2000 * limit) diff --git a/pkgs/development/python-modules/quickjs/default.nix b/pkgs/development/python-modules/quickjs/default.nix new file mode 100644 index 000000000000..1d5726bee259 --- /dev/null +++ b/pkgs/development/python-modules/quickjs/default.nix @@ -0,0 +1,58 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + poetry-core, + pytestCheckHook, + pkgs, +}: + +let + inherit (pkgs) quickjs srcOnly; +in + +buildPythonPackage rec { + pname = "quickjs"; + version = "1.19.4"; + pyproject = true; + + src = fetchFromGitHub { + owner = "PetterS"; + repo = "quickjs"; + tag = version; + hash = "sha256-nLloXJWOuaK/enZfwXJI94IcsAMYrkBtG4i3gmxuhfw="; + }; + + patches = [ ./0001-Update-for-QuickJS-2025-04-26-release.patch ]; + + # Upstream uses Git submodules; let's de-vendor and use Nix, so that we gain security fixes like + # https://github.com/NixOS/nixpkgs/pull/407469 + prePatch = '' + rmdir upstream-quickjs + ln -s ${srcOnly quickjs} upstream-quickjs + ''; + + postPatch = '' + substituteInPlace pyproject.toml \ + --replace-fail poetry>=1.5.0 poetry \ + --replace-fail poetry poetry-core \ + --replace-fail 'version = "0"' 'version = "${version}"' + ''; + + build-system = [ + poetry-core + setuptools + ]; + + nativeCheckInputs = [ pytestCheckHook ]; + + pythonImportsCheck = [ "quickjs" ]; + + meta = { + description = "Python wrapper around the quickjs C library"; + homepage = "https://github.com/PetterS/quickjs"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ea594d439326..08ce80666cde 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -14898,6 +14898,8 @@ self: super: with self; { queuelib = callPackage ../development/python-modules/queuelib { }; + quickjs = callPackage ../development/python-modules/quickjs { }; + quil = callPackage ../development/python-modules/quil { }; quixote = callPackage ../development/python-modules/quixote { }; From 7438a10a796b646295d7d804bf79f8dc55fd003e Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 13:42:18 -0700 Subject: [PATCH 39/55] python3Packages.llm-tools-quickjs: init at 0.1 --- .../llm-tools-quickjs/default.nix | 50 +++++++++++++++++++ .../python-modules/llm/default.nix | 4 +- pkgs/top-level/python-packages.nix | 2 + 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/python-modules/llm-tools-quickjs/default.nix diff --git a/pkgs/development/python-modules/llm-tools-quickjs/default.nix b/pkgs/development/python-modules/llm-tools-quickjs/default.nix new file mode 100644 index 000000000000..b8f934c5a5b6 --- /dev/null +++ b/pkgs/development/python-modules/llm-tools-quickjs/default.nix @@ -0,0 +1,50 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + quickjs, + llm, + llm-tools-quickjs, + llm-echo, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-tools-quickjs"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-tools-quickjs"; + tag = version; + hash = "sha256-Si3VcHnRUj8Q/N8pRhltPOM6K64TX9DBH/u4WQxQJjQ="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ quickjs ]; + + nativeCheckInputs = [ + llm-echo + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_tools_quickjs" ]; + + passthru.tests = llm.mkPluginTest llm-tools-quickjs; + + meta = { + description = "JavaScript execution as a tool for LLM"; + homepage = "https://github.com/simonw/llm-tools-quickjs"; + changelog = "https://github.com/simonw/llm-tools-quickjs/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index e6d693165763..826a502de7f8 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -82,6 +82,7 @@ let llm-sentence-transformers ? false, llm-templates-fabric ? false, llm-templates-github ? false, + llm-tools-quickjs ? false, llm-venice ? false, llm-video-frames ? false, ... @@ -162,7 +163,8 @@ let patches = [ ./001-disable-install-uninstall-commands.patch ]; postPatch = '' - substituteInPlace llm/cli.py --replace-fail "@listOfPackagedPlugins@" "$(< ${listOfPackagedPlugins})" + substituteInPlace llm/cli.py \ + --replace-fail "@listOfPackagedPlugins@" "$(< ${listOfPackagedPlugins})" ''; dependencies = [ diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 08ce80666cde..8bdcd385da26 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8334,6 +8334,8 @@ self: super: with self; { llm-templates-github = callPackage ../development/python-modules/llm-templates-github { }; + llm-tools-quickjs = callPackage ../development/python-modules/llm-tools-quickjs { }; + llm-venice = callPackage ../development/python-modules/llm-venice { }; llm-video-frames = callPackage ../development/python-modules/llm-video-frames { }; From d935c30c3d2bcee3819437ae7ee4e28befd63735 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 13:54:01 -0700 Subject: [PATCH 40/55] python3Packages.llm-tools-sqlite: init at 0.1 --- .../llm-tools-sqlite/default.nix | 47 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 50 insertions(+) create mode 100644 pkgs/development/python-modules/llm-tools-sqlite/default.nix diff --git a/pkgs/development/python-modules/llm-tools-sqlite/default.nix b/pkgs/development/python-modules/llm-tools-sqlite/default.nix new file mode 100644 index 000000000000..283084b8efc0 --- /dev/null +++ b/pkgs/development/python-modules/llm-tools-sqlite/default.nix @@ -0,0 +1,47 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-tools-sqlite, + llm-echo, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-tools-sqlite"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-tools-sqlite"; + tag = version; + hash = "sha256-VAmK4cXzZWTWCU92TwMdhNJPvYPZ88t5BZe8vo60SZY="; + }; + + build-system = [ + setuptools + llm + ]; + + nativeCheckInputs = [ + llm-echo + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_tools_sqlite" ]; + + passthru.tests = llm.mkPluginTest llm-tools-sqlite; + + meta = { + description = "LLM tools for running queries against SQLite"; + homepage = "https://github.com/simonw/llm-tools-sqlite"; + changelog = "https://github.com/simonw/llm-tools-sqlite/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 826a502de7f8..a1b128be406a 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -83,6 +83,7 @@ let llm-templates-fabric ? false, llm-templates-github ? false, llm-tools-quickjs ? false, + llm-tools-sqlite ? false, llm-venice ? false, llm-video-frames ? false, ... diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8bdcd385da26..210d61727d55 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8336,6 +8336,8 @@ self: super: with self; { llm-tools-quickjs = callPackage ../development/python-modules/llm-tools-quickjs { }; + llm-tools-sqlite = callPackage ../development/python-modules/llm-tools-sqlite { }; + llm-venice = callPackage ../development/python-modules/llm-venice { }; llm-video-frames = callPackage ../development/python-modules/llm-video-frames { }; From 550a2409216c8318dfe1a71fe4daf040080f6793 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 13:58:30 -0700 Subject: [PATCH 41/55] python3Packages.llm-tools-datasette: init at 0.1 --- .../llm-tools-datasette/default.nix | 49 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 52 insertions(+) create mode 100644 pkgs/development/python-modules/llm-tools-datasette/default.nix diff --git a/pkgs/development/python-modules/llm-tools-datasette/default.nix b/pkgs/development/python-modules/llm-tools-datasette/default.nix new file mode 100644 index 000000000000..5229c71bb6ea --- /dev/null +++ b/pkgs/development/python-modules/llm-tools-datasette/default.nix @@ -0,0 +1,49 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-tools-datasette, + llm-echo, + pytestCheckHook, + pytest-httpx, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-tools-datasette"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-tools-datasette"; + tag = version; + hash = "sha256-Us9bPk2qpTlgJqQ0Cl9QdeqW+h8j+pmnkriM0WXEyyA="; + }; + + build-system = [ + setuptools + llm + ]; + + nativeCheckInputs = [ + llm-echo + pytestCheckHook + pytest-httpx + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_tools_datasette" ]; + + passthru.tests = llm.mkPluginTest llm-tools-datasette; + + meta = { + description = "Expose Datasette instances to LLM as a tool"; + homepage = "https://github.com/simonw/llm-tools-datasette"; + changelog = "https://github.com/simonw/llm-tools-datasette/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index a1b128be406a..d17063c115fa 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -82,6 +82,7 @@ let llm-sentence-transformers ? false, llm-templates-fabric ? false, llm-templates-github ? false, + llm-tools-datasette ? false, llm-tools-quickjs ? false, llm-tools-sqlite ? false, llm-venice ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 210d61727d55..24cbe8744992 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8334,6 +8334,8 @@ self: super: with self; { llm-templates-github = callPackage ../development/python-modules/llm-templates-github { }; + llm-tools-datasette = callPackage ../development/python-modules/llm-tools-datasette { }; + llm-tools-quickjs = callPackage ../development/python-modules/llm-tools-quickjs { }; llm-tools-sqlite = callPackage ../development/python-modules/llm-tools-sqlite { }; From 4397592022cbabe3b7a09f22db08de56164e2b76 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:02:21 -0700 Subject: [PATCH 42/55] python3Packages.llm-llama-server: init at 0.2 --- .../llm-llama-server/default.nix | 47 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 50 insertions(+) create mode 100644 pkgs/development/python-modules/llm-llama-server/default.nix diff --git a/pkgs/development/python-modules/llm-llama-server/default.nix b/pkgs/development/python-modules/llm-llama-server/default.nix new file mode 100644 index 000000000000..e6fcb5b3498c --- /dev/null +++ b/pkgs/development/python-modules/llm-llama-server/default.nix @@ -0,0 +1,47 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-llama-server, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-llama-server"; + version = "0.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-llama-server"; + tag = version; + hash = "sha256-jtFSfGu3JhNUfTsspY+OFLTMt9jQrh6R05sK9KBOKTE="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_llama_server" ]; + + passthru.tests = llm.mkPluginTest llm-llama-server; + + meta = { + description = "LLM plugin providing access to Mistral models using the Mistral API"; + homepage = "Interact with llama-server models"; + changelog = "https://github.com/simonw/llm-llama-server/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index d17063c115fa..b05e1de0eeda 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -75,6 +75,7 @@ let llm-groq ? false, llm-hacker-news ? false, llm-jq ? false, + llm-llama-server ? false, llm-mistral ? false, llm-ollama ? false, llm-openai-plugin ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 24cbe8744992..31744332843a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8320,6 +8320,8 @@ self: super: with self; { llm-jq = callPackage ../development/python-modules/llm-jq { }; + llm-llama-server = callPackage ../development/python-modules/llm-llama-server { }; + llm-mistral = callPackage ../development/python-modules/llm-mistral { }; llm-ollama = callPackage ../development/python-modules/llm-ollama { }; From 2ee7c8ea88ed8e327b6af64ae90a4178a1612dc4 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:09:24 -0700 Subject: [PATCH 43/55] python3Packages.llm-tools-simpleeval: init at 0.1.1 --- .../llm-tools-simpleeval/default.nix | 50 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 53 insertions(+) create mode 100644 pkgs/development/python-modules/llm-tools-simpleeval/default.nix diff --git a/pkgs/development/python-modules/llm-tools-simpleeval/default.nix b/pkgs/development/python-modules/llm-tools-simpleeval/default.nix new file mode 100644 index 000000000000..50a9a3f9ba24 --- /dev/null +++ b/pkgs/development/python-modules/llm-tools-simpleeval/default.nix @@ -0,0 +1,50 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-tools-simpleeval, + llm-echo, + pytestCheckHook, + simpleeval, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-tools-simpleeval"; + version = "0.1.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-tools-simpleeval"; + tag = version; + hash = "sha256-IOmYu7zoim7Co/xIm5VLaGkCPI0o+2Nb2Pu3U2fH0BU="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ simpleeval ]; + + nativeCheckInputs = [ + llm-echo + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_tools_simpleeval" ]; + + passthru.tests = llm.mkPluginTest llm-tools-simpleeval; + + meta = { + description = "Make simple_eval available as an LLM tool"; + homepage = "https://github.com/simonw/llm-tools-simpleeval"; + changelog = "https://github.com/simonw/llm-tools-simpleeval/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index b05e1de0eeda..4cfc7e21ef7a 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -85,6 +85,7 @@ let llm-templates-github ? false, llm-tools-datasette ? false, llm-tools-quickjs ? false, + llm-tools-simpleeval ? false, llm-tools-sqlite ? false, llm-venice ? false, llm-video-frames ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 31744332843a..91a2b06a722e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8340,6 +8340,8 @@ self: super: with self; { llm-tools-quickjs = callPackage ../development/python-modules/llm-tools-quickjs { }; + llm-tools-simpleeval = callPackage ../development/python-modules/llm-tools-simpleeval { }; + llm-tools-sqlite = callPackage ../development/python-modules/llm-tools-sqlite { }; llm-venice = callPackage ../development/python-modules/llm-venice { }; From 3d646501ff9c68746a85dac2413d72bbbf1c15ca Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:21:39 -0700 Subject: [PATCH 44/55] python3Packages.llm-fragments-reader: init at 0.1 --- .../llm-fragments-reader/default.nix | 50 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 53 insertions(+) create mode 100644 pkgs/development/python-modules/llm-fragments-reader/default.nix diff --git a/pkgs/development/python-modules/llm-fragments-reader/default.nix b/pkgs/development/python-modules/llm-fragments-reader/default.nix new file mode 100644 index 000000000000..72aa5aaea539 --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-reader/default.nix @@ -0,0 +1,50 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + httpx, + httpx-sse, + llm, + llm-fragments-reader, + pytestCheckHook, + pytest-asyncio, + pytest-httpx, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-fragments-reader"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-fragments-reader"; + tag = version; + hash = "sha256-2xdvOpMGsTtnerrlGiVSHoJrM+GQ7Zgv+zn2SAwYAL4="; + }; + + build-system = [ + setuptools + llm + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-httpx + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_fragments_reader" ]; + + passthru.tests = llm.mkPluginTest llm-fragments-reader; + + meta = { + description = "Run URLs through the Jina Reader API"; + homepage = "https://github.com/simonw/llm-fragments-reader"; + changelog = "https://github.com/simonw/llm-fragments-reader/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 4cfc7e21ef7a..3089cdb53746 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -69,6 +69,7 @@ let llm-echo ? false, llm-fragments-github ? false, llm-fragments-pypi ? false, + llm-fragments-reader ? false, llm-gemini ? false, llm-gguf ? false, llm-grok ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 91a2b06a722e..eb077daabfdc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8308,6 +8308,8 @@ self: super: with self; { llm-fragments-pypi = callPackage ../development/python-modules/llm-fragments-pypi { }; + llm-fragments-reader = callPackage ../development/python-modules/llm-fragments-reader { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From 8d872ce25063db13f18278b8885c501f8f5f469b Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:25:51 -0700 Subject: [PATCH 45/55] python3Packages.llm-docs: init at 0.2.1 --- .../python-modules/llm-docs/default.nix | 38 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 41 insertions(+) create mode 100644 pkgs/development/python-modules/llm-docs/default.nix diff --git a/pkgs/development/python-modules/llm-docs/default.nix b/pkgs/development/python-modules/llm-docs/default.nix new file mode 100644 index 000000000000..8ed974571607 --- /dev/null +++ b/pkgs/development/python-modules/llm-docs/default.nix @@ -0,0 +1,38 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + llm, + llm-docs, +}: + +buildPythonPackage rec { + pname = "llm-docs"; + version = "0.2.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-docs"; + tag = version; + hash = "sha256-+Ha6L2h8p/yA073MfO2Uvd6E4bKA2xAvaBWtvjqglOw="; + }; + + build-system = [ + setuptools + llm + ]; + + pythonImportsCheck = [ "llm_docs" ]; + + passthru.tests = llm.mkPluginTest llm-docs; + + meta = { + description = "Ask questions of LLM documentation using LLM"; + homepage = "https://github.com/simonw/llm-docs"; + changelog = "https://github.com/simonw/llm-docs/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 3089cdb53746..3724793c45d2 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -66,6 +66,7 @@ let llm-cmd ? false, llm-command-r ? false, llm-deepseek ? false, + llm-docs ? false, llm-echo ? false, llm-fragments-github ? false, llm-fragments-pypi ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index eb077daabfdc..dfdcd352fe26 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8302,6 +8302,8 @@ self: super: with self; { llm-deepseek = callPackage ../development/python-modules/llm-deepseek { }; + llm-docs = callPackage ../development/python-modules/llm-docs { }; + llm-echo = callPackage ../development/python-modules/llm-echo { }; llm-fragments-github = callPackage ../development/python-modules/llm-fragments-github { }; From e2e0a82a49c0c90f555e06e44733466af418bd8e Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:58:44 -0700 Subject: [PATCH 46/55] python3Packages.icudiff: init at 2.0.7 This was added as a by-name package but it's actually also a library. I've turned the tests off on Darwin; there's an odd utf-8 error and a permissions error, and both look related to the Nix sandboxing. --- pkgs/by-name/ic/icdiff/package.nix | 42 +------------ .../0001-Don-t-test-black-or-flake8.patch | 35 +++++++++++ .../python-modules/icdiff/default.nix | 61 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 100 insertions(+), 40 deletions(-) create mode 100644 pkgs/development/python-modules/icdiff/0001-Don-t-test-black-or-flake8.patch create mode 100644 pkgs/development/python-modules/icdiff/default.nix diff --git a/pkgs/by-name/ic/icdiff/package.nix b/pkgs/by-name/ic/icdiff/package.nix index d34b976f068e..98144d145cd0 100644 --- a/pkgs/by-name/ic/icdiff/package.nix +++ b/pkgs/by-name/ic/icdiff/package.nix @@ -1,41 +1,3 @@ -{ - lib, - python3Packages, - fetchFromGitHub, - bash, - git, - less, -}: +{ python3Packages }: -python3Packages.buildPythonApplication rec { - pname = "icdiff"; - version = "2.0.7"; - - src = fetchFromGitHub { - owner = "jeffkaufman"; - repo = "icdiff"; - tag = "release-${version}"; - hash = "sha256-XOw/xhPGlzi1hAgzQ1EtioUM476A+lQWLlvvaxd9j08="; - }; - - # error: could not lock config file /homeless-shelter/.gitconfig: No such file or directory - doCheck = false; - - nativeCheckInputs = [ - bash - git - less - ]; - - checkPhase = '' - patchShebangs test.sh - ./test.sh ${python3Packages.python.interpreter} - ''; - - meta = { - homepage = "https://www.jefftk.com/icdiff"; - description = "Side-by-side highlighted command line diffs"; - maintainers = [ ]; - license = lib.licenses.psfl; - }; -} +python3Packages.toPythonApplication python3Packages.icdiff diff --git a/pkgs/development/python-modules/icdiff/0001-Don-t-test-black-or-flake8.patch b/pkgs/development/python-modules/icdiff/0001-Don-t-test-black-or-flake8.patch new file mode 100644 index 000000000000..3e8a067c7841 --- /dev/null +++ b/pkgs/development/python-modules/icdiff/0001-Don-t-test-black-or-flake8.patch @@ -0,0 +1,35 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Philip Taron +Date: Thu, 29 May 2025 14:47:58 -0700 +Subject: [PATCH] Don't test black or flake8 + +Signed-off-by: Philip Taron +--- + test.sh | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/test.sh b/test.sh +index 1dd6c4be579e8a61d2d284b042c54cd2a1e0ff77..dc9ecab4a9097878a0a65c45df38a4fa25eb9fa2 100755 +--- a/test.sh ++++ b/test.sh +@@ -210,20 +210,6 @@ function ensure_installed() { + fi + } + +-ensure_installed "black" +-echo 'Running black formatter...' +-if ! black icdiff --quiet --line-length 79 --check; then +- echo "" +- echo 'Consider running `black icdiff --line-length 79`' +- fail +-fi +- +-ensure_installed "flake8" +-echo 'Running flake8 linter...' +-if ! flake8 icdiff; then +- fail +-fi +- + if ! $REGOLD; then + echo PASS + fi diff --git a/pkgs/development/python-modules/icdiff/default.nix b/pkgs/development/python-modules/icdiff/default.nix new file mode 100644 index 000000000000..b1bd7addd69b --- /dev/null +++ b/pkgs/development/python-modules/icdiff/default.nix @@ -0,0 +1,61 @@ +{ + lib, + stdenv, + python, + buildPythonPackage, + fetchFromGitHub, + setuptools, + pytestCheckHook, + writableTmpDirAsHomeHook, + pkgs, +}: +let + inherit (pkgs) bash git less; +in + +buildPythonPackage rec { + pname = "icdiff"; + version = "2.0.7"; + pyproject = true; + + src = fetchFromGitHub { + owner = "jeffkaufman"; + repo = "icdiff"; + tag = "release-${version}"; + hash = "sha256-XOw/xhPGlzi1hAgzQ1EtioUM476A+lQWLlvvaxd9j08="; + leaveDotGit = true; + }; + + patches = [ ./0001-Don-t-test-black-or-flake8.patch ]; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "icdiff" ]; + + nativeCheckInputs = [ + bash + git + less + writableTmpDirAsHomeHook + ]; + + # Odd behavior in the sandbox + doCheck = !stdenv.hostPlatform.isDarwin; + + checkPhase = '' + runHook preCheck + + patchShebangs test.sh + ./test.sh ${python.interpreter} + + runHook postCheck + ''; + + meta = { + description = "Improved colorized diff"; + homepage = "https://github.com/jeffkaufman/icdiff"; + changelog = "https://github.com/jeffkaufman/icdiff/releases/tag/release-${version}/CHANGELOG.md"; + license = lib.licenses.psfl; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index dfdcd352fe26..9ac94ee07768 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6650,6 +6650,8 @@ self: super: with self; { icalevents = callPackage ../development/python-modules/icalevents { }; + icdiff = callPackage ../development/python-modules/icdiff { }; + icecream = callPackage ../development/python-modules/icecream { }; iceportal = callPackage ../development/python-modules/iceportal { }; From 8ef5aeead23e5e15fbb82b4bdb2d4c266995ebdc Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 15:26:10 -0700 Subject: [PATCH 47/55] python3Packages.pytest-icudiff: init at 0.5-unstable-2024-09-04 --- .../python-modules/pytest-icdiff/default.nix | 52 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 54 insertions(+) create mode 100644 pkgs/development/python-modules/pytest-icdiff/default.nix diff --git a/pkgs/development/python-modules/pytest-icdiff/default.nix b/pkgs/development/python-modules/pytest-icdiff/default.nix new file mode 100644 index 000000000000..6b0ba2adfd42 --- /dev/null +++ b/pkgs/development/python-modules/pytest-icdiff/default.nix @@ -0,0 +1,52 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + icdiff, + pprintpp, + pytest, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "pytest-icdiff"; + version = "0.5-unstable-2024-09-04"; + pyproject = true; + + src = fetchFromGitHub { + owner = "hjwp"; + repo = "pytest-icdiff"; + rev = "6e2fb8de35e37428a9f7a268c8abb57e9ee285e5"; + hash = "sha256-kSeGz5IExldgi955XOEkQnc8uqxkbyvuDOdz9y3AFIY="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + pytest + icdiff + pprintpp + ]; + + # These are failing on the main branch; disable for now + disabledTests = [ + "test_long_dict" + "test_mutliline_strings_have_no_escaped_newlines" + ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "pytest_icdiff" ]; + + meta = { + description = "Better error messages in pytest assertions using icdiff"; + homepage = "https://github.com/hjwp/pytest-icdiff"; + license = lib.licenses.unlicense; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9ac94ee07768..b4acb2367c0a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13865,6 +13865,8 @@ self: super: with self; { pytest-httpx = callPackage ../development/python-modules/pytest-httpx { }; + pytest-icdiff = callPackage ../development/python-modules/pytest-icdiff { }; + pytest-image-diff = callPackage ../development/python-modules/pytest-image-diff { }; pytest-instafail = callPackage ../development/python-modules/pytest-instafail { }; From 6a92dd13019cd592515b073f57dc8411d5e48040 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 15:28:03 -0700 Subject: [PATCH 48/55] python3Packages.symbex: init at 2.0 --- .../python-modules/symbex/default.nix | 45 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 47 insertions(+) create mode 100644 pkgs/development/python-modules/symbex/default.nix diff --git a/pkgs/development/python-modules/symbex/default.nix b/pkgs/development/python-modules/symbex/default.nix new file mode 100644 index 000000000000..7790641ab4fc --- /dev/null +++ b/pkgs/development/python-modules/symbex/default.nix @@ -0,0 +1,45 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + click, + pytestCheckHook, + pyyaml, + pytest-icdiff, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "symbex"; + version = "2.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "symbex"; + tag = version; + hash = "sha256-swg98z4DpQJ5rq7tdsd3FofbYF7O5S+9ZR0weoM2DoI="; + }; + + build-system = [ setuptools ]; + + dependencies = [ click ]; + + pythonImportsCheck = [ "symbex" ]; + + nativeCheckInputs = [ + pytestCheckHook + pyyaml + pytest-icdiff + writableTmpDirAsHomeHook + ]; + + meta = { + description = "Ask questions of LLM documentation using LLM"; + homepage = "https://github.com/simonw/llm-docs"; + changelog = "https://github.com/simonw/llm-docs/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index b4acb2367c0a..954728996dbe 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -17075,6 +17075,8 @@ self: super: with self; { sybil = callPackage ../development/python-modules/sybil { }; + symbex = callPackage ../development/python-modules/symbex { }; + symbolic = callPackage ../development/python-modules/symbolic { }; symengine = callPackage ../development/python-modules/symengine { inherit (pkgs) symengine; }; From 2db9fe2fd0a179a69cf50136000e8dae94f6d623 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 15:34:51 -0700 Subject: [PATCH 49/55] python3Packages.llm-fragments-symbex: init at 0.1 --- .../llm-fragments-symbex/default.nix | 48 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 51 insertions(+) create mode 100644 pkgs/development/python-modules/llm-fragments-symbex/default.nix diff --git a/pkgs/development/python-modules/llm-fragments-symbex/default.nix b/pkgs/development/python-modules/llm-fragments-symbex/default.nix new file mode 100644 index 000000000000..2c1611ab2e27 --- /dev/null +++ b/pkgs/development/python-modules/llm-fragments-symbex/default.nix @@ -0,0 +1,48 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + symbex, + llm, + llm-fragments-symbex, + pytestCheckHook, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-fragments-symbex"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-fragments-symbex"; + tag = version; + hash = "sha256-LECMHv4tGMCY60JU68y2Sfxp97Px7T/RJVhYVDSFCy4="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ symbex ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_fragments_symbex" ]; + + passthru.tests = llm.mkPluginTest llm-fragments-symbex; + + meta = { + description = "LLM fragment loader for Python symbols"; + homepage = "https://github.com/simonw/llm-fragments-symbex"; + changelog = "https://github.com/simonw/llm-fragments-symbex/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 3724793c45d2..7a87bd3c121f 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -71,6 +71,7 @@ let llm-fragments-github ? false, llm-fragments-pypi ? false, llm-fragments-reader ? false, + llm-fragments-symbex ? false, llm-gemini ? false, llm-gguf ? false, llm-grok ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 954728996dbe..df094c7711b4 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8314,6 +8314,8 @@ self: super: with self; { llm-fragments-reader = callPackage ../development/python-modules/llm-fragments-reader { }; + llm-fragments-symbex = callPackage ../development/python-modules/llm-fragments-symbex { }; + llm-gemini = callPackage ../development/python-modules/llm-gemini { }; llm-gguf = callPackage ../development/python-modules/llm-gguf { }; From cedea09b469f909744058e12ad260630e54cc980 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 15:42:40 -0700 Subject: [PATCH 50/55] python3Packages.files-to-prompt: init at 0.6 It was previously packaged in `pkgs/by-name`, but is also a Python package in addition to an application. --- pkgs/by-name/fi/files-to-prompt/package.nix | 44 +----------------- .../files-to-prompt/default.nix | 45 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 49 insertions(+), 42 deletions(-) create mode 100644 pkgs/development/python-modules/files-to-prompt/default.nix diff --git a/pkgs/by-name/fi/files-to-prompt/package.nix b/pkgs/by-name/fi/files-to-prompt/package.nix index b671e52e9504..bba3859edb6b 100644 --- a/pkgs/by-name/fi/files-to-prompt/package.nix +++ b/pkgs/by-name/fi/files-to-prompt/package.nix @@ -1,43 +1,3 @@ -{ - lib, - python3Packages, - fetchFromGitHub, - versionCheckHook, -}: +{ python3Packages }: -python3Packages.buildPythonApplication rec { - pname = "files-to-prompt"; - version = "0.6"; - pyproject = true; - - src = fetchFromGitHub { - owner = "simonw"; - repo = "files-to-prompt"; - tag = version; - hash = "sha256-LWp/DNP3bsh7/goQGkpi4x2N11tRuhLVh2J8H6AUH0w="; - }; - - build-system = with python3Packages; [ - setuptools - ]; - - dependencies = with python3Packages; [ - click - ]; - - nativeCheckInputs = with python3Packages; [ - pytestCheckHook - versionCheckHook - ]; - - versionCheckProgramArg = "--version"; - - meta = { - description = "Concatenate a directory full of files into a single prompt for use with LLMs"; - homepage = "https://github.com/simonw/files-to-prompt/"; - changelog = "https://github.com/simonw/files-to-prompt/releases/tag/${src.tag}"; - license = lib.licenses.asl20; - maintainers = with lib.maintainers; [ erethon ]; - mainProgram = "files-to-prompt"; - }; -} +python3Packages.toPythonApplication python3Packages.files-to-prompt diff --git a/pkgs/development/python-modules/files-to-prompt/default.nix b/pkgs/development/python-modules/files-to-prompt/default.nix new file mode 100644 index 000000000000..f4392672429a --- /dev/null +++ b/pkgs/development/python-modules/files-to-prompt/default.nix @@ -0,0 +1,45 @@ +{ + lib, + click, + setuptools, + fetchFromGitHub, + buildPythonPackage, + pytestCheckHook, + versionCheckHook, +}: + +buildPythonPackage rec { + pname = "files-to-prompt"; + version = "0.6"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "files-to-prompt"; + tag = version; + hash = "sha256-LWp/DNP3bsh7/goQGkpi4x2N11tRuhLVh2J8H6AUH0w="; + }; + + build-system = [ setuptools ]; + + dependencies = [ click ]; + + nativeCheckInputs = [ + pytestCheckHook + versionCheckHook + ]; + + versionCheckProgramArg = "--version"; + + meta = { + mainProgram = "files-to-prompt"; + description = "Concatenate a directory full of files into a single prompt for use with LLMs"; + homepage = "https://github.com/simonw/files-to-prompt"; + changelog = "https://github.com/simonw/files-to-prompt/releases/tag/${src.tag}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ + erethon + philiptaron + ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index df094c7711b4..9043f37f599f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4967,6 +4967,8 @@ self: super: with self; { filelock = callPackage ../development/python-modules/filelock { }; + files-to-prompt = callPackage ../development/python-modules/files-to-prompt { }; + filetype = callPackage ../development/python-modules/filetype { }; filterpy = callPackage ../development/python-modules/filterpy { }; From 5aed3c68318cc13423e70a3c5f9ba3add173d212 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 15:59:15 -0700 Subject: [PATCH 51/55] python3Packages.llm-git: init at 0.2.2 --- .../python-modules/llm-git/default.nix | 62 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 65 insertions(+) create mode 100644 pkgs/development/python-modules/llm-git/default.nix diff --git a/pkgs/development/python-modules/llm-git/default.nix b/pkgs/development/python-modules/llm-git/default.nix new file mode 100644 index 000000000000..39c66027c601 --- /dev/null +++ b/pkgs/development/python-modules/llm-git/default.nix @@ -0,0 +1,62 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + click, + deepmerge, + pyyaml, + rich, + pygments, + llm, + llm-git, + pytestCheckHook, + pytest-cov-stub, + pytest-asyncio, + pytest-httpx, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-git"; + version = "0.2.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "OttoAllmendinger"; + repo = "llm-git"; + tag = "v${version}"; + hash = "sha256-LcIsJPQgZ4gj2t7sSa0Wu35WHWYyquZZTS/UxojH+XU="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ + click + deepmerge + pyyaml + rich + pygments + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-cov-stub + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_git" ]; + + passthru.tests = llm.mkPluginTest llm-git; + + meta = { + description = "AI-powered Git commands for the LLM CLI tool"; + homepage = "https://github.com/OttoAllmendinger/llm-git"; + changelog = "https://github.com/OttoAllmendinger/llm-git/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 7a87bd3c121f..feaf4006c6a2 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -74,6 +74,7 @@ let llm-fragments-symbex ? false, llm-gemini ? false, llm-gguf ? false, + llm-git ? false, llm-grok ? false, llm-groq ? false, llm-hacker-news ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9043f37f599f..5e7d1c43ff59 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8322,6 +8322,8 @@ self: super: with self; { llm-gguf = callPackage ../development/python-modules/llm-gguf { }; + llm-git = callPackage ../development/python-modules/llm-git { }; + llm-grok = callPackage ../development/python-modules/llm-grok { }; llm-groq = callPackage ../development/python-modules/llm-groq { }; From 727e10522cfba95c6935fc0ceee774376d8c83ba Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 16:06:40 -0700 Subject: [PATCH 52/55] llm: cap the derivation name to something sensible --- .../development/python-modules/llm/default.nix | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index feaf4006c6a2..2be447500aac 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -99,11 +99,19 @@ let # Filter to just the attributes which are set to a true value. setArgs = lib.filterAttrs (name: lib.id) args; - # Make a string with those names separated with a dash. - setArgsStr = lib.concatStringsSep "-" (lib.attrNames setArgs); - - # Make the derivation name reflect what's inside it. - drvName = if lib.stringLength setArgsStr == 0 then "llm" else "llm-with-${setArgsStr}"; + # Make the derivation name reflect what's inside it, up to a certain limit. + setArgNames = lib.attrNames setArgs; + drvName = + let + len = builtins.length setArgNames; + in + if len == 0 then + "llm-${llm.version}" + else if len > 20 then + "llm-${llm.version}-with-${toString len}-plugins" + else + # Make a string with those names separated with a dash. + "llm-${llm.version}-with-${lib.concatStringsSep "-" setArgNames}"; # Make a python environment with just those plugins. python-environment = python.withPackages ( From 6fba136127cd770810372af0894b603d8d1041c1 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Thu, 29 May 2025 14:17:08 -0700 Subject: [PATCH 53/55] python3Packages.llm-pdf-to-images: init at 0.1 --- .../llm-pdf-to-images/default.nix | 49 +++++++++++++++++++ .../python-modules/llm/default.nix | 1 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 52 insertions(+) create mode 100644 pkgs/development/python-modules/llm-pdf-to-images/default.nix diff --git a/pkgs/development/python-modules/llm-pdf-to-images/default.nix b/pkgs/development/python-modules/llm-pdf-to-images/default.nix new file mode 100644 index 000000000000..bdf5d4ae785f --- /dev/null +++ b/pkgs/development/python-modules/llm-pdf-to-images/default.nix @@ -0,0 +1,49 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + pymupdf, + llm, + llm-pdf-to-images, + pytestCheckHook, + pytest-asyncio, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage rec { + pname = "llm-pdf-to-images"; + version = "0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "simonw"; + repo = "llm-pdf-to-images"; + tag = version; + hash = "sha256-UWtCPdKrGE93NNjCroct5fPhq1pWIkngXXtRb+BHm8k="; + }; + + build-system = [ + setuptools + llm + ]; + + dependencies = [ pymupdf ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + pythonImportsCheck = [ "llm_pdf_to_images" ]; + + passthru.tests = llm.mkPluginTest llm-pdf-to-images; + + meta = { + description = "LLM fragment plugin to load a PDF as a sequence of images"; + homepage = "https://github.com/simonw/llm-pdf-to-images"; + changelog = "https://github.com/simonw/llm-pdf-to-images/releases/tag/${version}/CHANGELOG.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ philiptaron ]; + }; +} diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index 2be447500aac..f237f3fbbecc 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -84,6 +84,7 @@ let llm-ollama ? false, llm-openai-plugin ? false, llm-openrouter ? false, + llm-pdf-to-images ? false, llm-sentence-transformers ? false, llm-templates-fabric ? false, llm-templates-github ? false, diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5e7d1c43ff59..086a295a8ed1 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8342,6 +8342,8 @@ self: super: with self; { llm-openrouter = callPackage ../development/python-modules/llm-openrouter { }; + llm-pdf-to-images = callPackage ../development/python-modules/llm-pdf-to-images { }; + llm-sentence-transformers = callPackage ../development/python-modules/llm-sentence-transformers { }; llm-templates-fabric = callPackage ../development/python-modules/llm-templates-fabric { }; From 42fa505cf79a73532642eb2bda4b009e7bac87ee Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Fri, 30 May 2025 17:13:35 -0700 Subject: [PATCH 54/55] python3Packages.llm-*: use llm in the dependencies There's no circular dependency problems anymore. --- .../python-modules/llm-anthropic/default.nix | 6 ++++-- pkgs/development/python-modules/llm-cmd/default.nix | 13 +++++++------ .../python-modules/llm-command-r/default.nix | 8 ++++---- .../python-modules/llm-deepseek/default.nix | 7 ++----- .../development/python-modules/llm-docs/default.nix | 7 +++---- .../development/python-modules/llm-echo/default.nix | 7 +++---- .../python-modules/llm-fragments-github/default.nix | 8 +++----- .../python-modules/llm-fragments-pypi/default.nix | 7 ++++--- .../python-modules/llm-fragments-reader/default.nix | 7 +++---- .../python-modules/llm-fragments-symbex/default.nix | 10 +++++----- .../python-modules/llm-gemini/default.nix | 6 ++---- .../development/python-modules/llm-gguf/default.nix | 6 ++---- pkgs/development/python-modules/llm-git/default.nix | 2 +- .../development/python-modules/llm-grok/default.nix | 6 ++---- .../development/python-modules/llm-groq/default.nix | 6 ++++-- .../python-modules/llm-hacker-news/default.nix | 8 +++----- pkgs/development/python-modules/llm-jq/default.nix | 7 ++----- .../python-modules/llm-llama-server/default.nix | 9 +++------ .../python-modules/llm-mistral/default.nix | 2 +- .../python-modules/llm-ollama/default.nix | 7 ++----- .../python-modules/llm-openai-plugin/default.nix | 6 ++---- .../python-modules/llm-openrouter/default.nix | 2 +- .../python-modules/llm-pdf-to-images/default.nix | 10 +++++----- .../llm-sentence-transformers/default.nix | 6 ++---- .../python-modules/llm-templates-fabric/default.nix | 7 ++----- .../python-modules/llm-templates-github/default.nix | 7 ++----- .../python-modules/llm-tools-datasette/default.nix | 7 +++---- .../python-modules/llm-tools-quickjs/default.nix | 10 +++++----- .../python-modules/llm-tools-simpleeval/default.nix | 10 +++++----- .../python-modules/llm-tools-sqlite/default.nix | 7 +++---- .../python-modules/llm-venice/default.nix | 7 ++----- .../python-modules/llm-video-frames/default.nix | 7 ++----- pkgs/development/python-modules/symbex/default.nix | 6 +++--- 33 files changed, 97 insertions(+), 134 deletions(-) diff --git a/pkgs/development/python-modules/llm-anthropic/default.nix b/pkgs/development/python-modules/llm-anthropic/default.nix index f78daf8b73ed..41bc86f10a15 100644 --- a/pkgs/development/python-modules/llm-anthropic/default.nix +++ b/pkgs/development/python-modules/llm-anthropic/default.nix @@ -26,10 +26,12 @@ buildPythonPackage rec { build-system = [ setuptools - llm ]; - dependencies = [ anthropic ]; + dependencies = [ + anthropic + llm + ]; nativeCheckInputs = [ pytestCheckHook diff --git a/pkgs/development/python-modules/llm-cmd/default.nix b/pkgs/development/python-modules/llm-cmd/default.nix index e883cb87ecbc..30b1cd22250c 100644 --- a/pkgs/development/python-modules/llm-cmd/default.nix +++ b/pkgs/development/python-modules/llm-cmd/default.nix @@ -27,13 +27,11 @@ buildPythonPackage rec { # Only needed until https://github.com/simonw/llm-cmd/pull/18 is merged and released patches = [ ./fix-test.patch ]; - build-system = [ - setuptools - # Follows the reasoning from https://github.com/NixOS/nixpkgs/pull/327800#discussion_r1681586659 about including llm in build-system - llm - ]; + + build-system = [ setuptools ]; dependencies = [ + llm prompt-toolkit pygments ]; @@ -53,6 +51,9 @@ buildPythonPackage rec { homepage = "https://github.com/simonw/llm-cmd"; changelog = "https://github.com/simonw/llm-cmd/releases/tag/${version}"; license = lib.licenses.asl20; - maintainers = with lib.maintainers; [ erethon ]; + maintainers = with lib.maintainers; [ + erethon + philiptaron + ]; }; } diff --git a/pkgs/development/python-modules/llm-command-r/default.nix b/pkgs/development/python-modules/llm-command-r/default.nix index af96a7e8d057..386973b2df4a 100644 --- a/pkgs/development/python-modules/llm-command-r/default.nix +++ b/pkgs/development/python-modules/llm-command-r/default.nix @@ -23,13 +23,13 @@ buildPythonPackage rec { hash = "sha256-PxICRds9NJQP64HwoL7Oxd39yaIrMdAyQEbhaumJCgo="; }; - build-system = [ - setuptools + build-system = [ setuptools ]; + + dependencies = [ + cohere llm ]; - dependencies = [ cohere ]; - nativeCheckInputs = [ pytestCheckHook pytest-recording diff --git a/pkgs/development/python-modules/llm-deepseek/default.nix b/pkgs/development/python-modules/llm-deepseek/default.nix index 8ff63bd96064..c0cb3668dc7f 100644 --- a/pkgs/development/python-modules/llm-deepseek/default.nix +++ b/pkgs/development/python-modules/llm-deepseek/default.nix @@ -19,12 +19,9 @@ buildPythonPackage rec { hash = "sha256-yrNvIGnU9Q/0H786DsM0wGEwfxZYIk8IXhqC4mWaQAA="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; pythonImportsCheck = [ "llm_deepseek" ]; diff --git a/pkgs/development/python-modules/llm-docs/default.nix b/pkgs/development/python-modules/llm-docs/default.nix index 8ed974571607..c1d07f8b1c49 100644 --- a/pkgs/development/python-modules/llm-docs/default.nix +++ b/pkgs/development/python-modules/llm-docs/default.nix @@ -19,10 +19,9 @@ buildPythonPackage rec { hash = "sha256-+Ha6L2h8p/yA073MfO2Uvd6E4bKA2xAvaBWtvjqglOw="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; pythonImportsCheck = [ "llm_docs" ]; diff --git a/pkgs/development/python-modules/llm-echo/default.nix b/pkgs/development/python-modules/llm-echo/default.nix index 756c4a743b46..588b6f64909d 100644 --- a/pkgs/development/python-modules/llm-echo/default.nix +++ b/pkgs/development/python-modules/llm-echo/default.nix @@ -21,10 +21,9 @@ buildPythonPackage rec { hash = "sha256-4345UIyaQx+mYYBAFD5AaX5YbjbnJQt8bKMD5Vl8VJc="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; nativeCheckInputs = [ pytestCheckHook diff --git a/pkgs/development/python-modules/llm-fragments-github/default.nix b/pkgs/development/python-modules/llm-fragments-github/default.nix index 9b8c3d3c5a72..cf4874805c79 100644 --- a/pkgs/development/python-modules/llm-fragments-github/default.nix +++ b/pkgs/development/python-modules/llm-fragments-github/default.nix @@ -19,11 +19,9 @@ buildPythonPackage rec { hash = "sha256-7i1WRix5AAEG5EXJqtaU+QY56aL0SePdqz84z+C+iYM="; }; - build-system = [ - setuptools - llm - ]; - dependencies = [ ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; pythonImportsCheck = [ "llm_fragments_github" ]; diff --git a/pkgs/development/python-modules/llm-fragments-pypi/default.nix b/pkgs/development/python-modules/llm-fragments-pypi/default.nix index d30135b5378d..c07f2cbc4f01 100644 --- a/pkgs/development/python-modules/llm-fragments-pypi/default.nix +++ b/pkgs/development/python-modules/llm-fragments-pypi/default.nix @@ -20,11 +20,12 @@ buildPythonPackage rec { hash = "sha256-1XqAmuZ1WMHD6JbLbLsK9K4Uf3FvvKJD4mn1G2J/3C8="; }; - build-system = [ - hatchling + build-system = [ hatchling ]; + + dependencies = [ + httpx llm ]; - dependencies = [ httpx ]; pythonImportsCheck = [ "llm_fragments_pypi" ]; diff --git a/pkgs/development/python-modules/llm-fragments-reader/default.nix b/pkgs/development/python-modules/llm-fragments-reader/default.nix index 72aa5aaea539..b3b5aa4ad9ce 100644 --- a/pkgs/development/python-modules/llm-fragments-reader/default.nix +++ b/pkgs/development/python-modules/llm-fragments-reader/default.nix @@ -25,10 +25,9 @@ buildPythonPackage rec { hash = "sha256-2xdvOpMGsTtnerrlGiVSHoJrM+GQ7Zgv+zn2SAwYAL4="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; nativeCheckInputs = [ pytestCheckHook diff --git a/pkgs/development/python-modules/llm-fragments-symbex/default.nix b/pkgs/development/python-modules/llm-fragments-symbex/default.nix index 2c1611ab2e27..c476c6a9ec6e 100644 --- a/pkgs/development/python-modules/llm-fragments-symbex/default.nix +++ b/pkgs/development/python-modules/llm-fragments-symbex/default.nix @@ -22,12 +22,12 @@ buildPythonPackage rec { hash = "sha256-LECMHv4tGMCY60JU68y2Sfxp97Px7T/RJVhYVDSFCy4="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ symbex ]; + dependencies = [ + llm + symbex + ]; nativeCheckInputs = [ pytestCheckHook diff --git a/pkgs/development/python-modules/llm-gemini/default.nix b/pkgs/development/python-modules/llm-gemini/default.nix index 4b746366fbdb..ab0976f2a97b 100644 --- a/pkgs/development/python-modules/llm-gemini/default.nix +++ b/pkgs/development/python-modules/llm-gemini/default.nix @@ -25,14 +25,12 @@ buildPythonPackage rec { hash = "sha256-aCP0YjcghzpgceuZRKGTN15wm7OIPCwcJAJJBxh78f4="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; dependencies = [ httpx ijson + llm ]; nativeCheckInputs = [ diff --git a/pkgs/development/python-modules/llm-gguf/default.nix b/pkgs/development/python-modules/llm-gguf/default.nix index 6d72228e943a..1a399f3861e6 100644 --- a/pkgs/development/python-modules/llm-gguf/default.nix +++ b/pkgs/development/python-modules/llm-gguf/default.nix @@ -25,13 +25,11 @@ buildPythonPackage rec { hash = "sha256-ihMOiQnTfgZKICVDoQHLOMahrd+GiB+HwWFBMyIcs0A="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; dependencies = [ httpx + llm llama-cpp-python ]; diff --git a/pkgs/development/python-modules/llm-git/default.nix b/pkgs/development/python-modules/llm-git/default.nix index 39c66027c601..957a54581de6 100644 --- a/pkgs/development/python-modules/llm-git/default.nix +++ b/pkgs/development/python-modules/llm-git/default.nix @@ -31,12 +31,12 @@ buildPythonPackage rec { build-system = [ setuptools - llm ]; dependencies = [ click deepmerge + llm pyyaml rich pygments diff --git a/pkgs/development/python-modules/llm-grok/default.nix b/pkgs/development/python-modules/llm-grok/default.nix index 6c8baca68f7f..a2c5ac03adc3 100644 --- a/pkgs/development/python-modules/llm-grok/default.nix +++ b/pkgs/development/python-modules/llm-grok/default.nix @@ -25,12 +25,10 @@ buildPythonPackage rec { hash = "sha256-OeeU/53XKucLCtGvnl5RWc/QqF0TprB/SO8pnnK5fdw="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; dependencies = [ + llm httpx httpx-sse rich diff --git a/pkgs/development/python-modules/llm-groq/default.nix b/pkgs/development/python-modules/llm-groq/default.nix index 8f2a04aa4f72..55364db0921b 100644 --- a/pkgs/development/python-modules/llm-groq/default.nix +++ b/pkgs/development/python-modules/llm-groq/default.nix @@ -22,10 +22,12 @@ buildPythonPackage rec { build-system = [ setuptools - llm ]; - dependencies = [ groq ]; + dependencies = [ + groq + llm + ]; pythonImportsCheck = [ "llm_groq" ]; diff --git a/pkgs/development/python-modules/llm-hacker-news/default.nix b/pkgs/development/python-modules/llm-hacker-news/default.nix index 3029de613c74..6c481e0212b6 100644 --- a/pkgs/development/python-modules/llm-hacker-news/default.nix +++ b/pkgs/development/python-modules/llm-hacker-news/default.nix @@ -19,11 +19,9 @@ buildPythonPackage rec { hash = "sha256-pywx9TAN/mnGR6Vv6YsPhLO4R5Geagw/bcydQjvTH5s="; }; - build-system = [ - setuptools - llm - ]; - dependencies = [ ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; pythonImportsCheck = [ "llm_hacker_news" ]; diff --git a/pkgs/development/python-modules/llm-jq/default.nix b/pkgs/development/python-modules/llm-jq/default.nix index 64c3149e8b96..f88e6ae566f4 100644 --- a/pkgs/development/python-modules/llm-jq/default.nix +++ b/pkgs/development/python-modules/llm-jq/default.nix @@ -18,12 +18,9 @@ buildPythonPackage rec { hash = "sha256-Mf/tbB9+UdmSRpulqv5Wagr8wjDcRrNs2741DNQZhO4="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; pythonImportsCheck = [ "llm_jq" ]; diff --git a/pkgs/development/python-modules/llm-llama-server/default.nix b/pkgs/development/python-modules/llm-llama-server/default.nix index e6fcb5b3498c..cb0887020d41 100644 --- a/pkgs/development/python-modules/llm-llama-server/default.nix +++ b/pkgs/development/python-modules/llm-llama-server/default.nix @@ -21,12 +21,9 @@ buildPythonPackage rec { hash = "sha256-jtFSfGu3JhNUfTsspY+OFLTMt9jQrh6R05sK9KBOKTE="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; nativeCheckInputs = [ pytestCheckHook @@ -39,7 +36,7 @@ buildPythonPackage rec { meta = { description = "LLM plugin providing access to Mistral models using the Mistral API"; - homepage = "Interact with llama-server models"; + homepage = "https://github.com/simonw/llm-llama-server"; changelog = "https://github.com/simonw/llm-llama-server/releases/tag/${version}/CHANGELOG.md"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ philiptaron ]; diff --git a/pkgs/development/python-modules/llm-mistral/default.nix b/pkgs/development/python-modules/llm-mistral/default.nix index 1aa42abacc6e..773868d5a875 100644 --- a/pkgs/development/python-modules/llm-mistral/default.nix +++ b/pkgs/development/python-modules/llm-mistral/default.nix @@ -27,12 +27,12 @@ buildPythonPackage rec { build-system = [ setuptools - llm ]; dependencies = [ httpx httpx-sse + llm ]; nativeCheckInputs = [ diff --git a/pkgs/development/python-modules/llm-ollama/default.nix b/pkgs/development/python-modules/llm-ollama/default.nix index fa7de12f294c..0df527ee0241 100644 --- a/pkgs/development/python-modules/llm-ollama/default.nix +++ b/pkgs/development/python-modules/llm-ollama/default.nix @@ -32,14 +32,11 @@ buildPythonPackage rec { hash = "sha256-iwrDqrPt/zwXypBwD7zDAcen4fQq6PXl7Xj5VUL2KWA="; }; - build-system = [ - setuptools - # Follows the reasoning from https://github.com/NixOS/nixpkgs/pull/327800#discussion_r1681586659 about including llm in build-system - llm - ]; + build-system = [ setuptools ]; dependencies = [ click + llm ollama pydantic ]; diff --git a/pkgs/development/python-modules/llm-openai-plugin/default.nix b/pkgs/development/python-modules/llm-openai-plugin/default.nix index 7543a341f3c1..49fd64c6acd2 100644 --- a/pkgs/development/python-modules/llm-openai-plugin/default.nix +++ b/pkgs/development/python-modules/llm-openai-plugin/default.nix @@ -25,12 +25,10 @@ buildPythonPackage rec { hash = "sha256-UoUxCwR+qOUufHuS0gw6A5Q7sB77VO4HYuMjFGN7mhA="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; dependencies = [ + llm openai ]; diff --git a/pkgs/development/python-modules/llm-openrouter/default.nix b/pkgs/development/python-modules/llm-openrouter/default.nix index 9c576d88e536..ada713681c69 100644 --- a/pkgs/development/python-modules/llm-openrouter/default.nix +++ b/pkgs/development/python-modules/llm-openrouter/default.nix @@ -27,11 +27,11 @@ buildPythonPackage rec { build-system = [ setuptools - llm ]; dependencies = [ httpx + llm openai ]; diff --git a/pkgs/development/python-modules/llm-pdf-to-images/default.nix b/pkgs/development/python-modules/llm-pdf-to-images/default.nix index bdf5d4ae785f..fd39db4914dd 100644 --- a/pkgs/development/python-modules/llm-pdf-to-images/default.nix +++ b/pkgs/development/python-modules/llm-pdf-to-images/default.nix @@ -23,12 +23,12 @@ buildPythonPackage rec { hash = "sha256-UWtCPdKrGE93NNjCroct5fPhq1pWIkngXXtRb+BHm8k="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ pymupdf ]; + dependencies = [ + llm + pymupdf + ]; nativeCheckInputs = [ pytestCheckHook diff --git a/pkgs/development/python-modules/llm-sentence-transformers/default.nix b/pkgs/development/python-modules/llm-sentence-transformers/default.nix index a9a702d0fa07..db7439998e87 100644 --- a/pkgs/development/python-modules/llm-sentence-transformers/default.nix +++ b/pkgs/development/python-modules/llm-sentence-transformers/default.nix @@ -23,13 +23,11 @@ buildPythonPackage rec { hash = "sha256-FDDMItKFEYEptiL3EHKgKVxClqRU9RaM3uD3xP0F4OM="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; dependencies = [ einops + llm sentence-transformers ]; diff --git a/pkgs/development/python-modules/llm-templates-fabric/default.nix b/pkgs/development/python-modules/llm-templates-fabric/default.nix index 979f9f8bae0f..c966d21915ea 100644 --- a/pkgs/development/python-modules/llm-templates-fabric/default.nix +++ b/pkgs/development/python-modules/llm-templates-fabric/default.nix @@ -19,12 +19,9 @@ buildPythonPackage rec { hash = "sha256-tfkSjeT9WstUsNCtVr3fMzqELFCtfYphqf3xFGvHaV0="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; pythonImportsCheck = [ "llm_templates_fabric" ]; diff --git a/pkgs/development/python-modules/llm-templates-github/default.nix b/pkgs/development/python-modules/llm-templates-github/default.nix index 58a78512959d..ccf0d937f05d 100644 --- a/pkgs/development/python-modules/llm-templates-github/default.nix +++ b/pkgs/development/python-modules/llm-templates-github/default.nix @@ -19,12 +19,9 @@ buildPythonPackage rec { hash = "sha256-SFXrvpKrvfIP0JmXQt6OZ52kne4AEtiggbshyac9XQc="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; pythonImportsCheck = [ "llm_templates_github" ]; diff --git a/pkgs/development/python-modules/llm-tools-datasette/default.nix b/pkgs/development/python-modules/llm-tools-datasette/default.nix index 5229c71bb6ea..4320fa797a1e 100644 --- a/pkgs/development/python-modules/llm-tools-datasette/default.nix +++ b/pkgs/development/python-modules/llm-tools-datasette/default.nix @@ -23,10 +23,9 @@ buildPythonPackage rec { hash = "sha256-Us9bPk2qpTlgJqQ0Cl9QdeqW+h8j+pmnkriM0WXEyyA="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; nativeCheckInputs = [ llm-echo diff --git a/pkgs/development/python-modules/llm-tools-quickjs/default.nix b/pkgs/development/python-modules/llm-tools-quickjs/default.nix index b8f934c5a5b6..ad447a01ade1 100644 --- a/pkgs/development/python-modules/llm-tools-quickjs/default.nix +++ b/pkgs/development/python-modules/llm-tools-quickjs/default.nix @@ -23,12 +23,12 @@ buildPythonPackage rec { hash = "sha256-Si3VcHnRUj8Q/N8pRhltPOM6K64TX9DBH/u4WQxQJjQ="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ quickjs ]; + dependencies = [ + llm + quickjs + ]; nativeCheckInputs = [ llm-echo diff --git a/pkgs/development/python-modules/llm-tools-simpleeval/default.nix b/pkgs/development/python-modules/llm-tools-simpleeval/default.nix index 50a9a3f9ba24..06b5a31f8ea5 100644 --- a/pkgs/development/python-modules/llm-tools-simpleeval/default.nix +++ b/pkgs/development/python-modules/llm-tools-simpleeval/default.nix @@ -23,12 +23,12 @@ buildPythonPackage rec { hash = "sha256-IOmYu7zoim7Co/xIm5VLaGkCPI0o+2Nb2Pu3U2fH0BU="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ simpleeval ]; + dependencies = [ + llm + simpleeval + ]; nativeCheckInputs = [ llm-echo diff --git a/pkgs/development/python-modules/llm-tools-sqlite/default.nix b/pkgs/development/python-modules/llm-tools-sqlite/default.nix index 283084b8efc0..494c4c5994e5 100644 --- a/pkgs/development/python-modules/llm-tools-sqlite/default.nix +++ b/pkgs/development/python-modules/llm-tools-sqlite/default.nix @@ -22,10 +22,9 @@ buildPythonPackage rec { hash = "sha256-VAmK4cXzZWTWCU92TwMdhNJPvYPZ88t5BZe8vo60SZY="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; + + dependencies = [ llm ]; nativeCheckInputs = [ llm-echo diff --git a/pkgs/development/python-modules/llm-venice/default.nix b/pkgs/development/python-modules/llm-venice/default.nix index 8885b55595ee..df24b6a20967 100644 --- a/pkgs/development/python-modules/llm-venice/default.nix +++ b/pkgs/development/python-modules/llm-venice/default.nix @@ -19,12 +19,9 @@ buildPythonPackage rec { hash = "sha256-vsb3oXGr+2FDJnTwYomICfald1ptben28hAJ8ypKiBI="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; # Reaches out to the real API doCheck = false; diff --git a/pkgs/development/python-modules/llm-video-frames/default.nix b/pkgs/development/python-modules/llm-video-frames/default.nix index b519b37bcb24..1591ead64395 100644 --- a/pkgs/development/python-modules/llm-video-frames/default.nix +++ b/pkgs/development/python-modules/llm-video-frames/default.nix @@ -19,12 +19,9 @@ buildPythonPackage rec { hash = "sha256-brTyBymoFuvSQzsD/4aWzFGCrh3yEmWbpsUNGKT9dcU="; }; - build-system = [ - setuptools - llm - ]; + build-system = [ setuptools ]; - dependencies = [ ]; + dependencies = [ llm ]; pythonImportsCheck = [ "llm_video_frames" ]; diff --git a/pkgs/development/python-modules/symbex/default.nix b/pkgs/development/python-modules/symbex/default.nix index 7790641ab4fc..47405f4b8223 100644 --- a/pkgs/development/python-modules/symbex/default.nix +++ b/pkgs/development/python-modules/symbex/default.nix @@ -36,9 +36,9 @@ buildPythonPackage rec { ]; meta = { - description = "Ask questions of LLM documentation using LLM"; - homepage = "https://github.com/simonw/llm-docs"; - changelog = "https://github.com/simonw/llm-docs/releases/tag/${version}/CHANGELOG.md"; + description = "Find the Python code for specified symbols"; + homepage = "https://github.com/simonw/symbex"; + changelog = "https://github.com/simonw/symbex/releases/tag/${version}/CHANGELOG.md"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ philiptaron ]; }; From 837cff79ca793c40db34781fcbd27c81949dbf8c Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Fri, 30 May 2025 17:24:34 -0700 Subject: [PATCH 55/55] llm: include the tests for all plugins as part of passthru.tests --- pkgs/development/python-modules/llm/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/python-modules/llm/default.nix b/pkgs/development/python-modules/llm/default.nix index f237f3fbbecc..70d606ec556b 100644 --- a/pkgs/development/python-modules/llm/default.nix +++ b/pkgs/development/python-modules/llm/default.nix @@ -231,6 +231,9 @@ let mkPluginTest = plugin: { ${plugin.pname} = callPackage ./mk-plugin-test.nix { inherit llm plugin; }; }; + + # include tests for all the plugins + tests = lib.mergeAttrsList (map (name: python.pkgs.${name}.tests) withPluginsArgNames); }; meta = {