{lib, ...}: { options.host = { ai = { enable = lib.mkEnableOption "should we use AI on this machine"; models = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { options = { name = lib.mkOption { type = lib.types.str; default = name; }; model = lib.mkOption { type = lib.types.str; }; provider = lib.mkOption { type = lib.types.str; default = "ollama"; }; # apiBase = lib.mkOption { # type = lib.types.nullOr lib.types.str; # default = null; # }; roles = lib.mkOption { type = lib.types.listOf (lib.types.enum [ "chat" "autocomplete" "embed" "rerank" "edit" "apply" "summarize" ]); default = []; }; }; })); }; default = {}; }; }; config = { # TODO: configure ollama to download any modules listed in options.host.ai.models.{name}.model if options.host.ai.models.{name}.apiBase is null # TODO: if we have any models that have a non null options.host.ai.models.{name}.apiBase then set services.ollama.enable to a lib.mkAfter true }; }