mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 05:05:29 +03:00
llm: re-add withPlugins
, add many plugins, 0.25 -> 0.26 (#411459)
This commit is contained in:
commit
24f4a11d7b
54 changed files with 1892 additions and 330 deletions
|
@ -1,43 +1,3 @@
|
||||||
{
|
{ python3Packages }:
|
||||||
lib,
|
|
||||||
python3Packages,
|
|
||||||
fetchFromGitHub,
|
|
||||||
versionCheckHook,
|
|
||||||
}:
|
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.toPythonApplication python3Packages.files-to-prompt
|
||||||
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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,41 +1,3 @@
|
||||||
{
|
{ python3Packages }:
|
||||||
lib,
|
|
||||||
python3Packages,
|
|
||||||
fetchFromGitHub,
|
|
||||||
bash,
|
|
||||||
git,
|
|
||||||
less,
|
|
||||||
}:
|
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.toPythonApplication python3Packages.icdiff
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
46
pkgs/by-name/ll/llm/package.nix
Normal file
46
pkgs/by-name/ll/llm/package.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# The `...` allows this derivation to be overridden with `enable-<llm-plugin>`.
|
||||||
|
#
|
||||||
|
# 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) llm;
|
||||||
|
|
||||||
|
hasEnablePrefix = lib.hasPrefix "enable-";
|
||||||
|
addEnablePrefix = name: "enable-${name}";
|
||||||
|
removeEnablePrefix = lib.removePrefix "enable-";
|
||||||
|
|
||||||
|
# Filter to just the attributes which are named "enable-<plugin-name>"
|
||||||
|
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
|
||||||
|
|
||||||
|
assert lib.assertMsg (lib.length unknownNames == 0) unknownNamesDiagnostic;
|
||||||
|
|
||||||
|
llm.withPlugins pluginArgs
|
45
pkgs/development/python-modules/files-to-prompt/default.nix
Normal file
45
pkgs/development/python-modules/files-to-prompt/default.nix
Normal file
|
@ -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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Philip Taron <philip.taron@gmail.com>
|
||||||
|
Date: Thu, 29 May 2025 14:47:58 -0700
|
||||||
|
Subject: [PATCH] Don't test black or flake8
|
||||||
|
|
||||||
|
Signed-off-by: Philip Taron <philip.taron@gmail.com>
|
||||||
|
---
|
||||||
|
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
|
61
pkgs/development/python-modules/icdiff/default.nix
Normal file
61
pkgs/development/python-modules/icdiff/default.nix
Normal file
|
@ -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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
setuptools,
|
setuptools,
|
||||||
llm,
|
llm,
|
||||||
|
llm-anthropic,
|
||||||
anthropic,
|
anthropic,
|
||||||
pytestCheckHook,
|
pytestCheckHook,
|
||||||
pytest-asyncio,
|
pytest-asyncio,
|
||||||
|
@ -14,21 +14,24 @@
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "llm-anthropic";
|
pname = "llm-anthropic";
|
||||||
version = "0.15.1";
|
version = "0.17";
|
||||||
pyproject = true;
|
pyproject = true;
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "simonw";
|
owner = "simonw";
|
||||||
repo = "llm-anthropic";
|
repo = "llm-anthropic";
|
||||||
tag = version;
|
tag = version;
|
||||||
hash = "sha256-8bVs3MJteOTCiw7n/4pMf+oXMhsQbCSzUFVQqm2ezcE=";
|
hash = "sha256-2fatBKZMttC5flzfC7MWCpduc3m6IOVWZiW1K2dYqis=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [
|
||||||
setuptools
|
setuptools
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
anthropic
|
||||||
llm
|
llm
|
||||||
];
|
];
|
||||||
dependencies = [ anthropic ];
|
|
||||||
|
|
||||||
nativeCheckInputs = [
|
nativeCheckInputs = [
|
||||||
pytestCheckHook
|
pytestCheckHook
|
||||||
|
@ -39,9 +42,7 @@ buildPythonPackage rec {
|
||||||
|
|
||||||
pythonImportsCheck = [ "llm_anthropic" ];
|
pythonImportsCheck = [ "llm_anthropic" ];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-anthropic;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "LLM access to models by Anthropic, including the Claude series";
|
description = "LLM access to models by Anthropic, including the Claude series";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
# build-system
|
# build-system
|
||||||
|
@ -11,6 +10,7 @@
|
||||||
pygments,
|
pygments,
|
||||||
# tests
|
# tests
|
||||||
pytestCheckHook,
|
pytestCheckHook,
|
||||||
|
llm-cmd,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
|
@ -27,13 +27,11 @@ buildPythonPackage rec {
|
||||||
|
|
||||||
# Only needed until https://github.com/simonw/llm-cmd/pull/18 is merged and released
|
# Only needed until https://github.com/simonw/llm-cmd/pull/18 is merged and released
|
||||||
patches = [ ./fix-test.patch ];
|
patches = [ ./fix-test.patch ];
|
||||||
build-system = [
|
|
||||||
setuptools
|
build-system = [ setuptools ];
|
||||||
# Follows the reasoning from https://github.com/NixOS/nixpkgs/pull/327800#discussion_r1681586659 about including llm in build-system
|
|
||||||
llm
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
llm
|
||||||
prompt-toolkit
|
prompt-toolkit
|
||||||
pygments
|
pygments
|
||||||
];
|
];
|
||||||
|
@ -46,15 +44,16 @@ buildPythonPackage rec {
|
||||||
"llm_cmd"
|
"llm_cmd"
|
||||||
];
|
];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-cmd;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "Use LLM to generate and execute commands in your shell";
|
description = "Use LLM to generate and execute commands in your shell";
|
||||||
homepage = "https://github.com/simonw/llm-cmd";
|
homepage = "https://github.com/simonw/llm-cmd";
|
||||||
changelog = "https://github.com/simonw/llm-cmd/releases/tag/${version}";
|
changelog = "https://github.com/simonw/llm-cmd/releases/tag/${version}";
|
||||||
license = lib.licenses.asl20;
|
license = lib.licenses.asl20;
|
||||||
maintainers = with lib.maintainers; [ erethon ];
|
maintainers = with lib.maintainers; [
|
||||||
|
erethon
|
||||||
|
philiptaron
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
50
pkgs/development/python-modules/llm-command-r/default.nix
Normal file
50
pkgs/development/python-modules/llm-command-r/default.nix
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-command-r,
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
cohere
|
||||||
|
llm
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
pytestCheckHook
|
||||||
|
pytest-recording
|
||||||
|
writableTmpDirAsHomeHook
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_command_r" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-command-r;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
37
pkgs/development/python-modules/llm-deepseek/default.nix
Normal file
37
pkgs/development/python-modules/llm-deepseek/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-deepseek,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_deepseek" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-deepseek;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
37
pkgs/development/python-modules/llm-docs/default.nix
Normal file
37
pkgs/development/python-modules/llm-docs/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ 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 ];
|
||||||
|
};
|
||||||
|
}
|
44
pkgs/development/python-modules/llm-echo/default.nix
Normal file
44
pkgs/development/python-modules/llm-echo/default.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-echo,
|
||||||
|
pytestCheckHook,
|
||||||
|
writableTmpDirAsHomeHook,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "llm-echo";
|
||||||
|
version = "0.3a3";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "simonw";
|
||||||
|
repo = "llm-echo";
|
||||||
|
tag = version;
|
||||||
|
hash = "sha256-4345UIyaQx+mYYBAFD5AaX5YbjbnJQt8bKMD5Vl8VJc=";
|
||||||
|
};
|
||||||
|
|
||||||
|
build-system = [ setuptools ];
|
||||||
|
|
||||||
|
dependencies = [ 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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-fragments-github,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "llm-fragments-github";
|
||||||
|
version = "0.4";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "simonw";
|
||||||
|
repo = "llm-fragments-github";
|
||||||
|
tag = version;
|
||||||
|
hash = "sha256-7i1WRix5AAEG5EXJqtaU+QY56aL0SePdqz84z+C+iYM=";
|
||||||
|
};
|
||||||
|
|
||||||
|
build-system = [ setuptools ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_fragments_github" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-fragments-github;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
hatchling,
|
||||||
|
llm,
|
||||||
|
llm-fragments-pypi,
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
httpx
|
||||||
|
llm
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_fragments_pypi" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-fragments-pypi;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ 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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
llm
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
setuptools,
|
setuptools,
|
||||||
llm,
|
llm,
|
||||||
|
llm-gemini,
|
||||||
httpx,
|
httpx,
|
||||||
ijson,
|
ijson,
|
||||||
pytestCheckHook,
|
pytestCheckHook,
|
||||||
|
@ -15,24 +15,22 @@
|
||||||
}:
|
}:
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "llm-gemini";
|
pname = "llm-gemini";
|
||||||
version = "0.20";
|
version = "0.21";
|
||||||
pyproject = true;
|
pyproject = true;
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "simonw";
|
owner = "simonw";
|
||||||
repo = "llm-gemini";
|
repo = "llm-gemini";
|
||||||
tag = version;
|
tag = version;
|
||||||
hash = "sha256-haaJtJ9RqV5/n/j8PNXPS7zc332W+gU20x0wGPRdzOQ=";
|
hash = "sha256-aCP0YjcghzpgceuZRKGTN15wm7OIPCwcJAJJBxh78f4=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [ setuptools ];
|
||||||
setuptools
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
llm
|
|
||||||
httpx
|
httpx
|
||||||
ijson
|
ijson
|
||||||
|
llm
|
||||||
];
|
];
|
||||||
|
|
||||||
nativeCheckInputs = [
|
nativeCheckInputs = [
|
||||||
|
@ -45,9 +43,7 @@ buildPythonPackage rec {
|
||||||
|
|
||||||
pythonImportsCheck = [ "llm_gemini" ];
|
pythonImportsCheck = [ "llm_gemini" ];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-gemini;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "LLM plugin to access Google's Gemini family of models";
|
description = "LLM plugin to access Google's Gemini family of models";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
|
|
||||||
|
@ -11,6 +10,7 @@
|
||||||
httpx,
|
httpx,
|
||||||
llama-cpp-python,
|
llama-cpp-python,
|
||||||
llm,
|
llm,
|
||||||
|
llm-gguf,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
|
@ -25,14 +25,12 @@ buildPythonPackage rec {
|
||||||
hash = "sha256-ihMOiQnTfgZKICVDoQHLOMahrd+GiB+HwWFBMyIcs0A=";
|
hash = "sha256-ihMOiQnTfgZKICVDoQHLOMahrd+GiB+HwWFBMyIcs0A=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [ setuptools ];
|
||||||
setuptools
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
httpx
|
httpx
|
||||||
llama-cpp-python
|
|
||||||
llm
|
llm
|
||||||
|
llama-cpp-python
|
||||||
];
|
];
|
||||||
|
|
||||||
pythonImportsCheck = [ "llm_gguf" ];
|
pythonImportsCheck = [ "llm_gguf" ];
|
||||||
|
@ -40,9 +38,7 @@ buildPythonPackage rec {
|
||||||
# Tests require internet access (downloading models)
|
# Tests require internet access (downloading models)
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-gguf;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "Run models distributed as GGUF files using LLM";
|
description = "Run models distributed as GGUF files using LLM";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
62
pkgs/development/python-modules/llm-git/default.nix
Normal file
62
pkgs/development/python-modules/llm-git/default.nix
Normal file
|
@ -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
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
click
|
||||||
|
deepmerge
|
||||||
|
llm
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
54
pkgs/development/python-modules/llm-grok/default.nix
Normal file
54
pkgs/development/python-modules/llm-grok/default.nix
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-grok,
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
llm
|
||||||
|
httpx
|
||||||
|
httpx-sse
|
||||||
|
rich
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
pytestCheckHook
|
||||||
|
pytest-httpx
|
||||||
|
writableTmpDirAsHomeHook
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_grok" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-grok;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
43
pkgs/development/python-modules/llm-groq/default.nix
Normal file
43
pkgs/development/python-modules/llm-groq/default.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-groq,
|
||||||
|
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
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
groq
|
||||||
|
llm
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_groq" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-groq;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
37
pkgs/development/python-modules/llm-hacker-news/default.nix
Normal file
37
pkgs/development/python-modules/llm-hacker-news/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-hacker-news,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_hacker_news" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-hacker-news;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,11 +1,10 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
setuptools,
|
setuptools,
|
||||||
llm,
|
llm,
|
||||||
nix-update-script,
|
llm-jq,
|
||||||
}:
|
}:
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "llm-jq";
|
pname = "llm-jq";
|
||||||
|
@ -19,19 +18,13 @@ buildPythonPackage rec {
|
||||||
hash = "sha256-Mf/tbB9+UdmSRpulqv5Wagr8wjDcRrNs2741DNQZhO4=";
|
hash = "sha256-Mf/tbB9+UdmSRpulqv5Wagr8wjDcRrNs2741DNQZhO4=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [ setuptools ];
|
||||||
setuptools
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [ llm ];
|
||||||
llm
|
|
||||||
];
|
|
||||||
|
|
||||||
pythonImportsCheck = [ "llm_jq" ];
|
pythonImportsCheck = [ "llm_jq" ];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-jq;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "Write and execute jq programs with the help of LLM";
|
description = "Write and execute jq programs with the help of LLM";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
44
pkgs/development/python-modules/llm-llama-server/default.nix
Normal file
44
pkgs/development/python-modules/llm-llama-server/default.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
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 = "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 ];
|
||||||
|
};
|
||||||
|
}
|
56
pkgs/development/python-modules/llm-mistral/default.nix
Normal file
56
pkgs/development/python-modules/llm-mistral/default.nix
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
httpx,
|
||||||
|
httpx-sse,
|
||||||
|
llm,
|
||||||
|
llm-mistral,
|
||||||
|
pytestCheckHook,
|
||||||
|
pytest-asyncio,
|
||||||
|
pytest-httpx,
|
||||||
|
writableTmpDirAsHomeHook,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "llm-mistral";
|
||||||
|
version = "0.14";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "simonw";
|
||||||
|
repo = "llm-mistral";
|
||||||
|
tag = version;
|
||||||
|
hash = "sha256-NuiqRA/SCjGq0hJsnHJ/vgdncIKu3oE9WqWGht7QRMc=";
|
||||||
|
};
|
||||||
|
|
||||||
|
build-system = [
|
||||||
|
setuptools
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
httpx
|
||||||
|
httpx-sse
|
||||||
|
llm
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
pytestCheckHook
|
||||||
|
pytest-asyncio
|
||||||
|
pytest-httpx
|
||||||
|
writableTmpDirAsHomeHook
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_mistral" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-mistral;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
|
|
||||||
|
@ -18,28 +17,26 @@
|
||||||
pytest-asyncio,
|
pytest-asyncio,
|
||||||
pytest-mock,
|
pytest-mock,
|
||||||
writableTmpDirAsHomeHook,
|
writableTmpDirAsHomeHook,
|
||||||
|
llm-ollama,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "llm-ollama";
|
pname = "llm-ollama";
|
||||||
version = "0.10.0";
|
version = "0.11.0";
|
||||||
pyproject = true;
|
pyproject = true;
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "taketwo";
|
owner = "taketwo";
|
||||||
repo = "llm-ollama";
|
repo = "llm-ollama";
|
||||||
tag = version;
|
tag = version;
|
||||||
hash = "sha256-IA9Tb82XB+Gr6YwMVqzsw1dPtT3GWK2W/ZtuDVznF1A";
|
hash = "sha256-iwrDqrPt/zwXypBwD7zDAcen4fQq6PXl7Xj5VUL2KWA=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [ setuptools ];
|
||||||
setuptools
|
|
||||||
# Follows the reasoning from https://github.com/NixOS/nixpkgs/pull/327800#discussion_r1681586659 about including llm in build-system
|
|
||||||
llm
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
click
|
click
|
||||||
|
llm
|
||||||
ollama
|
ollama
|
||||||
pydantic
|
pydantic
|
||||||
];
|
];
|
||||||
|
@ -55,9 +52,7 @@ buildPythonPackage rec {
|
||||||
"llm_ollama"
|
"llm_ollama"
|
||||||
];
|
];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-ollama;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "LLM plugin providing access to Ollama models using HTTP API";
|
description = "LLM plugin providing access to Ollama models using HTTP API";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
callPackage,
|
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
setuptools,
|
setuptools,
|
||||||
llm,
|
llm,
|
||||||
|
llm-openai-plugin,
|
||||||
openai,
|
openai,
|
||||||
pytestCheckHook,
|
pytestCheckHook,
|
||||||
pytest-asyncio,
|
pytest-asyncio,
|
||||||
|
@ -25,9 +25,7 @@ buildPythonPackage rec {
|
||||||
hash = "sha256-UoUxCwR+qOUufHuS0gw6A5Q7sB77VO4HYuMjFGN7mhA=";
|
hash = "sha256-UoUxCwR+qOUufHuS0gw6A5Q7sB77VO4HYuMjFGN7mhA=";
|
||||||
};
|
};
|
||||||
|
|
||||||
build-system = [
|
build-system = [ setuptools ];
|
||||||
setuptools
|
|
||||||
];
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
llm
|
llm
|
||||||
|
@ -45,9 +43,7 @@ buildPythonPackage rec {
|
||||||
|
|
||||||
pythonImportsCheck = [ "llm_openai" ];
|
pythonImportsCheck = [ "llm_openai" ];
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = llm.mkPluginTest llm-openai-plugin;
|
||||||
llm-plugin = callPackage ./tests/llm-plugin.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "OpenAI plugin for LLM";
|
description = "OpenAI plugin for LLM";
|
||||||
|
|
|
@ -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"
|
|
||||||
''
|
|
56
pkgs/development/python-modules/llm-openrouter/default.nix
Normal file
56
pkgs/development/python-modules/llm-openrouter/default.nix
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-openrouter,
|
||||||
|
httpx,
|
||||||
|
openai,
|
||||||
|
pytestCheckHook,
|
||||||
|
inline-snapshot,
|
||||||
|
pytest-recording,
|
||||||
|
writableTmpDirAsHomeHook,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "llm-openrouter";
|
||||||
|
version = "0.4.1";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "simonw";
|
||||||
|
repo = "llm-openrouter";
|
||||||
|
tag = version;
|
||||||
|
hash = "sha256-ojBkyXqEaqTcOv7mzTWL5Ihhb50zeVzeQZNA6DySuVg=";
|
||||||
|
};
|
||||||
|
|
||||||
|
build-system = [
|
||||||
|
setuptools
|
||||||
|
];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
httpx
|
||||||
|
llm
|
||||||
|
openai
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
pytestCheckHook
|
||||||
|
inline-snapshot
|
||||||
|
pytest-recording
|
||||||
|
writableTmpDirAsHomeHook
|
||||||
|
];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_openrouter" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-openrouter;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
llm
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-sentence-transformers,
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
einops
|
||||||
|
llm
|
||||||
|
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.mkPluginTest llm-sentence-transformers;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-templates-fabric,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_templates_fabric" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-templates-fabric;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-templates-github,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_templates_github" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-templates-github;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ 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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
llm
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -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 ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
llm
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
46
pkgs/development/python-modules/llm-tools-sqlite/default.nix
Normal file
46
pkgs/development/python-modules/llm-tools-sqlite/default.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ 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 ];
|
||||||
|
};
|
||||||
|
}
|
40
pkgs/development/python-modules/llm-venice/default.nix
Normal file
40
pkgs/development/python-modules/llm-venice/default.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-venice,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "llm-venice";
|
||||||
|
version = "0.7.0";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "ar-jan";
|
||||||
|
repo = "llm-venice";
|
||||||
|
tag = version;
|
||||||
|
hash = "sha256-vsb3oXGr+2FDJnTwYomICfald1ptben28hAJ8ypKiBI=";
|
||||||
|
};
|
||||||
|
|
||||||
|
build-system = [ setuptools ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
# Reaches out to the real API
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_venice" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-venice;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
37
pkgs/development/python-modules/llm-video-frames/default.nix
Normal file
37
pkgs/development/python-modules/llm-video-frames/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
setuptools,
|
||||||
|
llm,
|
||||||
|
llm-video-frames,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
|
||||||
|
dependencies = [ llm ];
|
||||||
|
|
||||||
|
pythonImportsCheck = [ "llm_video_frames" ];
|
||||||
|
|
||||||
|
passthru.tests = llm.mkPluginTest llm-video-frames;
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,11 +1,12 @@
|
||||||
diff --git a/llm/cli.py b/llm/cli.py
|
diff --git a/llm/cli.py b/llm/cli.py
|
||||||
index af37feb..18b078a 100644
|
index 5d53e74..c2b4707 100644
|
||||||
--- a/llm/cli.py
|
--- a/llm/cli.py
|
||||||
+++ b/llm/cli.py
|
+++ b/llm/cli.py
|
||||||
@@ -1014,18 +1014,7 @@ def templates_path():
|
@@ -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):
|
def install(packages, upgrade, editable, force_reinstall, no_cache_dir, pre):
|
||||||
"""Install packages from PyPI into the same environment as LLM"""
|
- """Install packages from PyPI into the same environment as LLM"""
|
||||||
- args = ["pip", "install"]
|
- args = ["pip", "install"]
|
||||||
- if upgrade:
|
- if upgrade:
|
||||||
- args += ["--upgrade"]
|
- args += ["--upgrade"]
|
||||||
|
@ -15,20 +16,49 @@ index af37feb..18b078a 100644
|
||||||
- args += ["--force-reinstall"]
|
- args += ["--force-reinstall"]
|
||||||
- if no_cache_dir:
|
- if no_cache_dir:
|
||||||
- args += ["--no-cache-dir"]
|
- args += ["--no-cache-dir"]
|
||||||
|
- if pre:
|
||||||
|
- args += ["--pre"]
|
||||||
- args += list(packages)
|
- args += list(packages)
|
||||||
- sys.argv = args
|
- sys.argv = args
|
||||||
- run_module("pip", run_name="__main__")
|
- 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.")
|
+ """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:
|
||||||
|
+
|
||||||
|
+```nix
|
||||||
|
+llm.withPlugins {
|
||||||
|
+ @listOfPackagedPlugins@
|
||||||
|
+}
|
||||||
|
+```
|
||||||
|
+"""
|
||||||
|
+ )
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@@ -1033,8 +1022,7 @@ 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")
|
@click.option("-y", "--yes", is_flag=True, help="Don't ask for confirmation")
|
||||||
def uninstall(packages, yes):
|
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 [])
|
- sys.argv = ["pip", "uninstall"] + list(packages) + (["-y"] if yes else [])
|
||||||
- run_module("pip", run_name="__main__")
|
- 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.")
|
+ """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:
|
||||||
|
+
|
||||||
|
+```nix
|
||||||
|
+llm.withPlugins {
|
||||||
|
+ @listOfPackagedPlugins@
|
||||||
|
+}
|
||||||
|
+```
|
||||||
|
+"""
|
||||||
|
+ )
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
|
--
|
||||||
|
2.49.0
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
|
runCommand,
|
||||||
|
callPackage,
|
||||||
buildPythonPackage,
|
buildPythonPackage,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
pytestCheckHook,
|
pytestCheckHook,
|
||||||
pythonOlder,
|
pythonOlder,
|
||||||
|
replaceVars,
|
||||||
setuptools,
|
setuptools,
|
||||||
click-default-group,
|
click-default-group,
|
||||||
condense-json,
|
condense-json,
|
||||||
|
@ -13,18 +16,154 @@
|
||||||
pluggy,
|
pluggy,
|
||||||
puremagic,
|
puremagic,
|
||||||
pydantic,
|
pydantic,
|
||||||
|
python,
|
||||||
python-ulid,
|
python-ulid,
|
||||||
pyyaml,
|
pyyaml,
|
||||||
sqlite-migrate,
|
sqlite-migrate,
|
||||||
cogapp,
|
cogapp,
|
||||||
pytest-asyncio,
|
pytest-asyncio,
|
||||||
pytest-httpx,
|
pytest-httpx,
|
||||||
|
pytest-recording,
|
||||||
sqlite-utils,
|
sqlite-utils,
|
||||||
|
syrupy,
|
||||||
|
llm-echo,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
|
||||||
|
```
|
||||||
|
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/<hash>-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-docs ? false,
|
||||||
|
llm-echo ? false,
|
||||||
|
llm-fragments-github ? false,
|
||||||
|
llm-fragments-pypi ? false,
|
||||||
|
llm-fragments-reader ? false,
|
||||||
|
llm-fragments-symbex ? false,
|
||||||
|
llm-gemini ? false,
|
||||||
|
llm-gguf ? false,
|
||||||
|
llm-git ? false,
|
||||||
|
llm-grok ? false,
|
||||||
|
llm-groq ? false,
|
||||||
|
llm-hacker-news ? false,
|
||||||
|
llm-jq ? false,
|
||||||
|
llm-llama-server ? false,
|
||||||
|
llm-mistral ? false,
|
||||||
|
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,
|
||||||
|
llm-tools-datasette ? false,
|
||||||
|
llm-tools-quickjs ? false,
|
||||||
|
llm-tools-simpleeval ? false,
|
||||||
|
llm-tools-sqlite ? 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 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 (
|
||||||
|
ps:
|
||||||
|
let
|
||||||
|
# Throw a diagnostic if this list gets out of sync with the names in python3Packages
|
||||||
|
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.
|
||||||
|
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 withPluginsArgNames (name: true));
|
||||||
|
|
||||||
|
# The function signature of `withPlugins` is the list of all the plugins `llm` knows about.
|
||||||
|
# The plugin directory is at <https://llm.datasette.io/en/stable/plugins/directory.html>
|
||||||
|
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 {
|
llm = buildPythonPackage rec {
|
||||||
pname = "llm";
|
pname = "llm";
|
||||||
version = "0.25";
|
version = "0.26";
|
||||||
pyproject = true;
|
pyproject = true;
|
||||||
|
|
||||||
build-system = [ setuptools ];
|
build-system = [ setuptools ];
|
||||||
|
@ -35,11 +174,16 @@ let
|
||||||
owner = "simonw";
|
owner = "simonw";
|
||||||
repo = "llm";
|
repo = "llm";
|
||||||
tag = version;
|
tag = version;
|
||||||
hash = "sha256-iH1P0VdpwIItY1In7vlM0Sn44Db23TqFp8GZ79/GMJs=";
|
hash = "sha256-KTlNajuZrR0kBX3LatepsNM3PfRVsQn+evEfXTu6juE=";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [ ./001-disable-install-uninstall-commands.patch ];
|
patches = [ ./001-disable-install-uninstall-commands.patch ];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
substituteInPlace llm/cli.py \
|
||||||
|
--replace-fail "@listOfPackagedPlugins@" "$(< ${listOfPackagedPlugins})"
|
||||||
|
'';
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
click-default-group
|
click-default-group
|
||||||
condense-json
|
condense-json
|
||||||
|
@ -61,11 +205,19 @@ let
|
||||||
numpy
|
numpy
|
||||||
pytest-asyncio
|
pytest-asyncio
|
||||||
pytest-httpx
|
pytest-httpx
|
||||||
|
pytest-recording
|
||||||
|
syrupy
|
||||||
pytestCheckHook
|
pytestCheckHook
|
||||||
];
|
];
|
||||||
|
|
||||||
doCheck = true;
|
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 = [
|
pytestFlagsArray = [
|
||||||
"-svv"
|
"-svv"
|
||||||
"tests/"
|
"tests/"
|
||||||
|
@ -74,27 +226,28 @@ let
|
||||||
pythonImportsCheck = [ "llm" ];
|
pythonImportsCheck = [ "llm" ];
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit withPlugins;
|
inherit withPlugins withAllPlugins;
|
||||||
|
|
||||||
|
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 = with lib; {
|
meta = {
|
||||||
homepage = "https://github.com/simonw/llm";
|
homepage = "https://github.com/simonw/llm";
|
||||||
description = "Access large language models from the command-line";
|
description = "Access large language models from the command-line";
|
||||||
changelog = "https://github.com/simonw/llm/releases/tag/${src.tag}";
|
changelog = "https://github.com/simonw/llm/releases/tag/${src.tag}";
|
||||||
license = licenses.asl20;
|
license = lib.licenses.asl20;
|
||||||
mainProgram = "llm";
|
mainProgram = "llm";
|
||||||
maintainers = with maintainers; [
|
maintainers = with lib.maintainers; [
|
||||||
aldoborrero
|
aldoborrero
|
||||||
mccartykim
|
mccartykim
|
||||||
|
philiptaron
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
in
|
||||||
llm
|
llm
|
||||||
|
|
27
pkgs/development/python-modules/llm/mk-plugin-test.nix
Normal file
27
pkgs/development/python-modules/llm/mk-plugin-test.nix
Normal file
|
@ -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"
|
||||||
|
''
|
52
pkgs/development/python-modules/pytest-icdiff/default.nix
Normal file
52
pkgs/development/python-modules/pytest-icdiff/default.nix
Normal file
|
@ -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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Philip Taron <philip.taron@gmail.com>
|
||||||
|
Date: Thu, 29 May 2025 17:16:43 -0700
|
||||||
|
Subject: [PATCH] Update for QuickJS 2025-04-26 release
|
||||||
|
|
||||||
|
Signed-off-by: Philip Taron <philip.taron@gmail.com>
|
||||||
|
---
|
||||||
|
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 (<input>:3)\n", msg)
|
||||||
|
- self.assertIn("at funcB (<input>:6)\n", msg)
|
||||||
|
+ self.assertIn("at funcA (<input>:3:24)\n", msg)
|
||||||
|
+ self.assertIn("at funcB (<input>: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)
|
58
pkgs/development/python-modules/quickjs/default.nix
Normal file
58
pkgs/development/python-modules/quickjs/default.nix
Normal file
|
@ -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 ];
|
||||||
|
};
|
||||||
|
}
|
45
pkgs/development/python-modules/symbex/default.nix
Normal file
45
pkgs/development/python-modules/symbex/default.nix
Normal file
|
@ -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 = "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 ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -3502,8 +3502,6 @@ with pkgs;
|
||||||
ocamlPackages = ocaml-ng.ocamlPackages_4_14;
|
ocamlPackages = ocaml-ng.ocamlPackages_4_14;
|
||||||
};
|
};
|
||||||
|
|
||||||
llm = with python3Packages; toPythonApplication llm;
|
|
||||||
|
|
||||||
loganalyzer = libsForQt5.callPackage ../development/tools/loganalyzer { };
|
loganalyzer = libsForQt5.callPackage ../development/tools/loganalyzer { };
|
||||||
|
|
||||||
logstash7 = callPackage ../tools/misc/logstash/7.x.nix {
|
logstash7 = callPackage ../tools/misc/logstash/7.x.nix {
|
||||||
|
|
|
@ -4971,6 +4971,8 @@ self: super: with self; {
|
||||||
|
|
||||||
filelock = callPackage ../development/python-modules/filelock { };
|
filelock = callPackage ../development/python-modules/filelock { };
|
||||||
|
|
||||||
|
files-to-prompt = callPackage ../development/python-modules/files-to-prompt { };
|
||||||
|
|
||||||
filetype = callPackage ../development/python-modules/filetype { };
|
filetype = callPackage ../development/python-modules/filetype { };
|
||||||
|
|
||||||
filterpy = callPackage ../development/python-modules/filterpy { };
|
filterpy = callPackage ../development/python-modules/filterpy { };
|
||||||
|
@ -6654,6 +6656,8 @@ self: super: with self; {
|
||||||
|
|
||||||
icalevents = callPackage ../development/python-modules/icalevents { };
|
icalevents = callPackage ../development/python-modules/icalevents { };
|
||||||
|
|
||||||
|
icdiff = callPackage ../development/python-modules/icdiff { };
|
||||||
|
|
||||||
icecream = callPackage ../development/python-modules/icecream { };
|
icecream = callPackage ../development/python-modules/icecream { };
|
||||||
|
|
||||||
iceportal = callPackage ../development/python-modules/iceportal { };
|
iceportal = callPackage ../development/python-modules/iceportal { };
|
||||||
|
@ -8306,16 +8310,66 @@ self: super: with self; {
|
||||||
|
|
||||||
llm-cmd = callPackage ../development/python-modules/llm-cmd { };
|
llm-cmd = callPackage ../development/python-modules/llm-cmd { };
|
||||||
|
|
||||||
|
llm-command-r = callPackage ../development/python-modules/llm-command-r { };
|
||||||
|
|
||||||
|
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 { };
|
||||||
|
|
||||||
|
llm-fragments-pypi = callPackage ../development/python-modules/llm-fragments-pypi { };
|
||||||
|
|
||||||
|
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-gemini = callPackage ../development/python-modules/llm-gemini { };
|
||||||
|
|
||||||
llm-gguf = callPackage ../development/python-modules/llm-gguf { };
|
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 { };
|
||||||
|
|
||||||
|
llm-hacker-news = callPackage ../development/python-modules/llm-hacker-news { };
|
||||||
|
|
||||||
llm-jq = callPackage ../development/python-modules/llm-jq { };
|
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 { };
|
llm-ollama = callPackage ../development/python-modules/llm-ollama { };
|
||||||
|
|
||||||
llm-openai-plugin = callPackage ../development/python-modules/llm-openai-plugin { };
|
llm-openai-plugin = callPackage ../development/python-modules/llm-openai-plugin { };
|
||||||
|
|
||||||
|
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 { };
|
||||||
|
|
||||||
|
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-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 { };
|
||||||
|
|
||||||
|
llm-video-frames = callPackage ../development/python-modules/llm-video-frames { };
|
||||||
|
|
||||||
llmx = callPackage ../development/python-modules/llmx { };
|
llmx = callPackage ../development/python-modules/llmx { };
|
||||||
|
|
||||||
llvmlite = callPackage ../development/python-modules/llvmlite {
|
llvmlite = callPackage ../development/python-modules/llvmlite {
|
||||||
|
@ -13827,6 +13881,8 @@ self: super: with self; {
|
||||||
|
|
||||||
pytest-httpx = callPackage ../development/python-modules/pytest-httpx { };
|
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-image-diff = callPackage ../development/python-modules/pytest-image-diff { };
|
||||||
|
|
||||||
pytest-instafail = callPackage ../development/python-modules/pytest-instafail { };
|
pytest-instafail = callPackage ../development/python-modules/pytest-instafail { };
|
||||||
|
@ -14876,6 +14932,8 @@ self: super: with self; {
|
||||||
|
|
||||||
queuelib = callPackage ../development/python-modules/queuelib { };
|
queuelib = callPackage ../development/python-modules/queuelib { };
|
||||||
|
|
||||||
|
quickjs = callPackage ../development/python-modules/quickjs { };
|
||||||
|
|
||||||
quil = callPackage ../development/python-modules/quil { };
|
quil = callPackage ../development/python-modules/quil { };
|
||||||
|
|
||||||
quixote = callPackage ../development/python-modules/quixote { };
|
quixote = callPackage ../development/python-modules/quixote { };
|
||||||
|
@ -17033,6 +17091,8 @@ self: super: with self; {
|
||||||
|
|
||||||
sybil = callPackage ../development/python-modules/sybil { };
|
sybil = callPackage ../development/python-modules/sybil { };
|
||||||
|
|
||||||
|
symbex = callPackage ../development/python-modules/symbex { };
|
||||||
|
|
||||||
symbolic = callPackage ../development/python-modules/symbolic { };
|
symbolic = callPackage ../development/python-modules/symbolic { };
|
||||||
|
|
||||||
symengine = callPackage ../development/python-modules/symengine { inherit (pkgs) symengine; };
|
symengine = callPackage ../development/python-modules/symengine { inherit (pkgs) symengine; };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue