-
Notifications
You must be signed in to change notification settings - Fork 67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Publier le modèle NGC sur NPM et l'utiliser côté site #2075
Comments
Je dirais qu'ils doivent rester côté modèle et également versionnés ce qui peut nécessiter un script qui vérifie l'exhaustivité des règles (comme dans l'ancienne page "Personas")
Pour la solution 1 également, je ne suis pas sur de bien comprendre la 2
Yes ! |
Assez aligné avec tout ça. Pas trop d'avis pour les personas et je penche aussi pour la solution 1 (qu'il sera toujours temps de faire évoluer si elle finit par ne plus convenir). Et créons autant de repo que l'on veut dans l'org de l'incubateur (tout en en laissant la gestion à notre nouveau CTO), pas fan de recréer un espace à devoir gérer nous même. Quelques détails :
|
Par contre je questionne le besoin premier : est-ce qu'on a besoin de plus de complexité que de juste avoir deux branches main / preprod ? |
Ca implique beaucoup de gestion ?
Du ? J'imagine que tu parles de l'optim ? Et en effet, ça n'aurait pas trop de sens de demander
C'est-à-dire ? Tu ne trouves pas nécessaire de faire un recettage sur preprod avant de merge dans
Tu fais références ici au fait de stocker et d'exposer toutes les versions ? |
Si le modèle est versionné, la branche ne change pas grand chose. On aurait la version 1.12.33 de main fixé en prod jusqu'à la release suivante. Et la preprod utiliserait latest de main.
Yes, quel est le besoin d'exposer plusieurs versions, et est-il suffisant au regard du temps passé sur le sujet ? |
Ça me semble quand même mieux car on veut être sur ne pas introduire de bugs dans main qu'il faudrait patcher apres ? Pour moi c'est pas forcément un recettage sur le site mais plus côté modèle, au niveau des personas entre autres
Je suis peut etre coté mais j'avais en tête que c'est important de pouvoir taper sur n'importe quelle version (si on associe une simulation à une version / on associe une version régionale à une version) |
Et la branche de travail ne suffit pas pour ça ?
C'est à dire ? C'est important pourquoi ? Ou est-ce que ça manque actuellement ? Je peux voir le besoin pour un utilisateur qui revient mais c'est à la marge non ? Et même dans ce cas la est-ce qu'on a un interêt fort à lui servir une version précédente du modèle ? |
Oui effectivement |
Pour bien comprendre, tu n'es pas favorable au fait de pouvoir accéder à n'importe quelle version du modèle ? Je ne vois pas de grande différence par rapport à l'actuel si on ne peut pas aller chercher une version spécifique ? |
Je ne dis pas que je n'y suis pas favorable. J'essaie de comprendre pourquoi on en a besoin (et donc pourquoi il faut le faire) |
Le but d'utiliser des versions et de ne pas casser le code des utilisateur.ices à chaque modifs. Après pour l'instant étant le seul utilisateur (même si Sami, Yami, Agir, ICO2 pourraient être rapidement des utilisateurs direct de l'API), simplement exposer la dernière version pourrait suffire pour une première version. Mais si on veut aller plus loins et même sur NGC pouvoir faire des projections ou comprendre l'évolution du modèle ce sera nécessaire de sauvegarder les différentes versions. |
C'est la ou je peine a saisir. La version de la personne n'est, pour l'instant, pas dépendante de sa situation. Que l'on garde des variables en localStorage ou ailleurs (type valeur de bilan ou des catégories), ça me semble très intéressant si on veut qu'elle puisse se comparer dans le temps. Par contre, est-ce que l'on souhaite lui permettre de refaire son test avec un ancien modèle ? Pourquoi ne pas toujours lui servir la version la plus à jour ? |
Utilisateur de l'API pas de nosgestesclimat.fr |
Ok donc le besoin est principalement orienté vers les réutilisateurs du modèle et pas vers NGC ? C'est plus clair pour moi si c'est le cas |
Petit retour d'expérience, je publie les aides vélo sur NPM et ensuite dependabot ouvre une PR sur aides-jeunes pour la mise à jour du paquet. Ce process est très fluide et permet de jouer les tests d'intégration du site avant de mettre en production la mise à jour des règles publicodes. |
Le souci avec un paquet c'est qu'à priori on ne peut pas faire d'imports dynamiques : or, on voudrait pouvoir spécifier la région + langue du modèle importé, on s'est dit que l'API serait plus simple |
Contexte
Jusqu'à présent, le modèle est mis à jour en poussant sur
master
puis les fichiers JSON compilés sont déployés sur le serveur netlify à l'adresse : https://data.nosgestesclimat.fr. Les fichiers JSON sont ensuite récupérés par l'application web.Problème
Avec cette méthode, il est très facile d'introduire des modifications cassantes dans le modèle. Par exemple, si une des règles est renommées, et que le changement n'est pas répercuté dans l'application web, alors il est possible que l'application web ne fonctionne plus.
De plus, il est difficile d'associer une version du modèle à une situation Publicodes donnée. En effet, cela pourrait permettre de savoir quelle version du modèle utiliser si une personne a effectué un calcul à une date donnée et ainsi de pouvoir éviter les régressions. On pourrait également imaginer d'associer à chaque nouvelle version cassante du modèle un script de migration permettant de mettre à jour les situations d'une version à l'autre.
Solution
Pour résoudre ce problème, nous allons mettre en place un système de versionnage du modèle et modifier le processus de développement de celui-ci.
Utilisation du modèle versionné
Paquet NPM
Des travaux antérieurs ont permis de mettre en place un système de paquets NPM permettant la réutilisation des règles dans d'autres modèles Publicodes ou bien d'importer les règles dans un projet JS.
Cependant, le modèle NGC a la particularité d'être régionalisé, traduit et optimisé. Ainsi, pour chaque version du modèle, les règles du modèle sont compilées en 72 fichiers JSON de 500 à 800 Ko chacun.
Il parait donc peu judicieux de publier l'ensemble des fichiers sur NPM. De plus, côté application web, une seule version du modèle est utilisée à la fois et il serait donc inutile de charger l'ensemble du paquet NPM côté client.
Quand bien même, on trouverait une solution pour charger uniquement les règles utilisées côté client, il faudrait tout de même publier l'ensemble des fichiers sur NPM et il serait compliqué d'utiliser des versions antérieures du modèle.
API REST (solution retenue)
Une solution plus adaptée serait d'utiliser l'API REST Publicodes pour récupérer les règles d'une version donnée. Cela permettrait de ne pas avoir à publier l'ensemble des fichiers sur NPM et de pouvoir utiliser des versions antérieures du modèle.
On pourrait imaginer une API REST de la forme :
Avec :
version
- la version du modèle à utiliser, (latest
pour la dernière version)langue
- la langue à utiliser (fr
ouen
)region
- la région à utiliser (FR
,CA
,BE
,CH
, etc...)route
- la commande à effectuer parmi :rules
: retourne l'ensemble des règles du modèlerules-optim
: retourne l'ensemble des règles du modèle optimisérules/{rule}
: retourne la règle{rule}
du modèleevaluate
: évalue une règle avec la situation passée en paramètreversions
: retourne l'ensemble des versions du modèleversions/{version}
: retourne les informations de la version{version}
(date, notes de version, scripts de migrations, langues et régions supportées)personas
: retourne l'ensemble des personas du modèleProcessus de développement
Le processus de développement du modèle sera le suivant :
preprod
à partir demaster
feature
etfix
à partir depreprod
preprod
preprod
est mergée dansmaster
Implémentation
Gestion des versions
On aurait donc un nouveau dépôt
nosgestesclimat-api
qui contiendrait le code du serveur et qui serait déployé sur Netlify à l'adressehttps://data.nosgestesclimat.fr
(ou autre ?).J'imagine deux solutions pour gérer les versions du modèle côté serveur :
Pour chaque nouvelle release du modèle on ajoute un sous dossier dans un dossier
versions
du dépôtnosgestesclimat-api
qui contiendrait l'ensemble des fichiers JSON compilés du modèle et les personas. (solution préférée)Le serveur n'est déployé qu'une seul fois, et met à jours sont contenu dynamiquement.
Contenu écrit du modèle
Les notes de version actuelles et plus généralement l'ensemble du dossier
contenu-ecrit
seront migrées dans le dépôt-site
.Application web
Il faudra également modifier l'application web pour qu'elle utilise l'API REST afin de récupérer les règles du modèle.
Tâches
MVP
nosgestesclimat-api
:nosgestesclimat-api
dépôt
nosgestesclimat
nosgestesclimat
:en-us
partout au lieu deen
-site
contenu-ecrit
etpublic
du dépôtnosgestesclimat
nosgestesclimat-site-nextjs
:Améliorations
Questions
personas
à l'API REST ?The text was updated successfully, but these errors were encountered: