Note en tête du bloc passerele : interroger GET /v1/model/info avant toute bascule/édition de modèles, avec la commande jq prête à l'emploi. Motivé par l'écart constaté le 28/09/2026 (qwen3.8-flash-next annoncé en 64k out, réel 32 768) : les annonces internes ne suffisent pas, seule la passerelle fait foi. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
127 lines
5.5 KiB
Nix
127 lines
5.5 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
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";
|
|
|
|
# Source de vérité des limites modèles : GET /v1/model/info sur la passerelle
|
|
# (donne le moteur derrière chaque alias, max_input_tokens et
|
|
# max_output_tokens réels). À interroger AVANT toute bascule ou édition de
|
|
# modèles : les annonces internes ne sont pas toujours exactes — le
|
|
# 28/09/2026, qwen3.8-flash-next était annoncé en 64k out alors que la
|
|
# passerelle plafonne à 32 768. Le champ `description` donne aussi le moteur
|
|
# derrière l'alias et la date de bascule.
|
|
#
|
|
# curl -s https://llm-core.lundimatin.app/v1/model/info \
|
|
# -H "Authorization: Bearer $(cat ~/.config/lmc-token)" \
|
|
# | jq -r '.data[] | {model_name, model: .litellm_params.model, in: .model_info.max_input_tokens, out: .model_info.max_output_tokens, desc: .model_info.description}'
|
|
#
|
|
# 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 Mimo Pro 2.6
|
|
# depuis le 28/09/2026 (remplace GLM 5.3 : plus rapide, qualité équivalente).
|
|
# Consigne équipe IA Lundi Matin (07/09/2026) : viser 100-300k de contexte
|
|
# par session et limiter le nombre d'agents en période de pic — le KV cache
|
|
# GLM 5.3 est la ressource rare. Ne pas tester la limite à 500k.
|
|
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;
|
|
|
|
# Retirés le 07/09/2026 : glm-5.2 (redirection morte vers glm-5.3),
|
|
# kimi-k3 et qwen3.8-27b (off, confirmés), deepseek-v4-flash
|
|
# (3 échecs consécutifs, mêmes symptômes que 27b — réajouter s'il revient).
|
|
models = [
|
|
{
|
|
id = "LM-Code";
|
|
name = "LM-Code (Mimo Pro 2.6 — Lundi Matin)";
|
|
# Même comportement que qwen3.8-flash-next : envoyer le paramètre
|
|
# `thinking` supprime le bloc thinking côté passerelle. reasoning =
|
|
# false laisse pi ne pas l'envoyer : le modèle raisonne nativement et
|
|
# émet des blocs thinking à signature vide (re-testé 28/09/2026 sous
|
|
# Mimo), gérés par compat.allowEmptySignature du provider.
|
|
reasoning = false;
|
|
# Vision re-validée sous Mimo via l'endpoint anthropic /v1/messages
|
|
# (28/09/2026).
|
|
input = [
|
|
"text"
|
|
"image"
|
|
];
|
|
# Confirmés le 28/09/2026 sur /v1/model/info (max_input_tokens et
|
|
# max_output_tokens de la passerelle), sans charge de test dédiée.
|
|
contextWindow = 500000;
|
|
maxTokens = 128000;
|
|
}
|
|
{
|
|
id = "qwen3.8-flash-next";
|
|
name = "Qwen 3.8 Flash Next (vision) — Lundi Matin";
|
|
# thinking.enabled supprime le bloc thinking côté vLLM (re-testé
|
|
# 07/09/2026) : on laisse pi ne pas envoyer le paramètre thinking,
|
|
# le modèle raisonne nativement et émet des blocs thinking à
|
|
# signature vide, gérés par compat.allowEmptySignature.
|
|
reasoning = false;
|
|
# Vision re-validée 07/09/2026 (image base64 via /v1/messages).
|
|
input = [
|
|
"text"
|
|
"image"
|
|
];
|
|
# Repli serveur de LM-Code, mais 262k de contexte : pas un vrai
|
|
# fallback. Recommandé par LM pour les tâches simples, de manière
|
|
# proactive, afin d'alléger GLM 5.3 (07/09/2026).
|
|
# 32 768 : plafond réel de la passerelle (max_output_tokens sur
|
|
# /v1/model/info, vérifié 28/09/2026). Les valeurs antérieures
|
|
# étaient fausses et risquaient une erreur 400 en fin de réponse.
|
|
contextWindow = 262144;
|
|
maxTokens = 32768;
|
|
}
|
|
{
|
|
id = "glm-ocr";
|
|
name = "GLM OCR (vision) — Lundi Matin";
|
|
# Spécialisé lecture d'images / OCR : basculer dessus via /model
|
|
# pour cet usage, ou via l'extension vision-proxy.
|
|
reasoning = false;
|
|
input = [
|
|
"text"
|
|
"image"
|
|
];
|
|
# Vision et 8k out testés 07/09/2026 ; limites annoncées côté LM.
|
|
contextWindow = 65536;
|
|
maxTokens = 8192;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
in
|
|
{
|
|
imports = [ pi.homeModules.default ];
|
|
|
|
programs.pi.coding-agent = {
|
|
enable = true;
|
|
models = lmcModels;
|
|
settings = {
|
|
defaultProvider = "lundimatin";
|
|
defaultModel = "LM-Code";
|
|
};
|
|
};
|
|
|
|
# Le wrapper pi ne copie models.json que s'il n'existe pas déjà (garde-fou du
|
|
# module lukasl-dev/pi.nix, variable modelsPrelude dans coding-agent/options.nix).
|
|
# Pour que ce fichier nix reste l'unique source de vérité, on supprime le
|
|
# models.json utilisateur à chaque activation : pi le recréera depuis le store
|
|
# au prochain lancement.
|
|
home.activation.pi-models-source-of-truth = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
$DRY_RUN_CMD rm -f ${config.home.homeDirectory}/.pi/agent/models.json
|
|
'';
|
|
}
|