pommes-assistant
Ossature déterministe d'un assistant conversationnel pour les études pommes (planification de systèmes multi-énergies, MINES Paris – PSL / PERSEE). Le LLM n'est qu'une interface remplaçable ; la valeur est dans les outils typés, utilisables sans lui.
Vous décrivez votre étude en français ; l'assistant remplit le fichier d'étude (le StudySpec), pose les questions qui manquent, esquisse le modèle, estime son coût de calcul, le résout et lit les résultats. Aucun nombre n'est inventé : toute valeur vient de vos mots (cités), d'un jeu de données du catalogue, d'un document cité ou d'un défaut de pommes marqué comme tel. L'outil refuse toute écriture qui ne cite pas sa source.
Mode d'emploi complet : docs/guide.md (dans le dépôt).
Installation
pip install "pommes-assistant[all]" # l'assistant, pommes, pommes_craft, HiGHS, les vues
pip install pommes-assistant # le cœur seul : lire et valider un StudySpec
Python 3.12 au moins. Pour un modèle local : Ollama, puis
ollama pull gemma4:26b (≈ 20 Go de mémoire).
Trois façons de s'en servir
-
Claude Code (VS Code, PyCharm, terminal ; abonnement Claude), la voie la plus sûre (29 dialogues de test sur 30) :
claude mcp add pommes-assistant -- pommes-assistant mcp # dans votre projet pommes-assistant skill --install . # la marche de l'assistant
-
Python ou un notebook, avec un modèle ouvert servi par Ollama (gemma4:26b : 28 à 30 sur 30) :
from pommes_assistant import Assistant assistant = Assistant() assistant("Mon étude est le fichier mon_etude.study.yaml. Dis-moi ce qui manque.") assistant("esquisse-la")
-
Le terminal :
pommes-assistant chat --spec mon_etude.study.yaml.
Au banc, aucun passage n'a écrit de nombre inventé depuis le 5 octobre 2026 (session S19), quel que soit le modèle. Les trois inventions vues avant (Claude au premier passage, une version de travail du 26B, le 12B une fois) ont chacune fermé un trou de l'ossature : c'est elle qui refuse, pas le modèle qui s'en abstient.
Ce que fait l'ossature
- le StudySpec porte une source par valeur numérique ; le validateur rend des écarts typés, et les questions de l'assistant viennent de lui ;
- le catalogue de jeux certifiés (SL-TYNDP 2024 et PECD) et l'audit d'ordres de grandeur ;
- le compilateur produit une étude pommes ordinaire (le cas TYNDP 8 nœuds à l'identique) ;
- l'esquisse (une heure ou quelques semaines représentatives, en secondes), l'estimation par règle (électrolyseur, cavité d'hydrogène, batterie, demande déplaçable, pilotable) et le regret d'une règle dans son monde, sous le bandeau « pas un résultat » ;
- l'estimateur de taille, de temps et de mémoire ; l'exécution locale ou sur un serveur
(soumettre, suivre, rapatrier, sans shell libre) ; le modèle de langage servi par un job GPU
Slurm (
run llm) ; - les vues (neuf, en HTML ou PDF) et le rapport Quarto ;
- le serveur MCP, une fonction par action ; le client local (Ollama ou compatible OpenAI) ; le banc de 30 dialogues, qui mesure les inventions et les questions superflues.
Développement
git clone https://git.persee.minesparis.psl.eu/energy-alternatives/pommes-assistant.git
pip install -e ".[all,dev]"
pytest -q # sans données ni LLM ; les tests « data » lisent la racine DATA
Commandes
pommes-assistant validate mon_etude.study.yaml # écarts typés (--json)
pommes-assistant questions mon_etude.study.yaml # les questions du prochain tour
pommes-assistant spec set-user mon_etude.study.yaml "components[Carbon/carbon].tax" 100 \
--who "Camille Martin" --quote "une taxe carbone de 100 €/t"
pommes-assistant sketch mon_etude.study.yaml # esquisse L0 (ou --level L1)
pommes-assistant guess mon_etude.study.yaml # estimation par règle, sans résolution
pommes-assistant regret mon_etude.study.yaml # regret d'une règle dans son monde
pommes-assistant estimate mon_etude.study.yaml # taille, temps et RAM
pommes-assistant build mon_etude.study.yaml -o etude # une étude pommes ordinaire
pommes-assistant run local etude --dry-run # ou run submit etude --host …
pommes-assistant results etude/output/<run> --checks --view all --format html,pdf
pommes-assistant import-craft modele_sauve -o mon_etude.study.yaml
pommes-assistant chat --spec mon_etude.study.yaml # l'assistant au terminal (Ollama)
pommes-assistant mcp # le serveur MCP sur stdio
Documentation dans le dépôt : docs/guide.md (mode d'emploi), docs/studyspec.md (format),
docs/compile.md, docs/sketch.md, docs/run.md, docs/views.md, docs/mcp.md,
docs/client.md, docs/bench.md ; exemples dans examples/ (TYNDP 8 nœuds,
heat_electrification, hub H2 de Fos, dorsale H2, notebook assistant.ipynb).
Licence
MIT — Robin Girard, MINES Paris – PSL.
Metadata
Release files for pommes-assistant 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pommes_assistant-0.1.1.tar.gz | 414.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pommes_assistant-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 890.9 kB
Release files / pommes_assistant-0.1.1.tar.gz
| Download URL | pommes_assistant-0.1.1.tar.gz |
|---|---|
| Size | 414.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
790054a88c4aa86e8f94889760d4adefed1149dab54fe805d2002c44b1c6e79d
|
|
BLAKE2b-256 checksum How to use checksums |
1b430620884c8082bfe3e96b4b94e42589b3d57d12b8f1b50c3e9dbbd492fad7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / pommes_assistant-0.1.1-py3-none-any.whl
| Download URL | pommes_assistant-0.1.1-py3-none-any.whl |
|---|---|
| Size | 476.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
118e879cf8e25154345e069dab4a6a665a8410dd1b903d8e1a1d5b2b8fc3efb0
|
|
BLAKE2b-256 checksum How to use checksums |
5f591d2111ce1689c19f590889f332e68f163890c4cbe811337e7b2e2bda2911
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|