···
4
-
enable-llm-anthropic ? false,
5
-
enable-llm-cmd ? false,
6
-
enable-llm-command-r ? false,
7
-
enable-llm-deepseek ? false,
8
-
enable-llm-fragments-github ? false,
9
-
enable-llm-fragments-pypi ? false,
10
-
enable-llm-gemini ? false,
11
-
enable-llm-grok ? false,
12
-
enable-llm-groq ? false,
13
-
enable-llm-gguf ? false,
14
-
enable-llm-hacker-news ? false,
15
-
enable-llm-jq ? false,
16
-
enable-llm-mistral ? false,
17
-
enable-llm-ollama ? false,
18
-
enable-llm-openai-plugin ? false,
19
-
enable-llm-openrouter ? false,
20
-
enable-llm-sentence-transformers ? false,
21
-
enable-llm-templates-fabric ? false,
22
-
enable-llm-templates-github ? false,
23
-
enable-llm-venice ? false,
24
-
enable-llm-video-frames ? false,
1
+
# The `...` allows this derivation to be overridden with `enable-<llm-plugin>`.
7
+
# enable-llm-anthropic = true;
8
+
# enable-llm-gemini = true;
9
+
# enable-llm-cmd = true;
10
+
# enable-llm-templates-github = true;
14
+
# Whatever names are accepted by `llm.withPlugins` are accepted with an added `enable-` prefix as
15
+
# an override of this derivation. The user can also do `llm.withPlugins { llm-anthropic = true; }`.
16
+
{ lib, python3Packages, ... }@args:
28
-
inherit (python3Packages)
35
-
llm-fragments-github
47
-
llm-sentence-transformers
48
-
llm-templates-fabric
49
-
llm-templates-github
19
+
inherit (python3Packages) llm;
21
+
hasEnablePrefix = lib.hasPrefix "enable-";
22
+
addEnablePrefix = name: "enable-${name}";
23
+
removeEnablePrefix = lib.removePrefix "enable-";
25
+
# Filter to just the attributes which are named "enable-<plugin-name>"
26
+
enableArgs = lib.filterAttrs (name: value: hasEnablePrefix name) args;
27
+
pluginArgs = lib.mapAttrs' (
28
+
name: value: lib.nameValuePair (removeEnablePrefix name) value
31
+
# Provide some diagnostics for the plugin names
32
+
pluginNames = lib.attrNames (lib.functionArgs llm.withPlugins);
33
+
enableNames = lib.map addEnablePrefix pluginNames;
34
+
unknownPluginNames = lib.removeAttrs pluginArgs pluginNames;
35
+
unknownNames = lib.map addEnablePrefix (lib.attrNames unknownPluginNames);
36
+
unknownNamesDiagnostic = ''
37
+
Unknown plugins specified in override: ${lib.concatStringsSep ", " unknownNames}
40
+
- ${lib.concatStringsSep "\n - " enableNames}
55
-
toPythonApplication (
56
-
llm.overrideAttrs (finalAttrs: {
57
-
propagatedBuildInputs =
58
-
(finalAttrs.propagatedBuildInputs or [ ])
59
-
++ lib.optionals enable-llm-anthropic [ llm-anthropic ]
60
-
++ lib.optionals enable-llm-cmd [ llm-cmd ]
61
-
++ lib.optionals enable-llm-cmd [ llm-command-r ]
62
-
++ lib.optionals enable-llm-deepseek [ llm-deepseek ]
63
-
++ lib.optionals enable-llm-fragments-github [ llm-fragments-github ]
64
-
++ lib.optionals enable-llm-fragments-pypi [ llm-fragments-pypi ]
65
-
++ lib.optionals enable-llm-gemini [ llm-gemini ]
66
-
++ lib.optionals enable-llm-gguf [ llm-gguf ]
67
-
++ lib.optionals enable-llm-grok [ llm-grok ]
68
-
++ lib.optionals enable-llm-groq [ llm-groq ]
69
-
++ lib.optionals enable-llm-hacker-news [ llm-hacker-news ]
70
-
++ lib.optionals enable-llm-jq [ llm-jq ]
71
-
++ lib.optionals enable-llm-mistral [ llm-mistral ]
72
-
++ lib.optionals enable-llm-ollama [ llm-ollama ]
73
-
++ lib.optionals enable-llm-openai-plugin [ llm-openai-plugin ]
74
-
++ lib.optionals enable-llm-openrouter [ llm-openrouter ]
75
-
++ lib.optionals enable-llm-sentence-transformers [ llm-sentence-transformers ]
76
-
++ lib.optionals enable-llm-templates-fabric [ llm-templates-fabric ]
77
-
++ lib.optionals enable-llm-templates-github [ llm-templates-github ]
78
-
++ lib.optionals enable-llm-venice [ llm-venice ]
79
-
++ lib.optionals enable-llm-video-frames [ llm-video-frames ];
44
+
assert lib.assertMsg (lib.length unknownNames == 0) unknownNamesDiagnostic;
46
+
llm.withPlugins pluginArgs