Grist AI Transformer est un widget Custom Grist connecté à une API FastAPI. Le prompt est lu depuis une table Config du document Grist, puis appliqué automatiquement aux données texte.
Un aperçu du prompt utilisé et du rendu obtenu dans Grist après transformation.
prompt.png — Prompt configuré dans la table Config.
exemple.png — Résultat obtenu dans la colonne Processed.Des transformations configurables à volonté, déclenchées automatiquement depuis Grist.
Votre prompt permet de remplacer noms, adresses, e-mails et données sensibles par des pseudonymes neutres pour objectiver les décisions en commission.
Les spécialistes du service et les instructeurs des dossiers ont accès à l'ensemble des informations sensibles du dossier. Les décideurs, commissions... ne voient que les informations anonymisées et pertinentes pour leur prise de décision.
Le widget lit le prompt dans la table Config (colonnes Param / Value) avec
le paramètre GRIST_AI_TRANSFORMER_PROMPT.
Le widget surveille la colonne Source via grist.onRecord et n'appelle l'API que lorsqu'une valeur est présente et non encore traitée.
Les clés API et URL internes sont cachées côté Serveur et ne transitent jamais par le frontend ; elles sont stockées dans config/params.json sur le serveur.
Fonctionne avec n'importe quel endpoint compatible OpenAI Responses API — modèle interne ou cloud, par paramétrage sur votre serveur.
Cinq composants qui collaborent de bout en bout.
Le fichier grist-plugin/index.html s'abonne aux changements de ligne via grist.onRecord. Quand Source est rempli et Processed est vide, il envoie une requête POST /api/process.
Sert le frontend en HTTPS et fait office de reverse-proxy vers localhost:8000 pour toutes les routes /api/*, sans exposer l'API directement.
main.py)Reçoit text et prompt depuis le widget, puis appelle le LLM via httpx.
N'importe quel modèle exposant l'API POST /responses compatible OpenAI. La clé, l'URL et le nom du modèle sont dans config/params.json.
Cinq étapes pour démarrer depuis zéro.
Clonez le dépôt officiel puis placez-vous dans le dossier :
git clone https://github.com/fredt34/grist-ai-transformer
cd grist-ai-transformer
Installez les dépendances puis démarrez le serveur :
pip install fastapi uvicorn httpx python-multipart
uvicorn main:app --host 127.0.0.1 --port 8000
config/params.json)Créez ce fichier avec vos identifiants IA (jamais versionnés) :
{
"ai_api_url": "https://api.openai.com/v1/responses",
"ai_api_model": "gpt-5.4",
"ai_api_key": "sk-proj-...",
"temperature": 0.2
}
Ajoutez ce bloc à votre Caddyfile pour servir le frontend et proxifier l'API :
votre-plugin.entreprise.com {
root * ./frontend
file_server
handle_path /api/* {
reverse_proxy localhost:8000
}
}
Dans votre document Grist :
https://votre-plugin.entreprise.com/grist-plugin/index.htmlProcessed).Source et Processed dans les options du widget.Config avec les colonnes Param et Value.Param = GRIST_AI_TRANSFORMER_PROMPT avec le prompt complet dans Value.Le prompt est défini dans la table Config du document Grist.
Table: Config
Colonnes:
- Param
- Value
Ligne requise:
Param = GRIST_AI_TRANSFORMER_PROMPT
Value = <votre prompt complet>
Le prompt est appliqué au niveau du module (widget) pour toutes les lignes traitées.
Colonnes Grist requises :
| Colonne | Type | Rôle |
|---|---|---|
Source | Texte / Markdown | Texte d'entrée à transformer |
Processed | Texte / Markdown | Résultat écrit par le widget |
Bonnes pratiques recommandées pour un déploiement en production.