data-primals-engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +169 -0
- package/package.json +72 -0
- package/server.js +85 -0
- package/src/config.js +16 -0
- package/src/constants.js +210 -0
- package/src/core.js +340 -0
- package/src/data.js +495 -0
- package/src/defaultModels.js +1287 -0
- package/src/email.js +349 -0
- package/src/engine.js +168 -0
- package/src/events.js +81 -0
- package/src/gameObject.js +189 -0
- package/src/i18n.js +16855 -0
- package/src/index.js +15 -0
- package/src/middlewares/middleware-mongodb.js +131 -0
- package/src/middlewares/throttle.js +33 -0
- package/src/middlewares/timeout.js +47 -0
- package/src/migrate.js +216 -0
- package/src/migrations/20240522143000-content.js +20 -0
- package/src/modules/assistant.js +296 -0
- package/src/modules/bucket.js +233 -0
- package/src/modules/data.js +5692 -0
- package/src/modules/file.js +192 -0
- package/src/modules/mongodb.js +67 -0
- package/src/modules/swagger.js +18 -0
- package/src/modules/user.js +226 -0
- package/src/modules/workflow.js +1296 -0
- package/src/openai.jobs.js +145 -0
- package/src/packs.js +3799 -0
- package/src/providers.js +61 -0
- package/src/tutorials.js +112 -0
- package/src/user.js +17 -0
- package/src/workers/crypto-worker.js +77 -0
- package/src/workers/import-export-worker.js +36 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
let engine = null;
|
|
5
|
+
const openai = () => {
|
|
6
|
+
if( !engine)
|
|
7
|
+
engine = new OpenAI();
|
|
8
|
+
return engine;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// La fonction devient asynchrone pour utiliser await
|
|
12
|
+
export const openaiJobModel = async (lang, txt, history, existingModels = []) => {
|
|
13
|
+
const conditionBuilderExample = JSON.stringify({ "$and": [ { "fieldNameOfTypeRelation": { "$find": { "$eq": [ "$$this.code", "fr" ] } }}, {"$eq":["$fieldOtherTypes","valueToSearch"]}, { "$ne": { "$user": null } } ] }, null, 2);
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
const completion = await openai().chat.completions.create({
|
|
17
|
+
model: "gpt-3.5-turbo-0125",
|
|
18
|
+
// IMPORTANT: Demander explicitement une réponse JSON
|
|
19
|
+
response_format: { "type": "json_object" },
|
|
20
|
+
messages: [
|
|
21
|
+
{
|
|
22
|
+
role: "system",
|
|
23
|
+
content:
|
|
24
|
+
`
|
|
25
|
+
Tu dois me retourner un objet JSON valide contenant les suggestions de modèles, basés sur la demande de l'utilisateur.
|
|
26
|
+
La spécification JSON d'UN modèle de données est la suivante :
|
|
27
|
+
Par exemple, pour "un modèle pour gérer une bibliothèque et ses livres", la réponse pourrait être:
|
|
28
|
+
{
|
|
29
|
+
"models": [{
|
|
30
|
+
"name": "book",
|
|
31
|
+
"description": "*description détaillée en plusieurs phrases de l'utilité du modèle, et ses cas d'usage, ici : Modèle de référencement de livres multi-support. Peut être utilisé pour des bibliothèques personnelles, virtuelles ou municipales.*",
|
|
32
|
+
"fields": [
|
|
33
|
+
{"name": "title", "type": "string", "required": true, "asMain": true, "hint": "Titre du livre", color: '#FF89CC'},
|
|
34
|
+
{"name": "isbn", "type": "string", "unique": true, "hint": "Numéro ISBN"},
|
|
35
|
+
{"name": "author", "type": "relation", "relation": "author", "hint": "Auteur du livre", color: '#CCCCCC'},
|
|
36
|
+
{"name": "publicationDate", "type": "date", "default": "now", "hint": "Date de publication du livre"}
|
|
37
|
+
{"name": "bankCardNumber", "type": "text", "anonymized": true, "hint": "Numéro de carte bancaire anonymisé"}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
{
|
|
41
|
+
name: "library",
|
|
42
|
+
"description": "",
|
|
43
|
+
fields: [
|
|
44
|
+
{
|
|
45
|
+
"name": "name",
|
|
46
|
+
"type": "string",
|
|
47
|
+
asMain: true,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "address",
|
|
51
|
+
"type": "string",
|
|
52
|
+
asMain: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "city",
|
|
56
|
+
"type": "string",
|
|
57
|
+
asMain: true,
|
|
58
|
+
color: '#E63345'
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "postalCode",
|
|
62
|
+
"type": "string",
|
|
63
|
+
asMain: true,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "country",
|
|
67
|
+
"type": "string",
|
|
68
|
+
color: "#4F80BF",
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}]
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
les types de champ autorisés sont :
|
|
75
|
+
string, string_t (translation key)
|
|
76
|
+
avec les propriétés { maxlength: number, multiline: boolean }
|
|
77
|
+
|
|
78
|
+
, password, url, phone, email,, richtext (html),
|
|
79
|
+
avec les propriétés { maxlength: number }
|
|
80
|
+
boolean
|
|
81
|
+
code
|
|
82
|
+
avec les propriétés { language: 'json', conditionBuilder: boolean }, avec conditionBuilder la prop pour construire des conditions sur les données
|
|
83
|
+
number
|
|
84
|
+
avec les propriétés { step: 0.1, unit: string, min: number, max: number }
|
|
85
|
+
|
|
86
|
+
date, datetime,
|
|
87
|
+
avec les propriétés { min: dateIso, max: dateIso }
|
|
88
|
+
enum,
|
|
89
|
+
avec les propriétés { items: ["label 1", "..."] }
|
|
90
|
+
|
|
91
|
+
array
|
|
92
|
+
avec les propriétés { itemsType: "string_t", ...et les autres propriétés du type itemsType }
|
|
93
|
+
relation
|
|
94
|
+
avec les propriétés { relationFilter: <condition>, multiple: boolean, relation: 'autreModeleNom'}, multiple permettant une relation 1-n pour chaque donnée du modèle.
|
|
95
|
+
Préfères l'utilisation du multiple et d'un modèle séparé plutôt qu'un type array avec itemsType=string.
|
|
96
|
+
Pour le type \`relation\`, utilise l'un des noms de modèles existants suivants : ${existingModels.join(', ')} ou le nom du modèle relationnel généré.\`
|
|
97
|
+
color
|
|
98
|
+
avec une valeur en héxadecimal, ex: '#FF0000'
|
|
99
|
+
file
|
|
100
|
+
pour gérer les documents
|
|
101
|
+
calculated
|
|
102
|
+
pour gérer les champs calculés (utile pour l'utilisateur)
|
|
103
|
+
model (nom du modele choisi),
|
|
104
|
+
|
|
105
|
+
cronSchedule
|
|
106
|
+
avec les propriétés { default: '* * * * * *', cronMask: [false, true, true, true, true, true])
|
|
107
|
+
|
|
108
|
+
<condition> ou la propriété 'condition' d'affichage sur les champs du modèle se définissent de cette manière :
|
|
109
|
+
${conditionBuilderExample} avec les opérateurs mongodb $eq,$ne,$gt,$gte,$lt,$lte,$in,$nin,$dateAdd disponibles
|
|
110
|
+
|
|
111
|
+
Les modèles doivent être absolument nommés autrement que ceux déjà existants (donc pas ceux là : {${existingModels.join(', ')})
|
|
112
|
+
Si ils sont nommés pareil, renomme les tiens avec un suffixe '_2', ou '_3'...
|
|
113
|
+
Et assures-toi de générer les modèles que tu as introduits dans tes relations.
|
|
114
|
+
|
|
115
|
+
'default' est la valeur par défaut que prendra le champ (string, number, boolean, or array of type supported)
|
|
116
|
+
Traduits le texte des hint et les données qui ne sont pas des variables ou des clés d'objet dans la langue iso2 ${lang}.
|
|
117
|
+
|
|
118
|
+
Mets obligatoirement des couleurs harmonieuses sur les champs asMain, ou ceux que tu considères comme importants, car ils doivent être mis en avant (selon le thème).
|
|
119
|
+
|
|
120
|
+
Ne renvoie bien QUE le tableau de modèles JSON, sans texte explicatif ni formatage markdown.`
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
role: "user",
|
|
124
|
+
content: typeof(txt) === 'string' ? txt.substring(0, 4096) : '',
|
|
125
|
+
},
|
|
126
|
+
...history
|
|
127
|
+
],
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const aiResponse = completion.choices[0].message.content;
|
|
131
|
+
|
|
132
|
+
try {
|
|
133
|
+
// JSON.parse fonctionnera que le contenu soit un objet ou un tableau
|
|
134
|
+
return JSON.parse(aiResponse); // On retourne directement le résultat parsé
|
|
135
|
+
} catch (e) {
|
|
136
|
+
console.error("Erreur de parsing du JSON de l'IA:", e);
|
|
137
|
+
throw new Error("Réponse invalide de l'IA.");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
} catch (error) {
|
|
141
|
+
console.error("Error calling OpenAI or parsing response:", error);
|
|
142
|
+
// Renvoyer l'erreur pour que l'endpoint API puisse la gérer
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
};
|