Files
dotfiles/programs/pi.nix
2026-08-06 09:33:20 +02:00

53 lines
1.8 KiB
Nix

{ config, pkgs, ... }:
let
# Ces dotfiles ne sont pas un flake (config par channels) : on résout donc
# les sorties du flake pi.nix à la main, en épinglant le rev.
# Mise à jour : remplacer le rev par le dernier de https://github.com/lukasl-dev/pi.nix
pi = builtins.getFlake "github:lukasl-dev/pi.nix/1d37b58675b763ae6c9dc05d62321109066a4126";
# Passerelle LLM interne Lundi Matin (LiteLLM), même endpoint et même jeton
# que la fonction zsh `lmc`. Côté serveur, LM-Code route vers glm-5.2.
lmcModels = (pkgs.formats.json { }).generate "pi-models.json" {
providers.lundimatin = {
baseUrl = "https://llm-core.lundimatin.app";
api = "anthropic-messages";
# Résolu à chaque requête : le jeton ne passe pas par le store Nix.
apiKey = "!cat ${config.home.homeDirectory}/.config/lmc-token";
# La passerelle renvoie des blocs thinking sans signature ; sans ça pi
# les dégrade en texte au lieu de les rejouer.
compat.allowEmptySignature = true;
models = [
{
id = "LM-Code";
name = "LM-Code (glm-5.2 Lundi Matin)";
reasoning = true;
# Limite réelle mesurée via la passerelle LiteLLM (HTTP 400 ContextWindowExceededError).
contextWindow = 250000;
maxTokens = 64000;
}
{
id = "deepseek-v4-flash";
name = "DeepSeek V4 Flash Lundi Matin";
reasoning = true;
# Limite réelle mesurée via la passerelle LiteLLM (HTTP 400 ContextWindowExceededError).
contextWindow = 262144;
maxTokens = 64000;
}
];
};
};
in
{
imports = [ pi.homeModules.default ];
programs.pi.coding-agent = {
enable = true;
models = lmcModels;
settings = {
defaultProvider = "lundimatin";
defaultModel = "LM-Code";
};
};
}